X-Git-Url: http://www.pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=fs%2Fautofs4%2Finode.c;h=2335b1d6490f0fd3f86294ab42e569293e521455;hb=1aff3c8b0511b5bb54acf7859e0c6ec9ae7287a9;hp=1ad98d48e550dc2c79b2a976172fa1bde1dc4ec0;hpb=1ce12bad85863478619688c0c7363f93a9e5edb8;p=linux-2.6-omap-h63xx.git diff --git a/fs/autofs4/inode.c b/fs/autofs4/inode.c index 1ad98d48e55..2335b1d6490 100644 --- a/fs/autofs4/inode.c +++ b/fs/autofs4/inode.c @@ -46,6 +46,7 @@ struct autofs_info *autofs4_init_ino(struct autofs_info *ino, ino->size = 0; ino->last_used = jiffies; + atomic_set(&ino->count, 0); ino->sbi = sbi; @@ -64,10 +65,19 @@ struct autofs_info *autofs4_init_ino(struct autofs_info *ino, void autofs4_free_ino(struct autofs_info *ino) { + struct autofs_info *p_ino; + if (ino->dentry) { ino->dentry->d_fsdata = NULL; - if (ino->dentry->d_inode) + if (ino->dentry->d_inode) { + struct dentry *parent = ino->dentry->d_parent; + if (atomic_dec_and_test(&ino->count)) { + p_ino = autofs4_dentry_ino(parent); + if (p_ino && parent != ino->dentry) + atomic_dec(&p_ino->count); + } dput(ino->dentry); + } ino->dentry = NULL; } if (ino->free)