udf: Avoid dir link count to go negative
authorJan Kara <jack@suse.cz>
Thu, 4 Sep 2014 09:47:51 +0000 (11:47 +0200)
committerJan Kara <jack@suse.cz>
Thu, 4 Sep 2014 09:47:51 +0000 (11:47 +0200)
If we are writing back inode of unlinked directory, its link count ends
up being (u16)-1. Although the inode is deleted, udf_iget() can load the
inode when NFS uses stale file handle and get confused.

Signed-off-by: Jan Kara <jack@suse.cz>
fs/udf/inode.c

index 236cd48184c2df20e75bc9fee098ded782f2560f..e86f9b67aa16f85048c0a6ebc3120cc2495d5f32 100644 (file)
@@ -1664,7 +1664,7 @@ static int udf_update_inode(struct inode *inode, int do_sync)
                     FE_PERM_U_DELETE | FE_PERM_U_CHATTR));
        fe->permissions = cpu_to_le32(udfperms);
 
-       if (S_ISDIR(inode->i_mode))
+       if (S_ISDIR(inode->i_mode) && inode->i_nlink > 0)
                fe->fileLinkCount = cpu_to_le16(inode->i_nlink - 1);
        else
                fe->fileLinkCount = cpu_to_le16(inode->i_nlink);