| From dfca7cebc2679f3d129f8e680a8f199a7ad16e38 Mon Sep 17 00:00:00 2001 |
| From: Miklos Szeredi <mszeredi@suse.cz> |
| Date: Mon, 4 Feb 2013 15:57:42 +0100 |
| Subject: fuse: don't WARN when nlink is zero |
| |
| From: Miklos Szeredi <mszeredi@suse.cz> |
| |
| commit dfca7cebc2679f3d129f8e680a8f199a7ad16e38 upstream. |
| |
| drop_nlink() warns if nlink is already zero. This is triggerable by a buggy |
| userspace filesystem. The cure, I think, is worse than the disease so disable |
| the warning. |
| |
| Reported-by: Tero Roponen <tero.roponen@gmail.com> |
| Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/fuse/dir.c | 9 ++++++++- |
| 1 file changed, 8 insertions(+), 1 deletion(-) |
| |
| --- a/fs/fuse/dir.c |
| +++ b/fs/fuse/dir.c |
| @@ -682,7 +682,14 @@ static int fuse_unlink(struct inode *dir |
| |
| spin_lock(&fc->lock); |
| fi->attr_version = ++fc->attr_version; |
| - drop_nlink(inode); |
| + /* |
| + * If i_nlink == 0 then unlink doesn't make sense, yet this can |
| + * happen if userspace filesystem is careless. It would be |
| + * difficult to enforce correct nlink usage so just ignore this |
| + * condition here |
| + */ |
| + if (inode->i_nlink > 0) |
| + drop_nlink(inode); |
| spin_unlock(&fc->lock); |
| fuse_invalidate_attr(inode); |
| fuse_invalidate_attr(dir); |