All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Sandeen <sandeen@sandeen.net>
To: Brian Foster <bfoster@redhat.com>
Cc: yongtaofu@gmail.com, xfs@oss.sgi.com
Subject: Re: xfs_iunlink_remove: xfs_inotobp() returned error 22 -- debugging
Date: Mon, 22 Apr 2013 14:59:54 -0500	[thread overview]
Message-ID: <517596BA.3060408@sandeen.net> (raw)
In-Reply-To: <516C89DF.4070904@redhat.com>

On 4/15/13 6:14 PM, Brian Foster wrote:
> Hi,
> 
> Thanks for the data in the previous thread:
> 
> http://oss.sgi.com/archives/xfs/2013-04/msg00327.html
> 
> I'm spinning off a new thread specifically for this because the original
> thread is already too large and scattered to track. As Eric stated,
> please try to keep data contained in as few messages as possible.
> 

Well, it's always simple in the end.  It just took a lot of debugging
to figure out what was happening - we do appreciate your help with that!

We were able to create a local reproducer, and it looks like
this patch fixes things:

commit aae8a97d3ec30788790d1720b71d76fd8eb44b73
Author: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Date:   Sat Jan 29 18:43:27 2011 +0530

    fs: Don't allow to create hardlink for deleted file
    
    Add inode->i_nlink == 0 check in VFS. Some of the file systems
    do this internally. A followup patch will remove those instance.
    This is needed to ensure that with link by handle we don't allow
    to create hardlink of an unlinked file. The check also prevent a race
    between unlink and link
    
    Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

diff --git a/fs/namei.c b/fs/namei.c
index 83e92ba..33be51a 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -2906,7 +2906,11 @@ int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_de
 		return error;
 
 	mutex_lock(&inode->i_mutex);
-	error = dir->i_op->link(old_dentry, dir, new_dentry);
+	/* Make sure we don't allow creating hardlink to an unlinked file */
+	if (inode->i_nlink == 0)
+		error =  -ENOENT;
+	else
+		error = dir->i_op->link(old_dentry, dir, new_dentry);
 	mutex_unlock(&inode->i_mutex);
 	if (!error)
 		fsnotify_link(dir, inode, new_dentry);


_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  parent reply	other threads:[~2013-04-22 19:59 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-15 23:14 xfs_iunlink_remove: xfs_inotobp() returned error 22 -- debugging Brian Foster
2013-04-16 16:24 ` Dave Chinner
2013-04-16 17:18   ` Brian Foster
2013-04-17  1:04     ` 符永涛
2013-04-17  1:35       ` 符永涛
2013-04-17  3:15         ` 符永涛
2013-04-17  3:48           ` 符永涛
2013-04-17  4:28             ` Eric Sandeen
2013-04-18  1:30               ` 符永涛
2013-04-18  6:45                 ` 符永涛
2013-04-18  8:25                   ` 符永涛
2013-04-18 11:41                     ` Brian Foster
2013-04-18 15:23                       ` 符永涛
2013-04-18 16:40                         ` 符永涛
2013-04-18 17:03                         ` Eric Sandeen
2013-04-18 18:35                         ` Eric Sandeen
2013-04-18 20:59                         ` Brian Foster
2013-04-19  6:40                           ` 符永涛
2013-04-19 11:41                             ` 符永涛
2013-04-19 14:59                               ` Eric Sandeen
2013-04-19 15:13                                 ` 符永涛
2013-04-19 15:18                                   ` 符永涛
2013-04-19 16:16                                     ` Eric Sandeen
2013-04-19 16:47                                       ` 符永涛
2013-04-19 17:00                                         ` 符永涛
2013-04-19 17:04                                           ` Eric Sandeen
2013-04-19 17:08                                             ` 符永涛
2013-04-19 17:17                                               ` 符永涛
2013-04-20  0:03                                                 ` 符永涛
2013-04-20  1:15                                                   ` 符永涛
2013-04-20  2:51                                                     ` 符永涛
2013-04-20  3:40                                                       ` Eric Sandeen
2013-04-20  4:03                                                         ` 符永涛
2013-04-20  4:11                                                           ` 符永涛
2013-04-20  4:20                                                           ` Eric Sandeen
2013-04-20  4:27                                                             ` 符永涛
2013-04-20 10:10                                                               ` 符永涛
2013-04-20 11:38                                                                 ` Brian Foster
2013-04-20 11:52                                                                   ` 符永涛
2013-04-20 12:58                                                                     ` Brian Foster
2013-04-20 13:12                                                                       ` 符永涛
2013-04-20 15:36                                                                   ` Eric Sandeen
     [not found]                                                                 ` <5172B73C.6000900@sandeen.net>
2013-04-20 23:52                                                                   ` 符永涛
2013-04-22 19:59 ` Eric Sandeen [this message]
2013-04-23  0:08   ` Dave Chinner
2013-04-23  0:52     ` Eric Sandeen
2013-04-23  1:31       ` 符永涛
2013-04-24  9:02       ` Dave Chinner
2013-04-24 10:21         ` 符永涛
2013-04-25  0:48           ` 符永涛

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=517596BA.3060408@sandeen.net \
    --to=sandeen@sandeen.net \
    --cc=bfoster@redhat.com \
    --cc=xfs@oss.sgi.com \
    --cc=yongtaofu@gmail.com \
    /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.