twx-linux/include/linux
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
..
amba
byteorder
can
decompress
dvb
hdlc
i2c
input
isdn
lockd
mfd Merge git://git.infradead.org/battery-2.6 2009-12-15 08:59:33 -08:00
mlx4
mmc
mtd
netfilter
netfilter_arp
netfilter_bridge
netfilter_ipv4
netfilter_ipv6
nfsd
raid
regulator
rtc
spi
ssb
sunrpc
tc_act
tc_ematch
unaligned
usb
uwb
wimax
8250_pci.h
a.out.h
ac97_codec.h
acct.h
acpi_pmtmr.h
acpi.h
adb.h
adfs_fs.h
aer.h
affs_hardblocks.h
agp_backend.h
agpgart.h
aio_abi.h
aio.h aio: remove unused field 2009-12-16 07:20:13 -08:00
amifd.h
amifdreg.h
amigaffs.h
anon_inodes.h
apm_bios.h
apm-emulation.h
arcdevice.h
arcfb.h
async_tx.h
async.h
ata_platform.h
ata.h
atalk.h
ath9k_platform.h
atm_eni.h
atm_he.h
atm_idt77105.h
atm_nicstar.h
atm_suni.h
atm_tcp.h
atm_zatm.h
atm.h
atmapi.h
atmarp.h
atmbr2684.h
atmclip.h
atmdev.h
atmel_pdc.h
atmel_pwm.h
atmel_serial.h
atmel_tc.h
atmel-mci.h atmel-mci: change use of dma slave interface 2009-12-15 08:53:35 -08:00
atmel-pwm-bl.h
atmel-ssc.h
atmioc.h
atmlec.h
atmmpc.h
atmppp.h
atmsap.h
atmsvc.h
attribute_container.h
audit.h
auto_dev-ioctl.h
auto_fs4.h
auto_fs.h
auxvec.h
ax25.h
b1lli.h
b1pcmcia.h
backing-dev.h
backlight.h
baycom.h
bcd.h
bfs_fs.h
binfmts.h
bio.h
bit_spinlock.h
bitmap.h
bitops.h
bitrev.h
blk-iopoll.h
blkdev.h
blkpg.h
blktrace_api.h
blockgroup_lock.h
bootmem.h
bottom_half.h
bpqether.h
brcmphy.h
bsg.h
buffer_head.h
bug.h
c2port.h
cache.h
can.h
capability.h
capi.h
cb710.h
cciss_ioctl.h
cd1400.h
cdev.h
cdk.h
cdrom.h
cfag12864b.h
cgroup_subsys.h
cgroup.h
cgroupstats.h
chio.h
circ_buf.h
clk.h
clockchips.h
clocksource.h
cm4000_cs.h
cn_proc.h
cnt32_to_63.h
coda_cache.h
coda_fs_i.h
coda_linux.h
coda_psdev.h
coda.h
coff.h
com20020.h
compat.h
compiler-gcc3.h
compiler-gcc4.h
compiler-gcc.h
compiler-intel.h
compiler.h
completion.h
comstats.h
concap.h
configfs.h
connector.h
console_struct.h
console.h
consolemap.h
const.h
cpu.h
cpufreq.h
cpuidle.h
cpumask.h
cpuset.h
cramfs_fs_sb.h
cramfs_fs.h
crash_dump.h
crc7.h
crc16.h
crc32.h
crc32c.h
crc-ccitt.h
crc-itu-t.h
crc-t10dif.h
cred.h
crypto.h
cryptohash.h
cs5535.h cs5535: define lxfb/gxfb MSRs in linux/cs5535.h 2009-12-15 08:53:28 -08:00
ctype.h string: factorize skip_spaces and export it to be generally available 2009-12-15 08:53:32 -08:00
cuda.h
cyclades.h
cyclomx.h
cycx_cfm.h
cycx_drv.h
cycx_x25.h
dca.h
dcache.h
dcbnl.h
dccp.h
dcookies.h
debug_locks.h
debugfs.h
debugobjects.h
delay.h
delayacct.h
device_cgroup.h
device-mapper.h
device.h
devpts_fs.h
dio.h
dirent.h
display.h
dlm_device.h
dlm_netlink.h
dlm_plock.h
dlm.h
dlmconstants.h
dm9000.h
dm-dirty-log.h
dm-io.h
dm-ioctl.h
dm-kcopyd.h
dm-log-userspace.h
dm-region-hash.h
dma_remapping.h
dma-attrs.h
dma-debug.h
dma-mapping.h
dmaengine.h
dmapool.h
dmar.h
dmi.h
dn.h
dnotify.h
dqblk_qtree.h
dqblk_v1.h
dqblk_v2.h
dqblk_xfs.h
drbd_limits.h
drbd_nl.h
drbd_tag_magic.h
drbd.h
ds1286.h
ds17287rtc.h
dst.h
dtlk.h
dw_dmac.h
dynamic_debug.h dynamic_debug.h/kernel.h: Remove KBUILD_MODNAME from dynamic_pr_debug 2009-12-15 08:53:25 -08:00
edac.h
edd.h
eeprom_93cx6.h
efi.h efi.h: use %pUl to print UUIDs 2009-12-15 08:53:33 -08:00
efs_fs_sb.h
efs_vh.h
eisa.h
elevator.h
elf-em.h
elf-fdpic.h
elf.h
elfcore-compat.h
elfcore.h
elfnote.h
enclosure.h
err.h err.h: add helper function to simplify pointer error checking 2009-12-15 08:53:27 -08:00
errno.h
errqueue.h
etherdevice.h
ethtool.h
eventfd.h
eventpoll.h
exportfs.h
ext2_fs_sb.h
ext2_fs.h
ext3_fs_i.h
ext3_fs_sb.h
ext3_fs.h
ext3_jbd.h
f75375s.h
fadvise.h
falloc.h
fault-inject.h
fb.h
fcdevice.h
fcntl.h
fd.h
fddidevice.h
fdreg.h
fdtable.h
fib_rules.h
fiemap.h
file.h
filter.h
fips.h
firewire-cdev.h
firewire-constants.h
firewire.h
firmware-map.h
firmware.h
flat.h
flex_array.h
font.h
freezer.h
fs_enet_pd.h
fs_stack.h
fs_struct.h
fs_uart_pd.h
fs.h direct-io: cleanup blockdev_direct_IO locking 2009-12-16 07:20:13 -08:00
fscache-cache.h
fscache.h
fsl_devices.h
fsnotify_backend.h
fsnotify.h
ftrace_event.h
ftrace_irq.h
ftrace.h
fuse.h
futex.h
gameport.h
gcd.h
gen_stats.h
genalloc.h
generic_acl.h
generic_serial.h
genetlink.h
genhd.h
getcpu.h
gfp.h
gfs2_ondisk.h
gigaset_dev.h
gpio_keys.h
gpio_mouse.h
gpio.h gpiolib: add support for changing value polarity in sysfs 2009-12-16 07:20:01 -08:00
hardirq.h
hash.h
hdlc.h
hdlcdrv.h
hdpu_features.h
hdreg.h
hid-debug.h
hid.h
hiddev.h
hidraw.h
highmem.h
highuid.h
hil_mlc.h
hil.h
hippidevice.h
hp_sdc.h
hpet.h
hrtimer.h
htirq.h
hugetlb.h
hw_breakpoint.h
hw_random.h
hwmon-sysfs.h
hwmon-vid.h
hwmon.h
hysdn_if.h
i2c-algo-bit.h
i2c-algo-pca.h
i2c-algo-pcf.h
i2c-dev.h
i2c-gpio.h
i2c-id.h
i2c-ocores.h
i2c-pca-platform.h
i2c-pnx.h
i2c-pxa.h
i2c.h
i2o-dev.h
i2o.h
i8k.h
i7300_idle.h
i8042.h
i82593.h
ibmtr.h
icmp.h
icmpv6.h
ide.h
idr.h
ieee80211.h
if_addr.h
if_addrlabel.h
if_arcnet.h
if_arp.h
if_bonding.h
if_bridge.h
if_cablemodem.h
if_ec.h
if_eql.h
if_ether.h
if_fc.h
if_fddi.h
if_frad.h
if_hippi.h
if_infiniband.h
if_link.h
if_ltalk.h
if_macvlan.h
if_packet.h
if_phonet.h
if_plip.h
if_ppp.h
if_pppol2tp.h
if_pppox.h
if_slip.h
if_strip.h
if_tr.h
if_tun.h
if_tunnel.h
if_vlan.h
if.h
igmp.h
ihex.h
ima.h
in6.h
in_route.h
in.h
inet_diag.h
inet_lro.h
inet.h
inetdevice.h
init_ohci1394_dma.h
init_task.h Merge branch 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-12-15 09:02:01 -08:00
init.h
initrd.h
inotify.h
input-polldev.h
input.h
intel-iommu.h
interrupt.h
io-mapping.h
io.h
ioc3.h
ioc4.h
iocontext.h
ioctl.h
iommu-helper.h
iommu.h
ioport.h
ioprio.h
iova.h
ip6_tunnel.h
ip_vs.h
ip.h
ipc_namespace.h ipc: HARD_MSGMAX should be higher not lower on 64bit 2009-12-16 07:20:10 -08:00
ipc.h
ipmi_msgdefs.h
ipmi_smi.h
ipmi.h
ipsec.h
ipv6_route.h
ipv6.h
ipx.h
irda.h
irq_cpustat.h
irq.h
irqflags.h
irqnr.h
irqreturn.h
isa.h
isapnp.h
iscsi_ibft.h
isdn_divertif.h
isdn_ppp.h
isdn.h
isdnif.h
isicom.h
iso_fs.h
istallion.h
ivtv.h
ivtvfb.h
ixjuser.h
jbd2.h
jbd.h
jffs2.h
jhash.h
jiffies.h
journal-head.h
joystick.h
kallsyms.h kallsyms: remove deprecated print_fn_descriptor_symbol() 2009-12-15 08:53:26 -08:00
kbd_diacr.h
kbd_kern.h
Kbuild
kbuild.h
kd.h
kdebug.h
kdev_t.h
kernel_stat.h
kernel.h kernel.h: add printk_ratelimited and pr_<level>_rl 2009-12-15 08:53:26 -08:00
kernelcapi.h
kexec.h kexec: premit reduction of the reserved memory size 2009-12-16 07:20:13 -08:00
key-type.h
key.h
keyboard.h
keyctl.h
kfifo.h
kgdb.h
klist.h
kmalloc_sizes.h
kmemcheck.h
kmemleak.h
kmemtrace.h
kmod.h
kobj_map.h
kobject.h
kprobes.h
kref.h
ks0108.h
ksm.h ksm: rmap_walk to remove_migation_ptes 2009-12-15 08:53:20 -08:00
kthread.h
ktime.h
kvm_host.h
kvm_para.h
kvm_types.h
kvm.h
lapb.h
latencytop.h
lcd.h
leds_pwm.h
leds-bd2802.h
leds-lp3944.h
leds-pca9532.h
leds.h
lguest_launcher.h
lguest.h
libata.h
libps2.h
license.h
limits.h
linkage.h
linux_logo.h
lis3lv02d.h lis3: selftest support 2009-12-15 08:53:36 -08:00
list_nulls.h
list.h
llc.h
lmb.h
lockdep.h
log2.h
loop.h
lp.h
lru_cache.h
lsm_audit.h
lzo.h
m48t86.h
magic.h
major.h
map_to_7segment.h
maple.h
math64.h
matroxfb.h
max17040_battery.h
mbcache.h
mbus.h
mc6821.h
mc146818rtc.h
mca-legacy.h
mca.h
mdio-bitbang.h
mdio-gpio.h
mdio.h
memcontrol.h memcg: make memcg's file mapped consistent with global VM 2009-12-16 07:20:07 -08:00
memory_hotplug.h mm: memory_hotplug: make offline_pages() static 2009-12-15 08:53:20 -08:00
memory.h
mempolicy.h
mempool.h
memstick.h
meye.h
mg_disk.h
migrate.h ksm: memory hotremove migration only 2009-12-15 08:53:20 -08:00
mii.h
minix_fs.h
miscdevice.h
mISDNdsp.h
mISDNhw.h
mISDNif.h
mm_inline.h
mm_types.h
mm.h mm hugetlb: add hugepage support to pagemap 2009-12-15 08:53:24 -08:00
mman.h
mmdebug.h
mmiotrace.h
mmtimer.h
mmu_context.h
mmu_notifier.h
mmzone.h
mnt_namespace.h
mod_devicetable.h
module.h
moduleloader.h
moduleparam.h
mount.h
mpage.h
mqueue.h
mroute6.h
mroute.h
msdos_fs.h
msg.h
msi.h
mtio.h
mutex-debug.h
mutex.h
mv643xx_eth.h
mv643xx_i2c.h
mv643xx.h
n_r3964.h
namei.h
nbd.h
ncp_fs_i.h
ncp_fs_sb.h
ncp_fs.h
ncp_mount.h
ncp_no.h
ncp.h
neighbour.h
net_dropmon.h
net_tstamp.h
net.h
netdevice.h
netfilter_arp.h
netfilter_bridge.h
netfilter_decnet.h
netfilter_ipv4.h
netfilter_ipv6.h
netfilter.h
netlink.h
netpoll.h
netrom.h
nfs2.h
nfs3.h
nfs4_acl.h
nfs4_mount.h
nfs4.h
nfs_fs_i.h
nfs_fs_sb.h
nfs_fs.h
nfs_idmap.h
nfs_iostat.h
nfs_mount.h
nfs_page.h
nfs_xdr.h
nfs.h
nfsacl.h
nfsd_idmap.h
nilfs2_fs.h
nl80211.h
nl802154.h
nls.h
nmi.h
node.h
nodemask.h
notifier.h
nsc_gpio.h
nsproxy.h
nubus.h
numa.h
nvram.h
nwpserial.h
of_device.h
of_fdt.h
of_gpio.h
of_i2c.h
of_mdio.h
of_platform.h
of_spi.h
of.h
omapfb.h
oom.h oom-kill: fix NUMA constraint check with nodemask 2009-12-16 07:19:57 -08:00
oprofile.h
oxu210hp.h
page_cgroup.h memcg: cleanup mem_cgroup_move_parent() 2009-12-16 07:20:07 -08:00
page-debug-flags.h
page-flags.h mm: CONFIG_MMU for PG_mlocked 2009-12-15 08:53:17 -08:00
page-isolation.h
pageblock-flags.h
pagemap.h
pagevec.h
param.h
parport_pc.h
parport.h
parser.h
patchkey.h
path.h
pci_hotplug.h
pci_ids.h
pci_regs.h
pci-acpi.h
pci-aspm.h
pci.h
pcieport_if.h
pda_power.h
percpu_counter.h
percpu-defs.h
percpu.h
perf_counter.h
perf_event.h
personality.h
pfkeyv2.h
pfn.h
pg.h
phantom.h
phonedev.h
phonet.h
phy_fixed.h
phy.h
pid_namespace.h
pid.h
pim.h
pipe_fs_i.h
pkt_cls.h
pkt_sched.h
pktcdvd.h
platform_device.h
plist.h
pm_qos_params.h
pm_runtime.h
pm_wakeup.h
pm.h const: constify remaining dev_pm_ops 2009-12-15 08:53:25 -08:00
pmu.h
pnp.h
poison.h
poll.h
posix_acl_xattr.h
posix_acl.h
posix_types.h
posix-timers.h
power_supply.h
ppdev.h
ppp_channel.h
ppp_defs.h
ppp-comp.h
pps_kernel.h
pps.h
prctl.h
preempt.h
prefetch.h
prio_heap.h
prio_tree.h
proc_fs.h
profile.h
proportions.h
ptrace.h ptrace: introduce user_single_step_siginfo() helper 2009-12-16 07:20:08 -08:00
pwm_backlight.h
pwm.h
qnx4_fs.h
qnxtypes.h
quicklist.h
quota.h
quotaops.h
radeonfb.h
radix-tree.h
raid_class.h
ramfs.h
random.h
ratelimit.h
rational.h
raw.h
rbtree.h
rculist_nulls.h
rculist.h
rcupdate.h
rcutiny.h
rcutree.h
rds.h
reboot.h
reciprocal_div.h
regset.h
reiserfs_acl.h
reiserfs_fs_i.h
reiserfs_fs_sb.h
reiserfs_fs.h reiserfs: don't compile procfs.o at all if no support 2009-12-16 07:20:06 -08:00
reiserfs_xattr.h
relay.h
res_counter.h
resource.h
resume-trace.h
rfkill.h
ring_buffer.h
rio_drv.h
rio_ids.h
rio_regs.h
rio.h
rmap.h ksm: rmap_walk to remove_migation_ptes 2009-12-15 08:53:20 -08:00
romfs_fs.h
root_dev.h
rose.h
rotary_encoder.h
route.h
rslib.h
rtc-v3020.h
rtc.h
rtmutex.h
rtnetlink.h
rwlock_api_smp.h
rwlock_types.h
rwlock.h
rwsem-spinlock.h rwsem: fix rwsem_is_locked() bugs 2009-12-15 08:53:26 -08:00
rwsem.h
rxrpc.h
sc26198.h
scatterlist.h
scc.h
sched.h signals: kill force_sig_specific() 2009-12-16 07:20:09 -08:00
screen_info.h
sctp.h
scx200_gpio.h
scx200.h
sdla.h
seccomp.h
securebits.h
security.h
selection.h
selinux_netlink.h
selinux.h
sem.h ipc/sem.c: add a per-semaphore pending list 2009-12-16 07:20:10 -08:00
semaphore.h
seq_file_net.h
seq_file.h
seqlock.h
serial167.h
serial_8250.h
serial_core.h
serial_max3100.h
serial_pnx8xxx.h
serial_reg.h
serial_sci.h
serial.h
serialP.h
serio.h
sfi_acpi.h
sfi.h
sh_intc.h
sh_pfc.h
sh_timer.h
shm.h
shmem_fs.h
sht15.h
signal.h
signalfd.h
skbuff.h
slab_def.h
slab.h
slob_def.h
slow-work.h
slub_def.h
sm501-regs.h sm501: implement acceleration features 2009-12-16 07:20:04 -08:00
sm501.h
smb_fs_i.h
smb_fs_sb.h
smb_fs.h
smb_mount.h
smb.h
smbno.h
smc91x.h
smc911x.h
smp_lock.h
smp.h
smsc911x.h
snmp.h
socket.h
sockios.h
som.h
sonet.h
sony-laptop.h
sonypi.h
sort.h
sound.h
soundcard.h
spinlock_api_smp.h
spinlock_api_up.h
spinlock_types_up.h
spinlock_types.h
spinlock_up.h
spinlock.h
splice.h
srcu.h
stackprotector.h
stacktrace.h
stallion.h
start_kernel.h
stat.h
statfs.h
stddef.h
stop_machine.h
string_helpers.h
string.h Subject: Re: [PATCH] strstrip incorrectly marked __must_check 2009-12-15 08:53:34 -08:00
stringify.h
superhyway.h
suspend_ioctls.h
suspend.h
svga.h
swab.h
swap.h
swapops.h
swiotlb.h
synclink.h
sys.h
syscalls.h
sysctl.h
sysdev.h
sysfs.h
sysrq.h
sysv_fs.h
task_io_accounting_ops.h
task_io_accounting.h
taskstats_kern.h
taskstats.h
tboot.h
tc.h
tcp.h
telephony.h
termios.h
textsearch_fsm.h
textsearch.h
tfrc.h
thermal.h
thread_info.h
threads.h
tick.h
tifm.h
timb_gpio.h gpio: add GPIO driver for the Timberdale FPGA 2009-12-16 07:20:00 -08:00
time.h
timecompare.h
timer.h
timerfd.h
timeriomem-rng.h
times.h
timex.h
tiocl.h
tipc_config.h
tipc.h
topology.h
toshiba.h
tpm.h
trace_clock.h
trace_seq.h
tracehook.h ptrace: change tracehook_report_syscall_exit() to handle stepping 2009-12-16 07:20:08 -08:00
tracepoint.h
transport_class.h
trdevice.h
tsacct_kern.h
tty_driver.h
tty_flip.h
tty_ldisc.h
tty.h vt: introduce and use vt_kmsg_redirect() function 2009-12-15 08:53:28 -08:00
typecheck.h
types.h
uaccess.h
ucb1400.h
udf_fs_i.h
udp.h
uinput.h
uio_driver.h
uio.h
ultrasound.h
un.h
unistd.h
usb_usual.h
usb.h
usbdevice_fs.h
user_namespace.h
user-return-notifier.h
user.h
utime.h
uts.h
utsname.h
uwb.h
vermagic.h
veth.h
vfs.h
vgaarb.h
via.h
video_output.h
videodev2.h
videodev.h
videotext.h
virtio_9p.h
virtio_balloon.h
virtio_blk.h
virtio_config.h
virtio_console.h
virtio_ids.h
virtio_net.h
virtio_pci.h
virtio_ring.h
virtio_rng.h
virtio.h
vlynq.h
vmalloc.h
vmstat.h
vt_buffer.h
vt_kern.h
vt.h vt: introduce and use vt_kmsg_redirect() function 2009-12-15 08:53:28 -08:00
w1-gpio.h
wait.h
wanrouter.h
watchdog.h
wimax.h
wireless.h
wlp.h
wm97xx_batt.h
wm97xx.h
workqueue.h
writeback.h
x25.h
xattr.h
xfrm.h
xilinxfb.h
yam.h
zconf.h
zlib.h
zorro_ids.h
zorro.h
zutil.h