linux/fs/gfs2
Benjamin Marzinski 8b564a8e73 GFS2: Test bufdata with buffer locked and gfs2_log_lock held
commit 96e5d1d3ad upstream.

In gfs2_trans_add_bh(), gfs2 was testing if a there was a bd attached to the
buffer without having the gfs2_log_lock held. It was then assuming it would
stay attached for the rest of the function. However, without either the log
lock being held of the buffer locked, __gfs2_ail_flush() could detach bd at any
time.  This patch moves the locking before the test.  If there isn't a bd
already attached, gfs2 can safely allocate one and attach it before locking.
There is no way that the newly allocated bd could be on the ail list,
and thus no way for __gfs2_ail_flush() to detach it.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
[bwh: Backported to 3.2: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-17 08:51:06 -08:00
..
acl.c GFS2: We only need one ACL getting function 2011-11-23 13:31:51 +00:00
acl.h fs: take the ACL checks to common code 2011-07-25 14:30:23 -04:00
aops.c GFS2: Allow caching of rindex glock 2012-04-10 13:49:53 +01:00
bmap.c GFS2: Make sure rindex is uptodate before starting transactions 2012-04-05 10:20:10 +01:00
bmap.h GFS2: New truncate sequence 2010-09-20 11:18:16 +01:00
dentry.c gfs2: fix d_revalidate oopsen on NFS exports 2011-03-10 03:44:48 -05:00
dir.c GFS2: Make sure rindex is uptodate before starting transactions 2012-04-05 10:20:10 +01:00
dir.h GFS2: Add readahead to sequential directory traversal 2011-11-08 09:52:12 +00:00
export.c tmpfs,ceph,gfs2,isofs,reiserfs,xfs: fix fh_len checking 2012-10-21 09:27:57 -07:00
file.c get rid of pointless includes of ext2_fs.h 2012-03-31 16:03:15 -04:00
gfs2.h [GFS2] Remove remote lock dropping code 2008-06-27 09:39:44 +01:00
glock.c GFS2: glock statistics gathering 2012-02-28 17:09:42 +00:00
glock.h GFS2: dlm based recovery coordination 2012-01-11 09:23:05 +00:00
glops.c filesystems: add set_nlink() 2011-11-02 12:53:43 +01:00
glops.h GFS2: Fix AIL flush issue during fsync 2011-10-21 12:39:41 +01:00
incore.h GFS2: Eliminate sd_rindex_mutex 2012-03-05 15:06:56 +00:00
inode.c GFS2: Make sure rindex is uptodate before starting transactions 2012-04-05 10:20:10 +01:00
inode.h GFS2: Use ->dirty_inode() 2011-10-21 12:39:26 +01:00
Kconfig GFS2: use depends instead of select in kconfig 2012-03-26 09:18:02 +01:00
lock_dlm.c GFS2: Instruct DLM to avoid queue convert slowdown 2012-04-24 13:26:50 +01:00
log.c GFS2: Clean up log flush header writing 2012-03-09 14:07:06 +00:00
log.h GFS2: Move two functions from log.c to lops.c 2012-02-28 17:09:59 +00:00
lops.c GFS2: Test bufdata with buffer locked and gfs2_log_lock held 2013-01-17 08:51:06 -08:00
lops.h [GFS2] Only do lo_incore_commit once 2008-03-31 10:39:54 +01:00
main.c GFS2: Remove a __GFP_NOFAIL allocation 2012-03-08 12:10:23 +00:00
Makefile GFS2: Rename ops_inode.c to inode.c 2011-05-10 13:12:49 +01:00
meta_io.c GFS2: Fix up REQ flags 2011-11-08 09:51:53 +00:00
meta_io.h GFS2: Remove unused macro 2011-04-20 09:00:24 +01:00
ops_fstype.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-nmw 2012-03-21 18:00:03 -07:00
quota.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-nmw 2012-03-21 18:00:03 -07:00
quota.h vmscan: change shrinker API by passing shrink_control struct 2011-05-25 08:39:26 -07:00
recovery.c GFS2: fail mount if journal recovery fails 2012-01-11 09:24:48 +00:00
recovery.h gfs2: use workqueue instead of slow-work 2010-07-23 13:14:25 +02:00
rgrp.c GFS2: Make sure rindex is uptodate before starting transactions 2012-04-05 10:20:10 +01:00
rgrp.h GFS2: FITRIM ioctl support 2012-02-28 17:10:21 +00:00
super.c GFS2: Flush pending glock work when evicting an inode 2012-03-07 10:43:02 +00:00
super.h gfs: constify xattr_handler 2010-05-21 18:31:20 -04:00
sys.c GFS2: dlm based recovery coordination 2012-01-11 09:23:05 +00:00
sys.h GFS2: dlm based recovery coordination 2012-01-11 09:23:05 +00:00
trace_gfs2.h GFS2: glock statistics gathering 2012-02-28 17:09:42 +00:00
trans.c GFS2: Test bufdata with buffer locked and gfs2_log_lock held 2013-01-17 08:51:06 -08:00
trans.h GFS2: decouple quota allocations from block allocations 2011-11-22 10:25:21 +00:00
util.c GFS2: Remove a __GFP_NOFAIL allocation 2012-03-08 12:10:23 +00:00
util.h GFS2: Remove a __GFP_NOFAIL allocation 2012-03-08 12:10:23 +00:00
xattr.c GFS2: Make sure rindex is uptodate before starting transactions 2012-04-05 10:20:10 +01:00
xattr.h sanitize xattr handler prototypes 2009-12-16 12:16:49 -05:00