aboutsummaryrefslogtreecommitdiffstats
path: root/fs/fuse
diff options
context:
space:
mode:
authorDave Hansen <haveblue@us.ibm.com>2006-10-01 02:29:06 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-01 03:39:30 -0400
commitce71ec36840368b877fb63bd14c8e67ab62d08b1 (patch)
tree55ea3caaa339881dfd66d787b3dbbb964825d07a /fs/fuse
parent17ff785691503f63ec648df82a7fdaece7695561 (diff)
[PATCH] r/o bind mounts: monitor zeroing of i_nlink
Some filesystems, instead of simply decrementing i_nlink, simply zero it during an unlink operation. We need to catch these in addition to the decrement operations. Signed-off-by: Dave Hansen <haveblue@us.ibm.com> Acked-by: Christoph Hellwig <hch@lst.de> Cc: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/fuse')
-rw-r--r--fs/fuse/dir.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index f85b2a282f13..8605155db171 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -508,7 +508,7 @@ static int fuse_unlink(struct inode *dir, struct dentry *entry)
508 /* Set nlink to zero so the inode can be cleared, if 508 /* Set nlink to zero so the inode can be cleared, if
509 the inode does have more links this will be 509 the inode does have more links this will be
510 discovered at the next lookup/getattr */ 510 discovered at the next lookup/getattr */
511 inode->i_nlink = 0; 511 clear_nlink(inode);
512 fuse_invalidate_attr(inode); 512 fuse_invalidate_attr(inode);
513 fuse_invalidate_attr(dir); 513 fuse_invalidate_attr(dir);
514 fuse_invalidate_entry_cache(entry); 514 fuse_invalidate_entry_cache(entry);
@@ -534,7 +534,7 @@ static int fuse_rmdir(struct inode *dir, struct dentry *entry)
534 err = req->out.h.error; 534 err = req->out.h.error;
535 fuse_put_request(fc, req); 535 fuse_put_request(fc, req);
536 if (!err) { 536 if (!err) {
537 entry->d_inode->i_nlink = 0; 537 clear_nlink(entry->d_inode);
538 fuse_invalidate_attr(dir); 538 fuse_invalidate_attr(dir);
539 fuse_invalidate_entry_cache(entry); 539 fuse_invalidate_entry_cache(entry);
540 } else if (err == -EINTR) 540 } else if (err == -EINTR)