f2fs.h (50c63009f6ab37eb78d8b4f9bc606a12b2b46505) f2fs.h (7f8e249dccc4c530cf26c2c091f5bb64e701c262)
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * fs/f2fs/f2fs.h
4 *
5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6 * http://www.samsung.com/
7 */
8#ifndef _LINUX_F2FS_H

--- 118 unchanged lines hidden (view full) ---

127 * An implementation of an rwsem that is explicitly unfair to readers. This
128 * prevents priority inversion when a low-priority reader acquires the read lock
129 * while sleeping on the write lock but the write lock is needed by
130 * higher-priority clients.
131 */
132
133struct f2fs_rwsem {
134 struct rw_semaphore internal_rwsem;
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * fs/f2fs/f2fs.h
4 *
5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6 * http://www.samsung.com/
7 */
8#ifndef _LINUX_F2FS_H

--- 118 unchanged lines hidden (view full) ---

127 * An implementation of an rwsem that is explicitly unfair to readers. This
128 * prevents priority inversion when a low-priority reader acquires the read lock
129 * while sleeping on the write lock but the write lock is needed by
130 * higher-priority clients.
131 */
132
133struct f2fs_rwsem {
134 struct rw_semaphore internal_rwsem;
135#ifdef CONFIG_F2FS_UNFAIR_RWSEM
135 wait_queue_head_t read_waiters;
136 wait_queue_head_t read_waiters;
137#endif
136};
137
138struct f2fs_mount_info {
139 unsigned int opt;
140 int write_io_size_bits; /* Write IO size bits */
141 block_t root_reserved_blocks; /* root reserved blocks */
142 kuid_t s_resuid; /* reserved blocks for uid */
143 kgid_t s_resgid; /* reserved blocks for gid */

--- 1982 unchanged lines hidden (view full) ---

2126 \
2127 __init_f2fs_rwsem((sem), #sem, &__key); \
2128} while (0)
2129
2130static inline void __init_f2fs_rwsem(struct f2fs_rwsem *sem,
2131 const char *sem_name, struct lock_class_key *key)
2132{
2133 __init_rwsem(&sem->internal_rwsem, sem_name, key);
138};
139
140struct f2fs_mount_info {
141 unsigned int opt;
142 int write_io_size_bits; /* Write IO size bits */
143 block_t root_reserved_blocks; /* root reserved blocks */
144 kuid_t s_resuid; /* reserved blocks for uid */
145 kgid_t s_resgid; /* reserved blocks for gid */

--- 1982 unchanged lines hidden (view full) ---

2128 \
2129 __init_f2fs_rwsem((sem), #sem, &__key); \
2130} while (0)
2131
2132static inline void __init_f2fs_rwsem(struct f2fs_rwsem *sem,
2133 const char *sem_name, struct lock_class_key *key)
2134{
2135 __init_rwsem(&sem->internal_rwsem, sem_name, key);
2136#ifdef CONFIG_F2FS_UNFAIR_RWSEM
2134 init_waitqueue_head(&sem->read_waiters);
2137 init_waitqueue_head(&sem->read_waiters);
2138#endif
2135}
2136
2137static inline int f2fs_rwsem_is_locked(struct f2fs_rwsem *sem)
2138{
2139 return rwsem_is_locked(&sem->internal_rwsem);
2140}
2141
2142static inline int f2fs_rwsem_is_contended(struct f2fs_rwsem *sem)
2143{
2144 return rwsem_is_contended(&sem->internal_rwsem);
2145}
2146
2147static inline void f2fs_down_read(struct f2fs_rwsem *sem)
2148{
2139}
2140
2141static inline int f2fs_rwsem_is_locked(struct f2fs_rwsem *sem)
2142{
2143 return rwsem_is_locked(&sem->internal_rwsem);
2144}
2145
2146static inline int f2fs_rwsem_is_contended(struct f2fs_rwsem *sem)
2147{
2148 return rwsem_is_contended(&sem->internal_rwsem);
2149}
2150
2151static inline void f2fs_down_read(struct f2fs_rwsem *sem)
2152{
2153#ifdef CONFIG_F2FS_UNFAIR_RWSEM
2149 wait_event(sem->read_waiters, down_read_trylock(&sem->internal_rwsem));
2154 wait_event(sem->read_waiters, down_read_trylock(&sem->internal_rwsem));
2155#else
2156 down_read(&sem->internal_rwsem);
2157#endif
2150}
2151
2152static inline int f2fs_down_read_trylock(struct f2fs_rwsem *sem)
2153{
2154 return down_read_trylock(&sem->internal_rwsem);
2155}
2156
2157#ifdef CONFIG_DEBUG_LOCK_ALLOC

--- 18 unchanged lines hidden (view full) ---

2176static inline int f2fs_down_write_trylock(struct f2fs_rwsem *sem)
2177{
2178 return down_write_trylock(&sem->internal_rwsem);
2179}
2180
2181static inline void f2fs_up_write(struct f2fs_rwsem *sem)
2182{
2183 up_write(&sem->internal_rwsem);
2158}
2159
2160static inline int f2fs_down_read_trylock(struct f2fs_rwsem *sem)
2161{
2162 return down_read_trylock(&sem->internal_rwsem);
2163}
2164
2165#ifdef CONFIG_DEBUG_LOCK_ALLOC

--- 18 unchanged lines hidden (view full) ---

2184static inline int f2fs_down_write_trylock(struct f2fs_rwsem *sem)
2185{
2186 return down_write_trylock(&sem->internal_rwsem);
2187}
2188
2189static inline void f2fs_up_write(struct f2fs_rwsem *sem)
2190{
2191 up_write(&sem->internal_rwsem);
2192#ifdef CONFIG_F2FS_UNFAIR_RWSEM
2184 wake_up_all(&sem->read_waiters);
2193 wake_up_all(&sem->read_waiters);
2194#endif
2185}
2186
2187static inline void f2fs_lock_op(struct f2fs_sb_info *sbi)
2188{
2189 f2fs_down_read(&sbi->cp_rwsem);
2190}
2191
2192static inline int f2fs_trylock_op(struct f2fs_sb_info *sbi)

--- 2333 unchanged lines hidden ---
2195}
2196
2197static inline void f2fs_lock_op(struct f2fs_sb_info *sbi)
2198{
2199 f2fs_down_read(&sbi->cp_rwsem);
2200}
2201
2202static inline int f2fs_trylock_op(struct f2fs_sb_info *sbi)

--- 2333 unchanged lines hidden ---