NameLast commit messageLast commit date
..
devfsLinux-2.6.12-rc221 years ago
00-INDEXLinux-2.6.12-rc221 years ago
adfs.txtLinux-2.6.12-rc221 years ago
affs.txtLinux-2.6.12-rc221 years ago
afs.txtLinux-2.6.12-rc221 years ago
automount-support.txtLinux-2.6.12-rc221 years ago
befs.txtLinux-2.6.12-rc221 years ago
bfs.txtLinux-2.6.12-rc221 years ago
cifs.txtLinux-2.6.12-rc221 years ago
coda.txtLinux-2.6.12-rc221 years ago
cramfs.txtLinux-2.6.12-rc221 years ago
directory-lockingLinux-2.6.12-rc221 years ago
ExportingLinux-2.6.12-rc221 years ago
ext2.txt[PATCH] xip: description21 years ago
ext3.txtLinux-2.6.12-rc221 years ago
hfs.txtLinux-2.6.12-rc221 years ago
hpfs.txtLinux-2.6.12-rc221 years ago
inotify.txt[PATCH] inotify: documentation update21 years ago
isofs.txt[PATCH] isofs: show hidden files, add granularity for assoc/hidden files flags21 years ago
jfs.txtLinux-2.6.12-rc221 years ago
Locking[PATCH] doc: Locking update21 years ago
ncpfs.txtLinux-2.6.12-rc221 years ago
ntfs.txtNTFS: Fix a nasty deadlock that appeared in recent kernels. The situation: VFS inode X on a mounted ntfs volume is dirty. For same inode X, the ntfs_inode is dirty and thus corresponding on-disk inode, i.e. mft record, which is in a dirty PAGE_CACHE_PAGE belonging to the table of inodes, i.e. $MFT, inode 0. What happens: Process 1: sys_sync()/umount()/whatever... calls __sync_single_inode() for $MFT -> do_writepages() -> write_page for the dirty page containing the on-disk inode X, the page is now locked -> ntfs_write_mst_block() which clears PageUptodate() on the page to prevent anyone else getting hold of it whilst it does the write out. This is necessary as the on-disk inode needs "fixups" applied before the write to disk which are removed again after the write and PageUptodate is then set again. It then analyses the page looking for dirty on-disk inodes and when it finds one it calls ntfs_may_write_mft_record() to see if it is safe to write this on-disk inode. This then calls ilookup5() to check if the corresponding VFS inode is in icache(). This in turn calls ifind() which waits on the inode lock via wait_on_inode whilst holding the global inode_lock. Process 2: pdflush results in a call to __sync_single_inode for the same VFS inode X on the ntfs volume. This locks the inode (I_LOCK) then calls write-inode -> ntfs_write_inode -> map_mft_record() -> read_cache_page() for the page (in page cache of table of inodes $MFT, inode 0) containing the on-disk inode. This page has PageUptodate() clear because of Process 1 (see above) so read_cache_page() blocks when it tries to take the page lock for the page so it can call ntfs_read_page(). Thus Process 1 is holding the page lock on the page containing the on-disk inode X and it is waiting on the inode X to be unlocked in ifind() so it can write the page out and then unlock the page. And Process 2 is holding the inode lock on inode X and is waiting for the page to be unlocked so it can call ntfs_readpage() or discover that Process 1 set PageUptodate() again and use the page. Thus we have a deadlock due to ifind() waiting on the inode lock. The solution: The fix is to use the newly introduced ilookup5_nowait() which does not wait on the inode's lock and hence avoids the deadlock. This is safe as we do not care about the VFS inode and only use the fact that it is in the VFS inode cache and the fact that the vfs and ntfs inodes are one struct in memory to find the ntfs inode in memory if present. Also, the ntfs inode has its own locking so it does not matter if the vfs inode is locked.21 years ago
portingLinux-2.6.12-rc221 years ago
proc.txt[PATCH] Documentation: remove super-{nr, max} to reflect fs/super.c21 years ago
romfs.txtLinux-2.6.12-rc221 years ago
smbfs.txtLinux-2.6.12-rc221 years ago
sysfs-pci.txt[PATCH] Driver Core: remove driver model detach_state21 years ago
sysfs.txt[PATCH] Driver core: Documentation: update device attribute callbacks21 years ago
sysv-fs.txtLinux-2.6.12-rc221 years ago
tmpfs.txt[PATCH] shmem: restore superblock info21 years ago
udf.txtLinux-2.6.12-rc221 years ago
ufs.txtLinux-2.6.12-rc221 years ago
vfat.txtLinux-2.6.12-rc221 years ago
vfs.txtLinux-2.6.12-rc221 years ago
xfs.txtLinux-2.6.12-rc221 years ago
xip.txt[PATCH] xip: description21 years ago