exportfs: add find_disconnected_root helper
Subsystems (3)
PATCH 7/8 exportfs: add find_disconnected_root helper
Break the loop that finds the root of a disconnected subtree into a helper of it's own to make reading more clearly and document the intent.
Signed-off-by Christoph Hellwig <[email protected]>
fs/exportfs/expfs.c +23 -16
@@ -72,6 +72,27 @@return NULL ; } +/* +* Find root of a disconnected subtree and return a reference to it. +*/ +static struct dentry * +find_disconnected_root (struct dentry *dentry) +{ +dget (dentry); +spin_lock (&dentry->d_lock); +while (!IS_ROOT (dentry) && + (dentry->d_parent->d_flags &DCACHE_DISCONNECTED )) { +struct dentry *parent = dentry->d_parent; +dget (parent); +spin_unlock (&dentry->d_lock); +dput (dentry); + dentry = parent; +spin_lock (&dentry->d_lock); + } +spin_unlock (&dentry->d_lock); +return dentry; +} +/** * find_exported_dentry - helper routine to implement export_operations->decode_fh * @sb: The &super_block identifying the filesystem
@@ -166,23 +187,9 @@* the noprogress counter. If we go through the loop 10 times (2 is * probably enough) without getting anywhere, we just give up */ - noprogress=0 ; + noprogress =0 ;while (target_dir->d_flags &DCACHE_DISCONNECTED && noprogress++ <10 ) { -struct dentry *pd = target_dir; - -dget (pd); -spin_lock (&pd->d_lock); -while (!IS_ROOT (pd) && - (pd->d_parent->d_flags&DCACHE_DISCONNECTED )) { -struct dentry *parent = pd->d_parent; - -dget (parent); -spin_unlock (&pd->d_lock); -dput (pd); - pd = parent; -spin_lock (&pd->d_lock); - } -spin_unlock (&pd->d_lock); +struct dentry *pd =find_disconnected_root (target_dir);if (!IS_ROOT (pd)) {/* must have found a connected parent - great */
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs