All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] [RESEND] return ENOENT from ext3_link when racing with unlink
@ 2007-01-23 17:23 Eric Sandeen
  0 siblings, 0 replies; only message in thread
From: Eric Sandeen @ 2007-01-23 17:23 UTC (permalink / raw)
  To: Linux Kernel Mailing List; +Cc: ext4 development

(resend now that LCA is done)

An update from the earlier thread, 
[PATCH] [RFC] remove ext3 inode from orphan list when link and unlink race

I think this is better than the original idea of trying to handle the race;
I've seen that the orphan inode list can get corrupted, but there may well
be other implications of the race which haven't yet been exposed.  I think
it's safer to simply return -ENOENT in this race window, and avoid other
potential problems.  Anything wrong with this?

Thanks for the comments suggesting this approach in the prior thread.

Thanks,

-Eric

---

Return -ENOENT from ext[34]_link if we've raced with unlink and
i_nlink is 0.  Doing otherwise has the potential to corrupt the
orphan inode list, because we'd wind up with an inode with a
non-zero link count on the list, and it will never get properly
cleaned up & removed from the orphan list before it is freed.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>

Index: linux-2.6.19/fs/ext3/namei.c
===================================================================
--- linux-2.6.19.orig/fs/ext3/namei.c
+++ linux-2.6.19/fs/ext3/namei.c
@@ -2191,6 +2191,8 @@ static int ext3_link (struct dentry * ol
 
 	if (inode->i_nlink >= EXT3_LINK_MAX)
 		return -EMLINK;
+	if (inode->i_nlink == 0)
+		return -ENOENT;
 
 retry:
 	handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) +
Index: linux-2.6.19/fs/ext4/namei.c
===================================================================
--- linux-2.6.19.orig/fs/ext4/namei.c
+++ linux-2.6.19/fs/ext4/namei.c
@@ -2189,6 +2189,8 @@ static int ext4_link (struct dentry * ol
 
 	if (inode->i_nlink >= EXT4_LINK_MAX)
 		return -EMLINK;
+	if (inode->i_nlink == 0)
+		return -ENOENT;
 
 retry:
 	handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-01-23 17:23 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-01-23 17:23 [PATCH] [RESEND] return ENOENT from ext3_link when racing with unlink Eric Sandeen

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.