kernel-ark/fs
Andrew Morton f79e2abb9b [PATCH] sys_sync_file_range()
Remove the recently-added LINUX_FADV_ASYNC_WRITE and LINUX_FADV_WRITE_WAIT
fadvise() additions, do it in a new sys_sync_file_range() syscall instead.
Reasons:

- It's more flexible.  Things which would require two or three syscalls with
  fadvise() can be done in a single syscall.

- Using fadvise() in this manner is something not covered by POSIX.

The patch wires up the syscall for x86.

The sycall is implemented in the new fs/sync.c.  The intention is that we can
move sys_fsync(), sys_fdatasync() and perhaps sys_sync() into there later.

Documentation for the syscall is in fs/sync.c.

A test app (sync_file_range.c) is in
http://www.zip.com.au/~akpm/linux/patches/stuff/ext3-tools.tar.gz.

The available-to-GPL-modules do_sync_file_range() is for knfsd: "A COMMIT can
say NFS_DATA_SYNC or NFS_FILE_SYNC.  I can skip the ->fsync call for
NFS_DATA_SYNC which is hopefully the more common."

Note: the `async' writeout mode SYNC_FILE_RANGE_WRITE will turn synchronous if
the queue is congested.  This is trivial to fix: add a new flag bit, set
wbc->nonblocking.  But I'm not sure that we want to expose implementation
details down to that level.

Note: it's notable that we can sync an fd which wasn't opened for writing.
Same with fsync() and fdatasync()).

Note: the code takes some care to handle attempts to sync file contents
outside the 16TB offset on 32-bit machines.  It makes such attempts appear to
succeed, for best 32-bit/64-bit compatibility.  Perhaps it should make such
requests fail...

Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Michael Kerrisk <mtk-manpages@gmx.net>
Cc: Ulrich Drepper <drepper@redhat.com>
Cc: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-03-31 12:18:54 -08:00
..
9p [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
adfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
affs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
afs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
autofs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
autofs4 [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
befs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
bfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
cifs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
coda [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
configfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
cramfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
debugfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
devfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
devpts [PATCH] devpts: use lib/parser.c for parsing mount options 2006-03-23 07:38:17 -08:00
efs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
exportfs
ext2 [PATCH] Introduce sys_splice() system call 2006-03-30 12:28:18 -08:00
ext3 [PATCH] Introduce sys_splice() system call 2006-03-30 12:28:18 -08:00
fat [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
freevxfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
fuse [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
hfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
hfsplus [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
hostfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
hpfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
hppfs [PATCH] uml: __user annotations 2006-03-31 12:18:51 -08:00
hugetlbfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
isofs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
jbd [PATCH] Make address_space_operations->invalidatepage return void 2006-03-26 08:56:55 -08:00
jffs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
jffs2 [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
jfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
lockd [PATCH] sem2mutex: fs/ 2006-03-26 08:56:55 -08:00
minix [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
msdos
ncpfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
nfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
nfs_common
nfsd [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
nls [PATCH] fs: Use ARRAY_SIZE macro 2006-03-24 07:33:19 -08:00
ntfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
ocfs2 [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
openpromfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
partitions Merge ../linux-2.6 2006-03-29 13:24:50 +11:00
proc [PATCH] Simplify proc/devices and fix early termination regression 2006-03-31 12:18:53 -08:00
qnx4 [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
ramfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
reiserfs [PATCH] Introduce sys_splice() system call 2006-03-30 12:28:18 -08:00
romfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
smbfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
sysfs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
sysv [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
udf [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
ufs [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
vfat
xfs [XFS] Cleanup in XFS after recent get_block_t interface tweaks. 2006-03-29 10:44:40 +10:00
aio.c [PATCH] use kzalloc and kcalloc in core fs code 2006-03-25 08:23:00 -08:00
attr.c
bad_inode.c [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
binfmt_aout.c
binfmt_elf_fdpic.c BUG_ON() Conversion in fs/binfmt_elf_fdpic.c 2006-03-24 18:38:48 +01:00
binfmt_elf.c [PATCH] x86_64: Increase the variability of the process stack on 64bit architectures 2006-03-25 09:10:52 -08:00
binfmt_em86.c
binfmt_flat.c [PATCH] flat binary loader doesn't check fd table full 2006-03-25 08:23:01 -08:00
binfmt_misc.c [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
binfmt_script.c
binfmt_som.c
bio.c [PATCH] mempool: use mempool_create_slab_pool() 2006-03-26 08:57:00 -08:00
block_dev.c [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
buffer.c [PATCH] for_each_online_pgdat: renaming for_each_pgdat 2006-03-27 08:44:48 -08:00
char_dev.c [PATCH] Simplify proc/devices and fix early termination regression 2006-03-31 12:18:53 -08:00
compat_ioctl.c [PATCH] fs: Use ARRAY_SIZE macro 2006-03-24 07:33:19 -08:00
compat.c [PATCH] Fold select_bits_alloc/free into caller code. 2006-03-28 09:16:04 -08:00
dcache.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial 2006-03-26 09:41:18 -08:00
dcookies.c [PATCH] Use __read_mostly on some hot fs variables 2006-03-26 08:56:56 -08:00
direct-io.c Fixes a regression from the recent "remove ->get_blocks() support" 2006-03-29 09:26:15 +10:00
dnotify.c [PATCH] Use __read_mostly on some hot fs variables 2006-03-26 08:56:56 -08:00
dquot.c [PATCH] cpuset memory spread: slab cache format 2006-03-24 07:33:23 -08:00
drop_caches.c
eventpoll.c [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
exec.c [PATCH] convert sighand_cache to use SLAB_DESTROY_BY_RCU 2006-03-28 18:36:42 -08:00
fcntl.c [PATCH] Use __read_mostly on some hot fs variables 2006-03-26 08:56:56 -08:00
fifo.c [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
file_table.c [PATCH] get_empty_filp tweaks, inline epoll_init_file() 2006-03-23 07:38:17 -08:00
file.c [PATCH] for_each_possible_cpu: fixes for generic part 2006-03-28 09:16:05 -08:00
filesystems.c
fs-writeback.c [PATCH] Move cond_resched() after iput() in sync_sb_inodes() 2006-03-25 08:22:56 -08:00
inode.c [PATCH] mark f_ops const in the inode 2006-03-28 09:16:05 -08:00
inotify.c [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
ioctl.c
ioprio.c
Kconfig Merge branch 'linus' 2006-03-23 23:44:19 -05:00
Kconfig.binfmt
libfs.c [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
locks.c [PATCH] locks: don't panic 2006-03-31 12:18:52 -08:00
Makefile [PATCH] sys_sync_file_range() 2006-03-31 12:18:54 -08:00
mbcache.c [PATCH] Typo fixes 2006-03-28 09:16:08 -08:00
mpage.c [PATCH] map multiple blocks for mpage_readpages() 2006-03-26 08:57:01 -08:00
namei.c [PATCH] autofs4: nameidata needs to be up to date for follow_link 2006-03-27 08:44:40 -08:00
namespace.c [PATCH] autofs4: change may_umount* functions to boolean 2006-03-27 08:44:40 -08:00
nfsctl.c [PATCH] fs: Use ARRAY_SIZE macro 2006-03-24 07:33:19 -08:00
open.c Merge branch 'audit.b3' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current 2006-03-25 09:24:53 -08:00
pipe.c [PATCH] splice: add support for SPLICE_F_MOVE flag 2006-03-30 12:28:18 -08:00
pnode.c [PATCH] s/;;/;/g 2006-03-24 07:33:24 -08:00
pnode.h
posix_acl.c
quota_v1.c
quota_v2.c [PATCH] sem2mutex: quota 2006-03-23 07:38:11 -08:00
quota.c [PATCH] sem2mutex: quota 2006-03-23 07:38:11 -08:00
read_write.c [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
readdir.c
select.c [PATCH] mark f_ops const in the inode 2006-03-28 09:16:05 -08:00
seq_file.c [PATCH] sem2mutex: fs/seq_file.c 2006-03-23 07:38:12 -08:00
splice.c [PATCH] splice exports 2006-03-30 22:16:24 -08:00
stat.c [PATCH] fstatat64 support 2006-02-11 21:41:10 -08:00
super.c [PATCH] sem2mutex: fs/ 2006-03-26 08:56:55 -08:00
sync.c [PATCH] sys_sync_file_range() 2006-03-31 12:18:54 -08:00
xattr_acl.c
xattr.c [PATCH] Collect more inode information during syscall processing. 2006-03-20 14:08:53 -05:00