[PATCH] NTFS: Fix a mount time deadlock.

Previous thread: [PATCH 00/31] Remove iget() and read_inode() [try #4] by David Howells on Friday, October 12, 2007 - 5:07 am. (34 messages)

Next thread: NMI watchdog by John Sigler on Friday, October 12, 2007 - 5:18 am. (9 messages)
To: Linus Torvalds <torvalds@...>
Cc: <linux-kernel@...>, <linux-ntfs-dev@...>
Date: Friday, October 12, 2007 - 4:37 am

Hi Linus,

Please apply the below patch.

This NTFS update fixes the deadlock at mount time reported by
several people over the years but it was only recently that someone who
reported it actually replied to my response and helped me track it down (I
have never been able to reproduce the deadlock).

So big thanks go to Mathias Kolehmainen for reporting the bug, providing
debug output and testing the patches I sent him to get it working.

The fix was to stop calling ntfs_attr_set() at mount time as that causes
balance_dirty_pages_ratelimited() to be called which on systems with
little memory actually tries to go and balance the dirty pages which tries
to take the s_umount semaphore but because we are still in fill_super()
across which the VFS holds s_umount for writing this results in a
deadlock.

We now do the dirty work by hand by submitting individual buffers. This
has the annoying "feature" that mounting can take a few seconds if the
journal is large as we have clear it all. One day someone should improve
on this by deferring the journal clearing to a helper kernel thread so it
can be done in the background but I don't have time for this at the moment
and the current solution works fine so I am leaving it like this for now.

The patch also fixes a bunch of sparse warnings I noticed had appeared...

Please apply. Thanks!

Diffstat:

Documentation/filesystems/ntfs.txt | 4 -
fs/ntfs/ChangeLog | 12 +++
fs/ntfs/Makefile | 2
fs/ntfs/aops.c | 22 ++---
fs/ntfs/attrib.c | 8 +-
fs/ntfs/file.c | 36 ++++-----
fs/ntfs/inode.c | 3
fs/ntfs/logfile.c | 143
+++++++++++++++++++++++++++++++++----
fs/ntfs/runlist.c | 4 -
9 files changed, 181 insertions(+), 53 deletions(-)

The patch is below.

Best regards,

Anton
--
Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @)
U...

Previous thread: [PATCH 00/31] Remove iget() and read_inode() [try #4] by David Howells on Friday, October 12, 2007 - 5:07 am. (34 messages)

Next thread: NMI watchdog by John Sigler on Friday, October 12, 2007 - 5:18 am. (9 messages)