OpenCloudOS-Kernel/fs/xfs/linux-2.6
Christoph Hellwig 5fe878ae7f direct-io: cleanup blockdev_direct_IO locking
Currently the locking in blockdev_direct_IO is a mess, we have three
different locking types and very confusing checks for some of them.  The
most complicated one is DIO_OWN_LOCKING for reads, which happens to not
actually be used.

This patch gets rid of the DIO_OWN_LOCKING - as mentioned above the read
case is unused anyway, and the write side is almost identical to
DIO_NO_LOCKING.  The difference is that DIO_NO_LOCKING always sets the
create argument for the get_blocks callback to zero, but we can easily
move that to the actual get_blocks callbacks.  There are four users of the
DIO_NO_LOCKING mode: gfs already ignores the create argument and thus is
fine with the new version, ocfs2 only errors out if create were ever set,
and we can remove this dead code now, the block device code only ever uses
create for an error message if we are fully beyond the device which can
never happen, and last but not least XFS will need the new behavour for
writes.

Now we can replace the lock_type variable with a flags one, where no flag
means the DIO_NO_LOCKING behaviour and DIO_LOCKING is kept as the first
flag.  Separate out the check for not allowing to fill holes into a
separate flag, although for now both flags always get set at the same
time.

Also revamp the documentation of the locking scheme to actually make
sense.

[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: Christoph Hellwig <hch@lst.de>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Badari Pulavarty <pbadari@us.ibm.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Cc: Jens Axboe <jens.axboe@oracle.com>
Cc: Zach Brown <zach.brown@oracle.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Alex Elder <aelder@sgi.com>
Cc: Mark Fasheh <mfasheh@suse.com>
Cc: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-12-16 07:20:13 -08:00
..
kmem.c Fix congestion_wait() sync/async vs read/write confusion 2009-07-10 20:31:53 +02:00
kmem.h xfs: prevent deadlock in xfs_qm_shake() 2009-06-01 22:59:45 -05:00
mrlock.h [XFS] shrink mrlock_t 2008-04-29 15:54:02 +10:00
sv.h remove dead code from sv_t implementation 2008-12-04 15:39:21 +11:00
time.h [XFS] Update license/copyright notices to match the prefered SGI 2005-11-02 14:58:39 +11:00
xfs_acl.c xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_aops.c direct-io: cleanup blockdev_direct_IO locking 2009-12-16 07:20:13 -08:00
xfs_aops.h xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_buf.c xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_buf.h xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_cred.h [XFS] Fix merge failures 2008-12-29 16:47:18 +11:00
xfs_dmapi_priv.h [XFS] Remove KERNEL_VERSION macros from xfs_dmapi.h 2006-11-11 18:05:06 +11:00
xfs_export.c [XFS] pass XFS_IGET_BULKSTAT to xfs_iget for handle operations 2009-01-09 15:17:17 +11:00
xfs_export.h xfs: new export ops 2007-10-22 08:13:20 -07:00
xfs_file.c xfs: remove IO_ISAIO 2009-12-11 15:11:21 -06:00
xfs_fs_subr.c xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_fs_subr.h [XFS] decontaminate vnode operations from behavior details 2007-10-15 16:54:29 +10:00
xfs_globals.c [XFS] remove restricted chown parameter from xfs linux 2008-10-30 18:30:48 +11:00
xfs_globals.h CRED: Separate task security context from task_struct 2008-11-14 10:39:16 +11:00
xfs_ioctl.c xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_ioctl.h xfs: fix dentry aliasing issues in open_by_handle 2009-01-19 14:43:18 +11:00
xfs_ioctl32.c xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_ioctl32.h [XFS] fix compile on 32 bit systems 2008-12-04 13:07:29 +11:00
xfs_iops.c xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_iops.h [XFS] add a FMODE flag to make XFS invisible I/O less hacky 2008-12-11 13:14:41 +11:00
xfs_linux.h xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_lrw.c xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_lrw.h xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_quotaops.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/fs/xfs/xfs 2009-10-31 12:12:49 -07:00
xfs_stats.c xfs: switch to seq_file 2009-09-15 12:29:24 -05:00
xfs_stats.h [XFS] add new btree statistics 2008-10-30 16:55:03 +11:00
xfs_super.c xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_super.h xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_sync.c xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_sync.h xfs: simplify inode teardown 2009-12-11 15:11:19 -06:00
xfs_sysctl.c sysctl: Drop & in front of every proc_handler. 2009-11-18 08:37:40 -08:00
xfs_sysctl.h [XFS] remove restricted chown parameter from xfs linux 2008-10-30 18:30:48 +11:00
xfs_trace.c xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_trace.h xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_version.h [XFS] Update license/copyright notices to match the prefered SGI 2005-11-02 14:58:39 +11:00
xfs_vnode.h xfs: event tracing support 2009-12-14 23:08:16 -06:00
xfs_xattr.c xfs: use generic Posix ACL code 2009-06-10 17:07:47 +02:00