On Tue, Feb 20, 2018 at 12:34:57AM +0100, John Ogness wrote: > Implementation 2: Using switch on a dentry_lock_inode() that returns a > tristate value. Does not support branch prediction. This approach is > probably easiest to understand. > > /* > * Lock the inode. Might drop dentry->d_lock temporarily > * which allows inode to change. Start over if that happens. > */ > switch (dentry_lock_inode(dentry)) { > case LOCK_FAST: Bah, I just checked, you cannot use GCC label attributes on statements :/ Otherwise you could've done: case LOCK_FAST: __attribute__((hot)); > break; > case LOCK_SLOW: > /* > * Recheck refcount as it might have been > * incremented while d_lock was dropped. > */ > if (unlikely(dentry->d_lockref.count != 1)) > goto drop_ref; > break; > case LOCK_FAILED: > goto again; > } >