All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Aneesh Kumar K. V" <aneesh.kumar@linux.vnet.ibm.com>
To: hch@infradead.org, viro@zeniv.linux.org.uk, adilger@sun.com,
	corbet@lwn.net, neilb@suse.de, npiggin@kernel.dk,
	hooanon05@yahoo.co.jp, bfields@fieldses.org, miklos@szeredi.hu
Cc: linux-fsdevel@vger.kernel.org, sfrench@us.ibm.com,
	philippe.deniel@CEA.FR, linux-kernel@vger.kernel.org
Subject: [Updated PATCH -V22 07/14] fs: Remove i_nlink check from file system link callback
Date: Fri, 29 Oct 2010 15:49:03 +0530	[thread overview]
Message-ID: <m3vd4lxpwo.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <1288346243-12211-8-git-send-email-aneesh.kumar@linux.vnet.ibm.com>

On Fri, 29 Oct 2010 15:27:16 +0530, "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> wrote:
> Now that VFS check for inode->i_nlink == 0 and returns proper
> error, remove similar check from file system
> 
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
> ---
>  fs/btrfs/inode.c    |    3 ---
>  fs/ext3/namei.c     |    7 -------
>  fs/ext4/namei.c     |    7 -------
>  fs/gfs2/ops_inode.c |    3 ---
>  fs/jfs/namei.c      |    3 ---
>  fs/reiserfs/namei.c |    4 ----
>  fs/ubifs/dir.c      |   18 ------------------
>  7 files changed, 0 insertions(+), 45 deletions(-)
> 

Updated patch to drop the gfs2 hunk based on feedback from Al Viro.
Updated patch below

commit c440c404eeec8e26baf2a3be3d5ebf05d6808e54
Author: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Date:   Fri Oct 29 14:47:47 2010 +0530

    fs: Remove i_nlink check from file system link callback
    
    Now that VFS check for inode->i_nlink == 0 and returns proper
    error, remove similar check from file system
    
    Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>

 fs/btrfs/inode.c    |    3 ---
 fs/ext3/namei.c     |    7 -------
 fs/ext4/namei.c     |    7 -------
 fs/jfs/namei.c      |    3 ---
 fs/reiserfs/namei.c |    4 ----
 fs/ubifs/dir.c      |   18 ------------------
 6 files changed, 0 insertions(+), 42 deletions(-)

diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 64f99cf..fdeaa14 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -4734,9 +4734,6 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
 	int err;
 	int drop_inode = 0;
 
-	if (inode->i_nlink == 0)
-		return -ENOENT;
-
 	/* do not allow sys_link's with other subvols of the same device */
 	if (root->objectid != BTRFS_I(inode)->root->objectid)
 		return -EPERM;
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c
index bce9dce..3edda98 100644
--- a/fs/ext3/namei.c
+++ b/fs/ext3/namei.c
@@ -2242,13 +2242,6 @@ static int ext3_link (struct dentry * old_dentry,
 
 	dquot_initialize(dir);
 
-	/*
-	 * Return -ENOENT if we've raced with unlink and i_nlink is 0.  Doing
-	 * otherwise has the potential to corrupt the orphan inode list.
-	 */
-	if (inode->i_nlink == 0)
-		return -ENOENT;
-
 retry:
 	handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) +
 					EXT3_INDEX_EXTRA_TRANS_BLOCKS);
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index 92203b8..38c03bf 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -2285,13 +2285,6 @@ static int ext4_link(struct dentry *old_dentry,
 
 	dquot_initialize(dir);
 
-	/*
-	 * Return -ENOENT if we've raced with unlink and i_nlink is 0.  Doing
-	 * otherwise has the potential to corrupt the orphan inode list.
-	 */
-	if (inode->i_nlink == 0)
-		return -ENOENT;
-
 retry:
 	handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
 					EXT4_INDEX_EXTRA_TRANS_BLOCKS);
diff --git a/fs/jfs/namei.c b/fs/jfs/namei.c
index 231ca4a..2619157 100644
--- a/fs/jfs/namei.c
+++ b/fs/jfs/namei.c
@@ -808,9 +808,6 @@ static int jfs_link(struct dentry *old_dentry,
 	if (ip->i_nlink == JFS_LINK_MAX)
 		return -EMLINK;
 
-	if (ip->i_nlink == 0)
-		return -ENOENT;
-
 	dquot_initialize(dir);
 
 	tid = txBegin(ip->i_sb, 0);
diff --git a/fs/reiserfs/namei.c b/fs/reiserfs/namei.c
index ba5f51e..ae303ca 100644
--- a/fs/reiserfs/namei.c
+++ b/fs/reiserfs/namei.c
@@ -1122,10 +1122,6 @@ static int reiserfs_link(struct dentry *old_dentry, struct inode *dir,
 		reiserfs_write_unlock(dir->i_sb);
 		return -EMLINK;
 	}
-	if (inode->i_nlink == 0) {
-		reiserfs_write_unlock(dir->i_sb);
-		return -ENOENT;
-	}
 
 	/* inc before scheduling so reiserfs_unlink knows we are here */
 	inc_nlink(inode);
diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
index 14f64b6..7217d67 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -522,24 +522,6 @@ static int ubifs_link(struct dentry *old_dentry, struct inode *dir,
 	ubifs_assert(mutex_is_locked(&dir->i_mutex));
 	ubifs_assert(mutex_is_locked(&inode->i_mutex));
 
-	/*
-	 * Return -ENOENT if we've raced with unlink and i_nlink is 0.  Doing
-	 * otherwise has the potential to corrupt the orphan inode list.
-	 *
-	 * Indeed, consider a scenario when 'vfs_link(dirA/fileA)' and
-	 * 'vfs_unlink(dirA/fileA, dirB/fileB)' race. 'vfs_link()' does not
-	 * lock 'dirA->i_mutex', so this is possible. Both of the functions
-	 * lock 'fileA->i_mutex' though. Suppose 'vfs_unlink()' wins, and takes
-	 * 'fileA->i_mutex' mutex first. Suppose 'fileA->i_nlink' is 1. In this
-	 * case 'ubifs_unlink()' will drop the last reference, and put 'inodeA'
-	 * to the list of orphans. After this, 'vfs_link()' will link
-	 * 'dirB/fileB' to 'inodeA'. This is a problem because, for example,
-	 * the subsequent 'vfs_unlink(dirB/fileB)' will add the same inode
-	 * to the list of orphans.
-	 */
-	 if (inode->i_nlink == 0)
-		 return -ENOENT;
-
 	err = dbg_check_synced_i_size(inode);
 	if (err)
 		return err;

  reply	other threads:[~2010-10-29 10:19 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-29  9:57 [PATCH -V22 00/14] Generic name to handle and open by handle syscalls Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 01/14] exportfs: Return the minimum required handle size Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 02/14] vfs: Add name to file handle conversion support Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 03/14] vfs: Add open by file handle support Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 04/14] vfs: Add handle based readlink syscall Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 05/14] vfs: Add handle based stat syscall Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 06/14] fs: Don't allow to create hardlink for deleted file Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 07/14] fs: Remove i_nlink check from file system link callback Aneesh Kumar K.V
2010-10-29 10:19   ` Aneesh Kumar K. V [this message]
2010-10-29  9:57 ` [PATCH -V22 08/14] vfs: Add handle based link syscall Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 09/14] x86: Add new syscalls for x86_32 Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 10/14] x86: Add new syscalls for x86_64 Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 11/14] unistd.h: Add new syscalls numbers to asm-generic Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 12/14] vfs: Export file system uuid via /proc/<pid>/mountinfo Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 13/14] ext3: Copy fs UUID to superblock Aneesh Kumar K.V
2010-10-29  9:57 ` [PATCH -V22 14/14] ext4: " Aneesh Kumar K.V

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m3vd4lxpwo.fsf@linux.vnet.ibm.com \
    --to=aneesh.kumar@linux.vnet.ibm.com \
    --cc=adilger@sun.com \
    --cc=bfields@fieldses.org \
    --cc=corbet@lwn.net \
    --cc=hch@infradead.org \
    --cc=hooanon05@yahoo.co.jp \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    --cc=neilb@suse.de \
    --cc=npiggin@kernel.dk \
    --cc=philippe.deniel@CEA.FR \
    --cc=sfrench@us.ibm.com \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.