kernel_optimize_test/fs/ocfs2
Jan Kara 65bac575e3 ocfs2: Fix possible deadlock with quotas in ocfs2_setattr()
We called vfs_dq_transfer() with global quota file lock held. This can lead
to deadlocks as if vfs_dq_transfer() has to allocate new quota structure,
it calls ocfs2_dquot_acquire() which tries to get quota file lock again and
this can block if another node requested the lock in the mean time.

Since we have to call vfs_dq_transfer() with transaction already started
and quota file lock ranks above the transaction start, we cannot just rely
on ocfs2_dquot_acquire() or ocfs2_dquot_release() on getting the lock
if they need it. We fix the problem by acquiring pointers to all quota
structures needed by vfs_dq_transfer() already before calling the function.
By this we are sure that all quota structures are properly allocated and
they can be freed only after we drop references to them. Thus we don't need
quota file lock anywhere inside vfs_dq_transfer().

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
2009-06-03 19:14:29 -07:00
..
cluster ocfs2: update comments in masklog.h 2009-05-05 14:48:11 -07:00
dlm ocfs2/dlm: Tweak mle_state output 2009-04-03 11:39:25 -07:00
acl.c New helper - current_umask() 2009-03-31 23:00:26 -04:00
acl.h ocfs2: add ocfs2_init_acl in mknod 2009-01-05 08:34:20 -08:00
alloc.c ocfs2: Add a name indexed b-tree to directory inodes 2009-04-03 11:39:15 -07:00
alloc.h ocfs2: Add a name indexed b-tree to directory inodes 2009-04-03 11:39:15 -07:00
aops.c ocfs2: Pagecache usage optimization on ocfs2 2009-04-03 11:39:26 -07:00
aops.h
blockcheck.c ocfs2: One more hamming code optimization. 2009-01-05 08:40:35 -08:00
blockcheck.h ocfs2: Add the underlying blockcheck code. 2009-01-05 08:40:31 -08:00
buffer_head_io.c ocfs2: Use BH_JBDPrivateStart instead of BH_Unshadow 2009-01-05 08:40:24 -08:00
buffer_head_io.h ocfs2: Validate metadata only when it's read from disk. 2009-01-05 08:36:53 -08:00
dcache.c ocfs2: Add missing iput() during error handling in ocfs2_dentry_attach_lock() 2009-04-23 14:56:13 -07:00
dcache.h constify dentry_operations: OCFS2 2009-03-27 14:44:02 -04:00
dir.c ocfs2: Fix 2 warning during ocfs2 make. 2009-04-21 16:23:39 -07:00
dir.h ocfs2: Introduce dir free space list 2009-04-03 11:39:16 -07:00
dlmglue.c ocfs2: fix rare stale inode errors when exporting via nfs 2009-04-03 11:39:25 -07:00
dlmglue.h ocfs2: fix rare stale inode errors when exporting via nfs 2009-04-03 11:39:25 -07:00
export.c ocfs2: Fix some printk() warnings. 2009-04-21 16:31:20 -07:00
export.h
extent_map.c ocfs2: Wrap virtual block reads in ocfs2_read_virt_blocks() 2009-01-05 08:36:54 -08:00
extent_map.h ocfs2: Wrap virtual block reads in ocfs2_read_virt_blocks() 2009-01-05 08:36:54 -08:00
file.c ocfs2: Fix possible deadlock with quotas in ocfs2_setattr() 2009-06-03 19:14:29 -07:00
file.h ocfs2: Implementation of local and global quota file handling 2009-01-05 08:40:23 -08:00
heartbeat.c
heartbeat.h
inode.c ocfs2: fix rare stale inode errors when exporting via nfs 2009-04-03 11:39:25 -07:00
inode.h ocfs2: fix rare stale inode errors when exporting via nfs 2009-04-03 11:39:25 -07:00
ioctl.c ocfs2: Don't check for NULL before brelse() 2008-10-13 17:02:44 -07:00
ioctl.h
journal.c ocfs2: recover orphans in offline slots during recovery and mount 2009-04-03 11:39:26 -07:00
journal.h ocfs2: Fix a missing credit when deleting from indexed directories. 2009-04-30 13:21:56 -07:00
Kconfig fs/Kconfig: move ocfs2 out 2009-01-22 13:15:54 +03:00
localalloc.c ocfs2: Remove debugfs file local_alloc_stats 2009-04-03 11:39:15 -07:00
localalloc.h ocfs2: throttle back local alloc when low on disk space 2008-10-13 13:57:57 -07:00
locks.c ocfs2: POSIX file locks support 2008-10-13 13:57:57 -07:00
locks.h ocfs2: POSIX file locks support 2008-10-13 13:57:57 -07:00
Makefile ocfs2: Add the underlying blockcheck code. 2009-01-05 08:40:31 -08:00
mmap.c mm: page_mkwrite change prototype to match fault 2009-04-01 08:59:14 -07:00
mmap.h
namei.c ocfs2/trivial: Remove unused variable in ocfs2_rename. 2009-04-29 10:57:18 -07:00
namei.h
ocfs1_fs_compat.h
ocfs2_fs.h ocfs2: Enable indexed directories 2009-04-03 11:39:16 -07:00
ocfs2_lockid.h ocfs2: fix rare stale inode errors when exporting via nfs 2009-04-03 11:39:25 -07:00
ocfs2_lockingver.h
ocfs2.h ocfs2: recover orphans in offline slots during recovery and mount 2009-04-03 11:39:26 -07:00
quota_global.c ocfs2: Fix possible deadlock in ocfs2_global_read_dquot() 2009-06-03 19:14:28 -07:00
quota_local.c ocfs2: Fix lock inversion in ocfs2_local_read_info() 2009-06-03 19:14:29 -07:00
quota.h ocfs2: Fix ocfs2_read_quota_block() error handling. 2009-01-05 08:40:24 -08:00
resize.c ocfs2: Use metadata-specific ocfs2_journal_access_*() functions. 2009-01-05 08:40:32 -08:00
resize.h
slot_map.c ocfs2: Validate metadata only when it's read from disk. 2009-01-05 08:36:53 -08:00
slot_map.h
stack_o2cb.c
stack_user.c ocfs2: initialize stack_user lvbptr 2008-12-01 14:46:39 -08:00
stackglue.c ocfs2: Remove pointless !! 2008-10-13 17:02:44 -07:00
stackglue.h ocfs2: POSIX file locks support 2008-10-13 13:57:57 -07:00
suballoc.c ocfs2: Fix some printk() warnings. 2009-04-21 16:31:20 -07:00
suballoc.h ocfs2: fix rare stale inode errors when exporting via nfs 2009-04-03 11:39:25 -07:00
super.c ocfs2: recover orphans in offline slots during recovery and mount 2009-04-03 11:39:26 -07:00
super.h
symlink.c ocfs2: Wrap inode block reads in a dedicated function. 2009-01-05 08:36:52 -08:00
symlink.h
sysfile.c
sysfile.h
uptodate.c ocfs2: use smaller counters in ocfs2_remove_xattr_clusters_from_cache 2008-10-13 17:02:44 -07:00
uptodate.h ocfs2: Add helper function in uptodate.c for removing xattr clusters 2008-10-13 13:57:59 -07:00
ver.c
ver.h
xattr.c ocfs2: Don't printk the error when listing too many xattrs. 2009-05-05 14:43:24 -07:00
xattr.h ocfs2: Add a name indexed b-tree to directory inodes 2009-04-03 11:39:15 -07:00