Loading fs/dcache.c +0 −29 Original line number Diff line number Diff line Loading @@ -88,35 +88,6 @@ EXPORT_SYMBOL(rename_lock); static struct kmem_cache *dentry_cache __read_mostly; /** * read_seqbegin_or_lock - begin a sequence number check or locking block * @lock: sequence lock * @seq : sequence number to be checked * * First try it once optimistically without taking the lock. If that fails, * take the lock. The sequence number is also used as a marker for deciding * whether to be a reader (even) or writer (odd). * N.B. seq must be initialized to an even number to begin with. */ static inline void read_seqbegin_or_lock(seqlock_t *lock, int *seq) { if (!(*seq & 1)) /* Even */ *seq = read_seqbegin(lock); else /* Odd */ read_seqlock_excl(lock); } static inline int need_seqretry(seqlock_t *lock, int seq) { return !(seq & 1) && read_seqretry(lock, seq); } static inline void done_seqretry(seqlock_t *lock, int seq) { if (seq & 1) read_sequnlock_excl(lock); } /* * This is the single most critical data structure when it comes * to the dcache: the hashtable for lookups. Somebody should try Loading include/linux/seqlock.h +29 −0 Original line number Diff line number Diff line Loading @@ -354,6 +354,35 @@ static inline void read_sequnlock_excl(seqlock_t *sl) spin_unlock(&sl->lock); } /** * read_seqbegin_or_lock - begin a sequence number check or locking block * @lock: sequence lock * @seq : sequence number to be checked * * First try it once optimistically without taking the lock. If that fails, * take the lock. The sequence number is also used as a marker for deciding * whether to be a reader (even) or writer (odd). * N.B. seq must be initialized to an even number to begin with. */ static inline void read_seqbegin_or_lock(seqlock_t *lock, int *seq) { if (!(*seq & 1)) /* Even */ *seq = read_seqbegin(lock); else /* Odd */ read_seqlock_excl(lock); } static inline int need_seqretry(seqlock_t *lock, int seq) { return !(seq & 1) && read_seqretry(lock, seq); } static inline void done_seqretry(seqlock_t *lock, int seq) { if (seq & 1) read_sequnlock_excl(lock); } static inline void read_seqlock_excl_bh(seqlock_t *sl) { spin_lock_bh(&sl->lock); Loading Loading
fs/dcache.c +0 −29 Original line number Diff line number Diff line Loading @@ -88,35 +88,6 @@ EXPORT_SYMBOL(rename_lock); static struct kmem_cache *dentry_cache __read_mostly; /** * read_seqbegin_or_lock - begin a sequence number check or locking block * @lock: sequence lock * @seq : sequence number to be checked * * First try it once optimistically without taking the lock. If that fails, * take the lock. The sequence number is also used as a marker for deciding * whether to be a reader (even) or writer (odd). * N.B. seq must be initialized to an even number to begin with. */ static inline void read_seqbegin_or_lock(seqlock_t *lock, int *seq) { if (!(*seq & 1)) /* Even */ *seq = read_seqbegin(lock); else /* Odd */ read_seqlock_excl(lock); } static inline int need_seqretry(seqlock_t *lock, int seq) { return !(seq & 1) && read_seqretry(lock, seq); } static inline void done_seqretry(seqlock_t *lock, int seq) { if (seq & 1) read_sequnlock_excl(lock); } /* * This is the single most critical data structure when it comes * to the dcache: the hashtable for lookups. Somebody should try Loading
include/linux/seqlock.h +29 −0 Original line number Diff line number Diff line Loading @@ -354,6 +354,35 @@ static inline void read_sequnlock_excl(seqlock_t *sl) spin_unlock(&sl->lock); } /** * read_seqbegin_or_lock - begin a sequence number check or locking block * @lock: sequence lock * @seq : sequence number to be checked * * First try it once optimistically without taking the lock. If that fails, * take the lock. The sequence number is also used as a marker for deciding * whether to be a reader (even) or writer (odd). * N.B. seq must be initialized to an even number to begin with. */ static inline void read_seqbegin_or_lock(seqlock_t *lock, int *seq) { if (!(*seq & 1)) /* Even */ *seq = read_seqbegin(lock); else /* Odd */ read_seqlock_excl(lock); } static inline int need_seqretry(seqlock_t *lock, int seq) { return !(seq & 1) && read_seqretry(lock, seq); } static inline void done_seqretry(seqlock_t *lock, int seq) { if (seq & 1) read_sequnlock_excl(lock); } static inline void read_seqlock_excl_bh(seqlock_t *sl) { spin_lock_bh(&sl->lock); Loading