android_kernel_xiaomi_sm8350/fs/ntfs
Anton Altaparmakov bfab36e816 NTFS: Fix a mount time deadlock.
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.

Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-10-12 09:16:30 -07:00
..
aops.c NTFS: Fix a mount time deadlock. 2007-10-12 09:16:30 -07:00
aops.h
attrib.c NTFS: Fix a mount time deadlock. 2007-10-12 09:16:30 -07:00
attrib.h
bitmap.c
bitmap.h
ChangeLog NTFS: Fix a mount time deadlock. 2007-10-12 09:16:30 -07:00
collate.c
collate.h
compress.c
debug.c
debug.h
dir.c
dir.h
endian.h
file.c NTFS: Fix a mount time deadlock. 2007-10-12 09:16:30 -07:00
index.c
index.h
inode.c NTFS: Fix a mount time deadlock. 2007-10-12 09:16:30 -07:00
inode.h
layout.h
lcnalloc.c
lcnalloc.h
logfile.c NTFS: Fix a mount time deadlock. 2007-10-12 09:16:30 -07:00
logfile.h
Makefile NTFS: Fix a mount time deadlock. 2007-10-12 09:16:30 -07:00
malloc.h
mft.c
mft.h
mst.c
namei.c
ntfs.h
quota.c
quota.h
runlist.c NTFS: Fix a mount time deadlock. 2007-10-12 09:16:30 -07:00
runlist.h
super.c
sysctl.c
sysctl.h
time.h
types.h
unistr.c
upcase.c
usnjrnl.c
usnjrnl.h
volume.h