OpenCloudOS-Kernel/fs/ocfs2
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
..
cluster inet: rename some inet_sock fields 2009-10-18 18:52:53 -07:00
dlm tree-wide: fix assorted typos all over the place 2009-12-04 15:39:55 +01:00
Kconfig fs/Kconfig: move ocfs2 out 2009-01-22 13:15:54 +03:00
Makefile ocfs2: Add ocfs2_read_refcount_block. 2009-09-22 20:09:26 -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 tree-wide: fix assorted typos all over the place 2009-12-04 15:39:55 +01:00
alloc.h ocfs2: Add CoW support. 2009-09-22 20:09:36 -07:00
aops.c direct-io: cleanup blockdev_direct_IO locking 2009-12-16 07:20:13 -08:00
aops.h ocfs2: Add CoW support. 2009-09-22 20:09:36 -07:00
blockcheck.c tree-wide: fix typos "offest" -> "offset" 2009-12-04 15:39:50 +01:00
blockcheck.h ocfs2: Add statistics for the checksum and ecc operations. 2009-06-03 19:15:36 -07:00
buffer_head_io.c ocfs2: Take the inode out of the metadata read/write paths. 2009-09-04 16:07:48 -07:00
buffer_head_io.h ocfs2: Take the inode out of the metadata read/write paths. 2009-09-04 16:07:48 -07:00
dcache.c ocfs2: invalidate dentry if its dentry_lock isn't initialized. 2009-08-27 18:10:54 -07:00
dcache.h ocfs2: Fix deadlock on umount 2009-07-21 15:47:55 -07:00
dir.c ocfs2: Pass ocfs2_caching_info into ocfs_init_*_extent_tree(). 2009-09-04 16:08:13 -07:00
dir.h ocfs2: Introduce dir free space list 2009-04-03 11:39:16 -07:00
dlmglue.c tree-wide: fix assorted typos all over the place 2009-12-04 15:39:55 +01:00
dlmglue.h ocfs2: Add new refcount tree lock resource in dlmglue. 2009-09-22 20:09:28 -07:00
export.c ocfs2: Fix some printk() warnings. 2009-04-21 16:31:20 -07:00
export.h exportfs: make struct export_operations const 2007-10-22 08:13:21 -07:00
extent_map.c ocfs2: Return extent flags for xattr value tree. 2009-09-22 20:09:39 -07:00
extent_map.h ocfs2: Return extent flags for xattr value tree. 2009-09-22 20:09:39 -07:00
file.c vfs: Implement proper O_SYNC semantics 2009-12-10 15:02:50 +01:00
file.h ocfs2: Integrate CoW in file write. 2009-09-22 20:09:37 -07:00
heartbeat.c ocfs2: Move o2hb functionality into the stack glue. 2008-04-18 08:56:04 -07:00
heartbeat.h ocfs2: Move o2hb functionality into the stack glue. 2008-04-18 08:56:04 -07:00
inode.c ocfs2: Call refcount tree remove process properly. 2009-09-22 20:09:44 -07:00
inode.h ocfs2: Drop struct inode from ocfs2_extent_tree_operations. 2009-09-04 16:07:57 -07:00
ioctl.c Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2 2009-09-23 09:29:20 -07:00
ioctl.h ocfs2: Convert ocfs2 over to unlocked_ioctl 2008-04-18 08:56:11 -07:00
journal.c tree-wide: fix assorted typos all over the place 2009-12-04 15:39:55 +01:00
journal.h ocfs2: Decrement refcount when truncating refcounted extents. 2009-09-22 20:09:35 -07:00
localalloc.c ocfs2: Pass struct ocfs2_caching_info to the journal functions. 2009-09-04 16:07:50 -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
mmap.c const: mark struct vm_struct_operations 2009-09-27 11:39:25 -07:00
mmap.h
namei.c ocfs2: Create reflinked file in orphan dir. 2009-09-22 20:09:48 -07:00
namei.h ocfs2: Create reflinked file in orphan dir. 2009-09-22 20:09:48 -07:00
ocfs1_fs_compat.h fs/: Spelling fixes 2008-02-03 17:33:42 +02:00
ocfs2.h ocfs2: Trivial cleanup of jbd compatibility layer removal 2009-11-13 15:45:05 -08:00
ocfs2_fs.h ocfs2: Add ioctl for reflink. 2009-09-22 20:09:51 -07:00
ocfs2_lockid.h ocfs2: Add new refcount tree lock resource in dlmglue. 2009-09-22 20:09:28 -07:00
ocfs2_lockingver.h ocfs2: Negotiate locking protocol versions. 2008-02-06 16:11:29 -08:00
quota.h quota: Move definition of QFMT_OCFS2 to linux/quota.h 2009-12-10 15:02:53 +01:00
quota_global.c Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2 2009-09-23 09:29:20 -07:00
quota_local.c const: struct quota_format_ops 2009-12-10 15:02:51 +01:00
refcounttree.c Merge branch 'for-next' into for-linus 2009-12-07 18:36:35 +01:00
refcounttree.h ocfs2: Add ioctl for reflink. 2009-09-22 20:09:51 -07:00
resize.c ocfs2: Pass struct ocfs2_caching_info to the journal functions. 2009-09-04 16:07:50 -07:00
resize.h [PATCH 2/2] ocfs2: Implement group add for online resize 2008-01-25 15:04:24 -08:00
slot_map.c ocfs2: Take the inode out of the metadata read/write paths. 2009-09-04 16:07:48 -07:00
slot_map.h ocfs2: De-magic the in-memory slot map. 2008-04-18 08:56:03 -07:00
stack_o2cb.c ocfs2: keep index within status_map[] 2009-08-07 13:16:50 -07:00
stack_user.c ocfs2: Provide the ocfs2_dlm_lvb_valid() stack API. 2009-06-22 14:24:30 -07:00
stackglue.c sysctl: Drop & in front of every proc_handler. 2009-11-18 08:37:40 -08:00
stackglue.h ocfs2: Provide the ocfs2_dlm_lvb_valid() stack API. 2009-06-22 14:24:30 -07:00
suballoc.c ocfs2: Pass ocfs2_caching_info to ocfs2_read_extent_block(). 2009-09-04 16:07:52 -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: return f_fsid info in ocfs2_statfs() 2009-10-29 15:02:20 -07:00
super.h ocfs2: use s_maxbytes directly in ocfs2_change_file_space() 2007-08-09 17:25:07 -07:00
symlink.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00
symlink.h [PATCH] mark struct inode_operations const 2 2007-02-12 09:48:46 -08:00
sysfile.c ocfs2/trivial: Wrap ocfs2_sysfile_cluster_lock_key within define. 2009-06-22 14:34:29 -07:00
sysfile.h
uptodate.c ocfs2: Trivial cleanup of jbd compatibility layer removal 2009-11-13 15:45:05 -08:00
uptodate.h ocfs2: Pass struct ocfs2_caching_info to the journal functions. 2009-09-04 16:07:50 -07:00
ver.c ocfs2: bump version number 2008-01-25 15:05:46 -08:00
ver.h
xattr.c ocfs2: Add preserve to reflink. 2009-09-22 20:09:49 -07:00
xattr.h ocfs2: Add preserve to reflink. 2009-09-22 20:09:49 -07:00