|
@@ -705,7 +705,14 @@ static int fuse_unlink(struct inode *dir, struct dentry *entry)
|
|
|
|
|
|
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);
|