If the expiring_list is empty, we can avoid a costly spinlock
in the rcu-walk path through autofs4_d_manage (once the rest
of the path becomes rcu-walk friendly).

Signed-off-by: NeilBrown <[email protected]>
Reviewed-by: Ian Kent <[email protected]>
---
 fs/autofs4/root.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/fs/autofs4/root.c b/fs/autofs4/root.c
index cc87c1abac97..fb202cadd4b3 100644
--- a/fs/autofs4/root.c
+++ b/fs/autofs4/root.c
@@ -166,8 +166,10 @@ static struct dentry *autofs4_lookup_active(struct dentry 
*dentry)
        const unsigned char *str = name->name;
        struct list_head *p, *head;
 
-       spin_lock(&sbi->lookup_lock);
        head = &sbi->active_list;
+       if (list_empty(head))
+               return NULL;
+       spin_lock(&sbi->lookup_lock);
        list_for_each(p, head) {
                struct autofs_info *ino;
                struct dentry *active;
@@ -218,8 +220,10 @@ static struct dentry *autofs4_lookup_expiring(struct 
dentry *dentry)
        const unsigned char *str = name->name;
        struct list_head *p, *head;
 
-       spin_lock(&sbi->lookup_lock);
        head = &sbi->expiring_list;
+       if (list_empty(head))
+               return NULL;
+       spin_lock(&sbi->lookup_lock);
        list_for_each(p, head) {
                struct autofs_info *ino;
                struct dentry *expiring;


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to