linux/fs/gfs2
Steven Whitehouse 813e0c46c9 GFS2: Fix "truncate in progress" hang
Following on from the recent clean up of gfs2_quotad, this patch moves
the processing of "truncate in progress" inodes from the glock workqueue
into gfs2_quotad. This fixes a hang due to the "truncate in progress"
processing requiring glocks in order to complete.

It might seem odd to use gfs2_quotad for this particular item, but
we have to use a pre-existing thread since creating a thread implies
a GFP_KERNEL memory allocation which is not allowed from the glock
workqueue context. Of the existing threads, gfs2_logd and gfs2_recoverd
may deadlock if used for this operation. gfs2_scand and gfs2_glockd are
both scheduled for removal at some (hopefully not too distant) future
point. That leaves only gfs2_quotad whose workload is generally fairly
light and is easily adapted for this extra task.

Also, as a result of this change, it opens the way for a future patch to
make the reading of the inode's information asynchronous with respect to
the glock workqueue, which is another improvement that has been on the list
for some time now.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
2009-01-05 07:39:06 +00:00
..
locking/dlm dlm: allow multiple lockspace creates 2008-08-28 11:49:15 -05:00
Kconfig [GFS2] No lock_nolock 2008-06-27 09:39:28 +01:00
Makefile [GFS2] No lock_nolock 2008-06-27 09:39:28 +01:00
acl.c GFS2: Move di_eattr into "proper" inode 2009-01-05 07:38:57 +00:00
acl.h [GFS2] Remove gfs2_check_acl() 2006-11-30 10:37:32 -05:00
bmap.c GFS2: Banish struct gfs2_dinode_host 2009-01-05 07:38:59 +00:00
bmap.h [GFS2] Remove function gfs2_get_block 2008-01-25 08:08:25 +00:00
daemon.c GFS2: Clean up & move gfs2_quotad 2009-01-05 07:39:05 +00:00
daemon.h [GFS2] Move gfs2_logd into log.c 2008-01-25 08:07:56 +00:00
dir.c GFS2: Banish struct gfs2_dinode_host 2009-01-05 07:38:59 +00:00
dir.h [GFS2] Clean up inode number handling 2007-07-09 08:22:24 +01:00
eaops.c [GFS2] Remove unrequired code 2008-01-25 08:08:13 +00:00
eaops.h [GFS2] mark struct *_operations const 2007-10-10 08:55:03 +01:00
eattr.c GFS2: Banish struct gfs2_dinode_host 2009-01-05 07:38:59 +00:00
eattr.h [GFS2] gfs2 misc endianness annotations 2006-11-30 10:33:46 -05:00
gfs2.h [GFS2] Remove remote lock dropping code 2008-06-27 09:39:44 +01:00
glock.c GFS2: Fix "truncate in progress" hang 2009-01-05 07:39:06 +00:00
glock.h GFS2: Fix "truncate in progress" hang 2009-01-05 07:39:06 +00:00
glops.c GFS2: Fix "truncate in progress" hang 2009-01-05 07:39:06 +00:00
glops.h [GFS2] Make headers compile on their own 2006-09-05 10:39:21 -04:00
incore.h GFS2: Fix "truncate in progress" hang 2009-01-05 07:39:06 +00:00
inode.c GFS2: Banish struct gfs2_dinode_host 2009-01-05 07:38:59 +00:00
inode.h GFS2: Banish struct gfs2_dinode_host 2009-01-05 07:38:59 +00:00
locking.c [GFS2] Fix ordering of args for list_add 2008-06-27 09:39:34 +01:00
log.c GFS2: Support for I/O barriers 2008-09-26 10:23:22 +01:00
log.h [GFS2] trivial sparse lock annotations 2008-06-27 09:39:31 +01:00
lops.c [GFS2] Plug an unlikely leak 2008-03-31 10:40:05 +01:00
lops.h [GFS2] Only do lo_incore_commit once 2008-03-31 10:39:54 +01:00
main.c GFS2: Fix "truncate in progress" hang 2009-01-05 07:39:06 +00:00
meta_io.c [GFS2] Clean up the glock core 2008-06-27 09:39:22 +01:00
meta_io.h [GFS2] Clean up the glock core 2008-06-27 09:39:22 +01:00
mount.c vfs: Use const for kernel parser table 2008-10-13 10:10:37 -07:00
mount.h [GFS2] Make headers compile on their own 2006-09-05 10:39:21 -04:00
ops_address.c GFS2: Move i_size from gfs2_dinode_host and rename it to i_disksize 2009-01-05 07:38:58 +00:00
ops_address.h [GFS2] Remove function gfs2_get_block 2008-01-25 08:08:25 +00:00
ops_dentry.c GFS2: Rationalise header files 2009-01-05 07:38:48 +00:00
ops_export.c GFS2: Banish struct gfs2_dinode_host 2009-01-05 07:38:59 +00:00
ops_file.c GFS2: Banish struct gfs2_dinode_host 2009-01-05 07:38:59 +00:00
ops_fstype.c GFS2: Fix "truncate in progress" hang 2009-01-05 07:39:06 +00:00
ops_inode.c GFS2: Banish struct gfs2_dinode_host 2009-01-05 07:38:59 +00:00
ops_super.c GFS2: Banish struct gfs2_dinode_host 2009-01-05 07:38:59 +00:00
quota.c GFS2: Fix "truncate in progress" hang 2009-01-05 07:39:06 +00:00
quota.h GFS2: Clean up & move gfs2_quotad 2009-01-05 07:39:05 +00:00
recovery.c [GFS2] No lock_nolock 2008-06-27 09:39:28 +01:00
recovery.h [GFS2] split and annotate gfs2_log_head 2006-11-30 10:33:14 -05:00
rgrp.c GFS2: Banish struct gfs2_rgrpd_host 2009-01-05 07:39:03 +00:00
rgrp.h [GFS2] Add extent allocation to block allocator 2008-03-31 10:40:47 +01:00
super.c GFS2: Banish struct gfs2_rgrpd_host 2009-01-05 07:39:03 +00:00
super.h GFS2: Rationalise header files 2009-01-05 07:38:48 +00:00
sys.c GFS2: Clean up & move gfs2_quotad 2009-01-05 07:39:05 +00:00
sys.h [GFS2] Make headers compile on their own 2006-09-05 10:39:21 -04:00
trans.c [GFS2] Update gfs2_trans_add_unrevoke to accept extents 2008-03-31 10:40:42 +01:00
trans.h [GFS2] Update gfs2_trans_add_unrevoke to accept extents 2008-03-31 10:40:42 +01:00
util.c GFS2: Clean up & move gfs2_quotad 2009-01-05 07:39:05 +00:00
util.h GFS2: Clean up & move gfs2_quotad 2009-01-05 07:39:05 +00:00