Chen, Kenneth W
e61c90188b
[PATCH] optimize o_direct on block devices
...
Implement block device specific .direct_IO method instead of going through
generic direct_io_worker for block device.
direct_io_worker() is fairly complex because it needs to handle O_DIRECT on
file system, where it needs to perform block allocation, hole detection,
extents file on write, and tons of other corner cases. The end result is
that it takes tons of CPU time to submit an I/O.
For block device, the block allocation is much simpler and a tight triple
loop can be written to iterate each iovec and each page within the iovec in
order to construct/prepare bio structure and then subsequently submit it to
the block layer. This significantly speeds up O_D on block device.
[akpm@osdl.org: small speedup]
Signed-off-by: Ken Chen <kenneth.w.chen@intel.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Zach Brown <zach.brown@oracle.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-12-13 09:05:50 -08:00
..
9p
[PATCH] 9p: change uses of f_{dentry,vfsmnt} to use f_path
2006-12-08 08:28:43 -08:00
adfs
[PATCH] struct path: convert adfs
2006-12-08 08:28:43 -08:00
affs
[PATCH] affs: change uses of f_{dentry, vfsmnt} to use f_path
2006-12-08 08:28:43 -08:00
afs
[PATCH] rename struct namespace to struct mnt_namespace
2006-12-08 08:28:51 -08:00
autofs
[PATCH] autofs: change uses of f_{dentry, vfsmnt} to use f_path
2006-12-08 08:28:43 -08:00
autofs4
[PATCH] autofs4: change uses of f_{dentry, vfsmnt} to use f_path
2006-12-08 08:28:43 -08:00
befs
[PATCH] struct path: convert befs
2006-12-08 08:28:44 -08:00
bfs
[PATCH] struct path: convert bfs
2006-12-08 08:28:44 -08:00
cifs
[PATCH] io-accounting-read-accounting cifs fix
2006-12-10 09:55:41 -08:00
coda
[PATCH] struct path: convert coda
2006-12-08 08:28:44 -08:00
configfs
[PATCH] configfs: change uses of f_{dentry, vfsmnt} to use f_path
2006-12-08 08:28:43 -08:00
cramfs
[PATCH] struct path: convert cramfs
2006-12-08 08:28:44 -08:00
debugfs
[PATCH] debugfs: add header file
2006-11-25 13:28:33 -08:00
devpts
[PATCH] inode-diet: Eliminate i_blksize from the inode structure
2006-09-27 08:26:18 -07:00
dlm
Merge master.kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw
2006-12-07 09:13:20 -08:00
ecryptfs
[PATCH] ecryptfs: change uses of f_{dentry, vfsmnt} to use f_path
2006-12-08 08:28:43 -08:00
efs
[PATCH] struct path: convert efs
2006-12-08 08:28:45 -08:00
exportfs
[PATCH] VFS: Make filldir_t and struct kstat deal in 64-bit inode numbers
2006-10-03 08:03:40 -07:00
ext2
[PATCH] LOG2: Implement a general integer log2 facility in the kernel
2006-12-08 08:28:51 -08:00
ext3
[PATCH] LOG2: Implement a general integer log2 facility in the kernel
2006-12-08 08:28:51 -08:00
ext4
[PATCH] ext4: change uses of f_{dentry, vfsmnt} to use f_path
2006-12-08 08:28:41 -08:00
fat
[PATCH] fat: change uses of f_{dentry,vfsmnt} to use f_path
2006-12-08 08:28:41 -08:00
freevxfs
[PATCH] struct path: convert freevxfs
2006-12-08 08:28:45 -08:00
fuse
[PATCH] struct path: convert fuse
2006-12-08 08:28:45 -08:00
gfs2
[PATCH] struct path: convert gfs2
2006-12-08 08:28:45 -08:00
hfs
[PATCH] struct path: convert hfs
2006-12-08 08:28:45 -08:00
hfsplus
[PATCH] struct path: convert hfsplus
2006-12-08 08:28:45 -08:00
hostfs
[PATCH] struct path: convert hostfs
2006-12-08 08:28:45 -08:00
hpfs
[PATCH] struct path: convert hpfs
2006-12-08 08:28:45 -08:00
hppfs
[PATCH] struct path: convert hppfs
2006-12-08 08:28:45 -08:00
hugetlbfs
[PATCH] struct path: convert hugetlbfs
2006-12-08 08:28:45 -08:00
isofs
[PATCH] isofs: change uses of f_{dentry, vfsmnt} to use f_path
2006-12-08 08:28:41 -08:00
jbd
[PATCH] user of the jiffies rounding code: JBD
2006-12-10 09:57:22 -08:00
jbd2
[PATCH] jbd2: wait for already submitted t_sync_datalist buffer to complete
2006-12-07 08:39:42 -08:00
jffs
[PATCH] struct path: convert jffs
2006-12-08 08:28:46 -08:00
jffs2
[PATCH] struct path: convert jffs2
2006-12-08 08:28:46 -08:00
jfs
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6
2006-12-12 07:45:48 -08:00
lockd
[PATCH] struct path: convert lockd
2006-12-08 08:28:47 -08:00
minix
[PATCH] struct path: convert minix
2006-12-08 08:28:47 -08:00
msdos
[PATCH] fat: add fat_getattr()
2006-11-16 11:43:38 -08:00
ncpfs
[PATCH] struct path: convert ncpfs
2006-12-08 08:28:48 -08:00
nfs
[PATCH] rename struct namespace to struct mnt_namespace
2006-12-08 08:28:51 -08:00
nfs_common
[PATCH] nfs_common endianness annotations
2006-10-20 10:26:41 -07:00
nfsd
[PATCH] nfsd: replace kmalloc+memset with kcalloc + simplify NULL check
2006-12-08 08:29:02 -08:00
nls
[PATCH] fs: make nls_cp936.c handle some U00XY characters and U20AC correctly
2006-12-07 08:39:46 -08:00
ntfs
[PATCH] ntfs: change uses of f_{dentry, vfsmnt} to use f_path
2006-12-08 08:28:42 -08:00
ocfs2
[PATCH] ocfs2: relative atime support
2006-12-13 09:05:50 -08:00
openpromfs
[PATCH] struct path: convert openpromfs
2006-12-08 08:28:48 -08:00
partitions
[MIPS] Rename SNI_RM200_PCI to just SNI_RM preparing for more RM machines
2006-12-09 01:03:58 +00:00
proc
Make SLES9 "get_kernel_version" work on the kernel binary again
2006-12-11 11:34:11 -08:00
qnx4
[PATCH] struct path: convert qnx4
2006-12-08 08:28:48 -08:00
ramfs
[PATCH] struct path: convert ramfs
2006-12-08 08:28:49 -08:00
reiserfs
[PATCH] rename struct namespace to struct mnt_namespace
2006-12-08 08:28:51 -08:00
romfs
[PATCH] struct path: convert romfs
2006-12-08 08:28:49 -08:00
smbfs
[PATCH] struct path: convert smbfs
2006-12-08 08:28:49 -08:00
sysfs
[PATCH] sysfs: change uses of f_{dentry, vfsmnt} to use f_path
2006-12-08 08:28:41 -08:00
sysv
[PATCH] struct path: convert sysv
2006-12-08 08:28:50 -08:00
udf
[PATCH] struct path: convert udf
2006-12-08 08:28:50 -08:00
ufs
[PATCH] struct path: convert ufs
2006-12-08 08:28:50 -08:00
vfat
[PATCH] fat: add fat_getattr()
2006-11-16 11:43:38 -08:00
xfs
[PATCH] dio: only call aio_complete() after returning -EIOCBQUEUED
2006-12-10 09:57:21 -08:00
aio.c
[PATCH] aio: remove ki_retried debugging member
2006-12-07 08:39:46 -08:00
attr.c
bad_inode.c
[PATCH] Remove readv/writev methods and use aio_read/aio_write instead
2006-10-01 00:39:28 -07:00
binfmt_aout.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
binfmt_elf.c
[PATCH] add process_session() helper routine
2006-12-08 08:28:51 -08:00
binfmt_elf_fdpic.c
fs: Convert kmalloc() + memset() to kzalloc() in fs/.
2006-12-12 20:07:35 +01:00
binfmt_em86.c
binfmt_flat.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
binfmt_misc.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
binfmt_script.c
binfmt_som.c
[PARISC] Fix fs/binfmt_som.c
2006-10-04 06:51:26 -06:00
bio.c
[PATCH] optimize o_direct on block devices
2006-12-13 09:05:50 -08:00
block_dev.c
[PATCH] optimize o_direct on block devices
2006-12-13 09:05:50 -08:00
buffer.c
[PATCH] io-accounting: write-cancel accounting
2006-12-10 09:55:41 -08:00
char_dev.c
[PATCH] BLOCK: Move extern declarations out of fs/*.c into header files [try #6 ]
2006-09-30 20:52:18 +02:00
compat.c
[PATCH] fdtable: Make fdarray and fdsets equal in size
2006-12-10 09:57:22 -08:00
compat_ioctl.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
dcache.c
[PATCH] dcache: avoid RCU for never-hashed dentries
2006-12-07 08:39:41 -08:00
dcookies.c
[PATCH] slab: remove kmem_cache_t
2006-12-07 08:39:25 -08:00
direct-io.c
[PATCH] dio: lock refcount operations
2006-12-10 09:57:21 -08:00
dnotify.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
dquot.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
drop_caches.c
eventpoll.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
exec.c
[PATCH] fdtable: Make fdarray and fdsets equal in size
2006-12-10 09:57:22 -08:00
fcntl.c
[PATCH] fdtable: Make fdarray and fdsets equal in size
2006-12-10 09:57:22 -08:00
fifo.c
[PATCH] pipe.c/fifo.c code cleanups
2006-04-11 13:53:33 +02:00
file.c
[PATCH] fdtable: Implement new pagesize-based fdtable allocator
2006-12-10 09:57:22 -08:00
file_table.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
filesystems.c
[PATCH] Ban register_filesystem(NULL);
2006-09-29 09:18:20 -07:00
fs-writeback.c
[PATCH] BLOCK: Remove dependence on existence of blockdev_superblock [try #6 ]
2006-09-30 20:52:26 +02:00
generic_acl.c
[PATCH] Generic infrastructure for acls
2006-09-29 09:18:24 -07:00
inode.c
[PATCH] relative atime
2006-12-13 09:05:50 -08:00
inotify.c
[PATCH] severing fs.h, radix-tree.h -> sched.h
2006-12-04 02:00:24 -05:00
inotify_user.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
internal.h
[PATCH] CONFIG_BLOCK internal.h cleanups
2006-09-30 20:52:32 +02:00
ioctl.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
ioprio.c
[PATCH] block layer: ioprio_best function fix
2006-10-12 15:09:51 +02:00
Kconfig
kconfig: Standardize "depends" -> "depends on" in Kconfig files
2006-12-12 20:04:19 +01:00
Kconfig.binfmt
libfs.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
locks.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
Makefile
[PATCH] fsstack: Introduce fsstack_copy_{attr,inode}_*
2006-12-08 08:28:40 -08:00
mbcache.c
[PATCH] slab: remove kmem_cache_t
2006-12-07 08:39:25 -08:00
mpage.c
[PATCH] BLOCK: Dissociate generic_writepages() from mpage stuff [try #6 ]
2006-09-30 20:52:26 +02:00
namei.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
namespace.c
[PATCH] relative atime
2006-12-13 09:05:50 -08:00
nfsctl.c
Remove obsolete #include <linux/config.h>
2006-06-30 19:25:36 +02:00
no-block.c
[PATCH] BLOCK: Make it possible to disable the block layer [try #6 ]
2006-09-30 20:52:31 +02:00
open.c
[PATCH] fdtable: Make fdarray and fdsets equal in size
2006-12-10 09:57:22 -08:00
pipe.c
[PATCH] constify pipe_buf_operations
2006-12-13 09:05:47 -08:00
pnode.c
[PATCH] rename struct namespace to struct mnt_namespace
2006-12-08 08:28:51 -08:00
pnode.h
[PATCH] rename struct namespace to struct mnt_namespace
2006-12-08 08:28:51 -08:00
posix_acl.c
[PATCH] kmemdup: some users
2006-10-01 00:39:19 -07:00
quota.c
[PATCH] BLOCK: Make it possible to disable the block layer [try #6 ]
2006-09-30 20:52:31 +02:00
quota_v1.c
quota_v2.c
[PATCH] sem2mutex: quota
2006-03-23 07:38:11 -08:00
read_write.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
read_write.h
[PATCH] Remove readv/writev methods and use aio_read/aio_write instead
2006-10-01 00:39:28 -07:00
readdir.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
select.c
[PATCH] fdtable: Make fdarray and fdsets equal in size
2006-12-10 09:57:22 -08:00
seq_file.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
splice.c
[PATCH] constify pipe_buf_operations
2006-12-13 09:05:47 -08:00
stack.c
[PATCH] fsstack: Introduce fsstack_copy_{attr,inode}_*
2006-12-08 08:28:40 -08:00
stat.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
super.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
sync.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
utimes.c
[PATCH] severing fs.h, radix-tree.h -> sched.h
2006-12-04 02:00:24 -05:00
xattr.c
[PATCH] VFS: change struct file to use struct path
2006-12-08 08:28:41 -08:00
xattr_acl.c