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 --- |