linux/fs/gfs2
Benjamin Marzinski 172e045a7f [GFS2] flush the log if a transaction can't allocate space
This is a fix for bz #208514. When GFS2 frees up space, the freed blocks
aren't available for reuse until the resource group is successfully written
to the ondisk journal. So in rare cases, GFS2 operations will fail, saying
that the filesystem is out of space, when in reality, you are just waiting for
a log flush. For instance, on a 1Gig filesystem, if I continually write 10 Mb
to a file, and then truncate it, after a hundred interations, the write will
fail with -ENOSPC, even though the filesystem is just 1% full.

The attached patch calls a log flush in these cases.  I tested this patch
fairly heavily to check if there were any locking issues that I missed, and
it seems to work just fine. Also, this patch only does the log flush if
get_local_rgrp makes a complete loop of resource groups without skipping
any do to locking issues. The code would be slightly simpler if it just always
did the log flush after the first failed pass, and you could only ever have
to go through the loop twice, instead of up to three times. However, I guessed
that failing to find a rg simply do to locking issues would be common enough
to skip the log flush in that case, but I'm not certain that this is the right
way to go. Either way, I don't suppose this code will be hit all that often.

Signed-off-by: Benjamin E. Marzinski <bmarzins@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
2007-05-01 09:10:52 +01:00
..
locking [GFS2] Speed up lock_dlm's locking (move sprintf) 2007-05-01 09:10:47 +01:00
Kconfig [DLM/GFS2] indent help text 2007-02-05 13:38:20 -05:00
Makefile
acl.c [GFS2] Remove gfs2_check_acl() 2006-11-30 10:37:32 -05:00
acl.h [GFS2] Remove gfs2_check_acl() 2006-11-30 10:37:32 -05:00
bmap.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
bmap.h
daemon.c [GFS2] Fix journal flush problem 2006-11-30 10:36:42 -05:00
daemon.h
dir.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
dir.h [GFS2] Clean up/speed up readdir 2007-02-05 13:37:04 -05:00
eaops.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
eaops.h
eattr.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
eattr.h [GFS2] gfs2 misc endianness annotations 2006-11-30 10:33:46 -05:00
gfs2.h
glock.c [GFS2] Fix a bug on i386 due to evaluation order 2007-05-01 09:10:42 +01:00
glock.h [GFS2] Fix bz 224480 and cleanup glock demotion code 2007-05-01 09:10:39 +01:00
glops.c [GFS2] Fix bz 229873, alternate test: assertion "!ip->i_inode.i_mapping->nrpages" failed 2007-03-07 14:03:53 -05:00
glops.h
incore.h [GFS2] Fix bz 224480 and cleanup glock demotion code 2007-05-01 09:10:39 +01:00
inode.c [GFS2] Fix bz 229831, lookup returns wrong inode 2007-03-07 14:01:53 -05:00
inode.h [GFS2] make gfs2_change_nlink_i() static 2007-02-05 13:36:49 -05:00
lm.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
lm.h
locking.c
log.c [GFS2] fs/gfs2/log.c:log_bmap() fix printk format warning 2006-11-30 10:37:04 -05:00
log.h [GFS2] Move gfs2_meta_syncfs() into log.c 2006-11-30 10:36:45 -05:00
lops.c [GFS2] Fix log entry list corruption 2007-05-01 09:10:50 +01:00
lops.h [GFS2] split and annotate gfs2_log_head 2006-11-30 10:33:14 -05:00
main.c [GFS2] Fix bz 224480 and cleanup glock demotion code 2007-05-01 09:10:39 +01:00
meta_io.c [PATCH] Transform kmem_cache_alloc()+memset(0) -> kmem_cache_zalloc(). 2007-02-11 10:51:27 -08:00
meta_io.h [GFS2] Move gfs2_meta_syncfs() into log.c 2006-11-30 10:36:45 -05:00
mount.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
mount.h
ondisk.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ops_address.c [GFS2] Fix bz 231380, unlock page before dequeing glocks in gfs2_commit_write 2007-05-01 09:10:37 +01:00
ops_address.h
ops_dentry.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ops_dentry.h
ops_export.c [GFS2] NFS filehandle check 2007-03-07 13:57:34 -05:00
ops_export.h [GFS2] split and annotate gfs2_inum 2006-11-30 10:33:32 -05:00
ops_file.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ops_file.h [GFS2] Only set inode flags when required 2006-11-30 10:34:45 -05:00
ops_fstype.c [GFS2] Add gfs2_tool lockdump support to gfs2 (bz 228540) 2007-05-01 09:10:29 +01:00
ops_fstype.h
ops_inode.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ops_inode.h [PATCH] mark struct inode_operations const 2 2007-02-12 09:48:46 -08:00
ops_super.c [GFS2] Fix bz 224480 and cleanup glock demotion code 2007-05-01 09:10:39 +01:00
ops_super.h [PATCH] Mark struct super_operations const 2007-02-12 09:48:47 -08:00
ops_vm.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ops_vm.h
quota.c [GFS2] fix locking mistake 2007-03-07 13:56:41 -05:00
quota.h
recovery.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
recovery.h [GFS2] split and annotate gfs2_log_head 2006-11-30 10:33:14 -05:00
rgrp.c [GFS2] flush the log if a transaction can't allocate space 2007-05-01 09:10:52 +01:00
rgrp.h
super.c [GFS2] Remove unused variable 2007-03-07 14:02:30 -05:00
super.h [GFS2] split and annotate gfs2_statfs_change 2006-11-30 10:33:38 -05:00
sys.c [GFS2] Remove the "greedy" function from glock.[ch] 2007-02-05 13:37:14 -05:00
sys.h
trans.c
trans.h
util.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
util.h Merge master.kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw 2006-12-07 09:13:20 -08:00