Thread (12 messages) flat view 12 messages, 6 authors, 2012-06-20

Re: [PATCH] vfs: avoid hang caused by attempting to rmdir an invalid file system

From: Jan Kara <jack@suse.cz>
Date: 2012-06-20 09:57:03
Also in: linux-fsdevel

On Mon 18-06-12 17:19:30, J. Bruce Fields wrote:
On Wed, May 30, 2012 at 10:12:57PM +0200, Jan Kara wrote:
quoted
On Wed 30-05-12 13:37:09, J. Bruce Fields wrote:
quoted
On Tue, May 29, 2012 at 10:08:56PM +0200, Jan Kara wrote:
quoted
On Tue 29-05-12 21:50:19, Jan Kara wrote:
quoted
On Mon 28-05-12 17:05:11, Ted Tso wrote:
quoted
On Mon, May 28, 2012 at 02:29:05PM -0600, Andreas Dilger wrote:
quoted
This patch is good from the POV of covering all filesystems, and
avoiding the deadlock at the dcache level.  It would be possible to
detect this problem in the filesystem itself during lookup, before
the bad link got into the dcache itself.  Something like:
I like that as a solution for detecting the problem in ext4.  As you
say, it's still an issue for other file systems, and so the patch I
proposed is still probably a good idea for the VFS.  But this way ext4
(and ext3 when Jan backports it) will be able to detect the problem
and mark the file system as being corrupted.
  Actually, I think there's even better way. d_splice_alias() can rather
easily detect the problem and report it to filesystem. The advantage is
that the check in d_splice_alias() can catch any "hardlinks" to
directories, not just self loops. The patch is attached, I also have
corresponding handling written for ext? filesystems but that's trivial.
I'll post the whole series to Al to have a look.
  And now with the attachment. Sorry.
Well, my understanding of d_splice_alias is that it should just return
the existing dentry instead of failing.  (It does that now for
DISCONNECTED dentries, but I don't understand why they're special.)
So that's what:

http://git.kernel.org/?p=linux/kernel/git/viro/vfs.git;a=commit;h=9d345b3217b384813680901d42eae3fb380b9f77

does.
  Thanks for the pointer. In the case I tried to solve, returning the
existing dentry will solve the deadlocks, just user won't be warned that
the filesystem is corrupted. Since you seem to describe a valid case where
we can spot other !DISCONNECTED dentry of a directory, I guess we have no
other choice than using your approach.
But my patch got reverted, on suspicion that it was either wrong or
covering up some other problem:

	http://marc.info/?l=linux-fsdevel&m=133917767003505&w=2

... which an approach like yours might help at least find?  So maybe
it's worth another try.
  Yeah, I'll rebase and resubmit those patches (plus fixup error handling
as Al suggested) today or tomorrow.

								Honza
-- 
Jan Kara [off-list ref]
SUSE Labs, CR
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help