]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/autofs4/autofs_i.h
[PATCH] autofs4: tree race fix
[linux-2.6-omap-h63xx.git] / fs / autofs4 / autofs_i.h
index 9789877352522440d723186002c32d8ddc6d5d20..c7b2b8890188599e09f19c255fa9ec1014342e2e 100644 (file)
@@ -102,6 +102,7 @@ struct autofs_sb_info {
        int needs_reghost;
        struct super_block *sb;
        struct semaphore wq_sem;
+       spinlock_t fs_lock;
        struct autofs_wait_queue *queues; /* Wait queue pointer */
 };
 
@@ -127,9 +128,18 @@ static inline int autofs4_oz_mode(struct autofs_sb_info *sbi) {
 static inline int autofs4_ispending(struct dentry *dentry)
 {
        struct autofs_info *inf = autofs4_dentry_ino(dentry);
+       int pending = 0;
 
-       return (dentry->d_flags & DCACHE_AUTOFS_PENDING) ||
-               (inf != NULL && inf->flags & AUTOFS_INF_EXPIRING);
+       if (dentry->d_flags & DCACHE_AUTOFS_PENDING)
+               return 1;
+
+       if (inf) {
+               spin_lock(&inf->sbi->fs_lock);
+               pending = inf->flags & AUTOFS_INF_EXPIRING;
+               spin_unlock(&inf->sbi->fs_lock);
+       }
+
+       return pending;
 }
 
 static inline void autofs4_copy_atime(struct file *src, struct file *dst)