linux/arch/blackfin/include/asm
Christoph Hellwig 6b2f3d1f76 vfs: Implement proper O_SYNC semantics
While Linux provided an O_SYNC flag basically since day 1, it took until
Linux 2.4.0-test12pre2 to actually get it implemented for filesystems,
since that day we had generic_osync_around with only minor changes and the
great "For now, when the user asks for O_SYNC, we'll actually give
O_DSYNC" comment.  This patch intends to actually give us real O_SYNC
semantics in addition to the O_DSYNC semantics.  After Jan's O_SYNC
patches which are required before this patch it's actually surprisingly
simple, we just need to figure out when to set the datasync flag to
vfs_fsync_range and when not.

This patch renames the existing O_SYNC flag to O_DSYNC while keeping it's
numerical value to keep binary compatibility, and adds a new real O_SYNC
flag.  To guarantee backwards compatiblity it is defined as expanding to
both the O_DSYNC and the new additional binary flag (__O_SYNC) to make
sure we are backwards-compatible when compiled against the new headers.

This also means that all places that don't care about the differences can
just check O_DSYNC and get the right behaviour for O_SYNC, too - only
places that actuall care need to check __O_SYNC in addition.  Drivers and
network filesystems have been updated in a fail safe way to always do the
full sync magic if O_DSYNC is set.  The few places setting O_SYNC for
lower layers are kept that way for now to stay failsafe.

We enforce that O_DSYNC is set when __O_SYNC is set early in the open path
to make sure we always get these sane options.

Note that parisc really screwed up their headers as they already define a
O_DSYNC that has always been a no-op.  We try to repair it by using it for
the new O_DSYNC and redefinining O_SYNC to send both the traditional
O_SYNC numerical value _and_ the O_DSYNC one.

Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Grant Grundler <grundler@parisc-linux.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andreas Dilger <adilger@sun.com>
Acked-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Acked-by: Kyle McMartin <kyle@mcmartin.ca>
Acked-by: Ulrich Drepper <drepper@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jan Kara <jack@suse.cz>
2009-12-10 15:02:50 +01:00
..
Kbuild Blackfin arch: cleanup bfin_sport.h header and export it to userspace 2009-03-05 19:42:43 +08:00
atomic.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
auxvec.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
bfin-global.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
bfin5xx_spi.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
bfin_rotary.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
bfin_sdh.h Blackfin arch: add SDIO host driver platform data 2009-01-07 23:14:38 +08:00
bfin_simple_timer.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
bfin_sport.h Blackfin arch: clean up sports header file 2009-03-28 20:38:17 +08:00
bfrom.h Blackfin arch: Update some inline assembly, tweak some register constraints 2009-01-07 23:14:39 +08:00
bitops.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
bitsperlong.h asm-generic: introduce asm/bitsperlong.h 2009-06-11 21:02:14 +02:00
blackfin.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
bug.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
bugs.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
byteorder.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
cache.h Blackfin: fix missed cache config renames 2009-10-07 04:48:08 -04:00
cacheflush.h block: add helpers to run flush_dcache_page() against a bio and a request's pages 2009-11-26 09:16:19 +01:00
cdef_LPBlackfin.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
checksum.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
clocks.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
context.S Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
cplb.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
cplbinit.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
cpu.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
cputime.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
current.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
def_LPBlackfin.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
delay.h Blackfin arch: Remove outdated code 2009-02-04 16:49:45 +08:00
device.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
div64.h Blackfin arch: move include/asm-blackfin header files to arch/blackfin 2008-08-27 10:51:02 +08:00
dma-mapping.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
dma.h Blackfin: add SSYNC to set_dma_sg() for descriptor fetching 2009-06-12 06:11:57 -04:00
dpmc.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
early_printk.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
elf.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
emergency-restart.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
entry.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
errno.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
fb.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
fcntl.h vfs: Implement proper O_SYNC semantics 2009-12-10 15:02:50 +01:00
fixed_code.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
flat.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
ftrace.h Blackfin: update ftrace for latest toolchain 2009-09-16 22:10:52 -04:00
futex.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
gpio.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
gptimers.h Blackfin: update gptimers API 2009-06-12 06:11:47 -04:00
hardirq.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
hw_irq.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
io.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
ioctl.h Blackfin arch: move include/asm-blackfin header files to arch/blackfin 2008-08-27 10:51:02 +08:00
ioctls.h Blackfin: convert asm/ioctls.h to asm-generic/ioctls.h 2009-06-18 21:40:53 -04:00
ipcbuf.h Blackfin: convert shm/sysv/ipc to asm-generic 2009-06-18 21:40:58 -04:00
ipipe.h Blackfin: fix misnomer of some I-pipe helpers 2009-09-16 21:28:30 -04:00
ipipe_base.h Blackfin: convert interrupt pipeline to irqflags 2009-06-22 21:15:53 -04:00
irq.h Blackfin: asm/irq.h: pull in mach/anomaly.h for anomaly defines 2009-10-07 04:48:01 -04:00
irq_handler.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
irq_regs.h Blackfin arch: move include/asm-blackfin header files to arch/blackfin 2008-08-27 10:51:02 +08:00
irqflags.h Blackfin: convert interrupt pipeline to irqflags 2009-06-22 21:15:53 -04:00
kdebug.h Blackfin arch: move include/asm-blackfin header files to arch/blackfin 2008-08-27 10:51:02 +08:00
kgdb.h Blackfin arch: scrub comments/whitespace/cvs keywords 2009-02-04 16:49:45 +08:00
kmap_types.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
l1layout.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
linkage.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
local.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
mem_init.h Blackfin: bf526-ezbrd: handle different SDRAM chips 2009-06-22 21:16:12 -04:00
mem_map.h Blackfin: unify memory map headers 2009-06-22 21:16:07 -04:00
mman.h Blackfin: convert signal/mmap to asm-generic 2009-06-18 21:41:26 -04:00
mmu.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
mmu_context.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
module.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
msgbuf.h Blackfin: convert shm/sysv/ipc to asm-generic 2009-06-18 21:40:58 -04:00
mutex.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
nand.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
page.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
page_offset.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
param.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
pci.h Blackfin arch: move include/asm-blackfin header files to arch/blackfin 2008-08-27 10:51:02 +08:00
pda.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
percpu.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
pgalloc.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
pgtable.h Blackfin: fix framebuffer mmap bug for nommu 2009-10-08 00:58:15 -04:00
poll.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
portmux.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
posix_types.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
processor.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
ptrace.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
reboot.h Blackfin arch: Fix bug - Run "reboot" hangs bf518-ezbrd 2009-02-04 16:49:45 +08:00
resource.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
rwlock.h Blackfin arch: SMP supporting patchset: Blackfin header files and machine common code 2009-01-07 23:14:39 +08:00
scatterlist.h Blackfin arch: move include/asm-blackfin header files to arch/blackfin 2008-08-27 10:51:02 +08:00
sections.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
segment.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
sembuf.h Blackfin: convert shm/sysv/ipc to asm-generic 2009-06-18 21:40:58 -04:00
serial.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
setup.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
shmbuf.h Blackfin: convert shm/sysv/ipc to asm-generic 2009-06-18 21:40:58 -04:00
shmparam.h Blackfin: convert shm/sysv/ipc to asm-generic 2009-06-18 21:40:58 -04:00
sigcontext.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
siginfo.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
signal.h Blackfin: convert signal/mmap to asm-generic 2009-06-18 21:41:26 -04:00
smp.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
socket.h Blackfin: convert socket/poll to asm-generic 2009-06-18 21:41:08 -04:00
sockios.h Blackfin: convert socket/poll to asm-generic 2009-06-18 21:41:08 -04:00
spinlock.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
spinlock_types.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
stat.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
statfs.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
string.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
swab.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
system.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
termbits.h Blackfin: convert termios to asm-generic 2009-06-18 21:41:17 -04:00
termios.h Blackfin: convert termios to asm-generic 2009-06-18 21:41:17 -04:00
thread_info.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
time.h Blackfin: add support for gptimer0 as a tick source 2009-06-12 06:11:37 -04:00
timex.h Blackfin arch: make sure cycles is marked as volatile so gcc doesnt reorder on us 2008-10-16 23:55:41 +08:00
tlb.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
tlbflush.h Blackfin: convert page/tlb to asm-generic 2009-06-18 21:42:30 -04:00
topology.h Blackfin: convert simple headers to asm-generic 2009-06-18 21:41:13 -04:00
trace.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
traps.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
types.h Blackfin: convert types to asm-generic 2009-06-18 21:42:24 -04:00
uaccess.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
ucontext.h Blackfin: convert page/tlb to asm-generic 2009-06-18 21:42:30 -04:00
unaligned.h Blackfin: convert locking primitives to asm-generic 2009-06-18 21:41:22 -04:00
unistd.h Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
user.h Blackfin: convert user/elf to asm-generic 2009-06-18 21:41:03 -04:00
xor.h Blackfin arch: use generic xor.h 2008-11-18 17:48:22 +08:00