aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/fs.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r--include/linux/fs.h22
1 files changed, 8 insertions, 14 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index cdc23be4edde..7c8ff12d1995 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2263,9 +2263,11 @@ ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
2263 int lock_type); 2263 int lock_type);
2264 2264
2265enum { 2265enum {
2266 DIO_LOCKING = 1, /* need locking between buffered and direct access */ 2266 /* need locking between buffered and direct access */
2267 DIO_NO_LOCKING, /* bdev; no locking at all between buffered/direct */ 2267 DIO_LOCKING = 0x01,
2268 DIO_OWN_LOCKING, /* filesystem locks buffered and direct internally */ 2268
2269 /* filesystem does not support filling holes */
2270 DIO_SKIP_HOLES = 0x02,
2269}; 2271};
2270 2272
2271static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, 2273static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb,
@@ -2274,7 +2276,8 @@ static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb,
2274 dio_iodone_t end_io) 2276 dio_iodone_t end_io)
2275{ 2277{
2276 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, 2278 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
2277 nr_segs, get_block, end_io, DIO_LOCKING); 2279 nr_segs, get_block, end_io,
2280 DIO_LOCKING | DIO_SKIP_HOLES);
2278} 2281}
2279 2282
2280static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb, 2283static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb,
@@ -2283,16 +2286,7 @@ static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb,
2283 dio_iodone_t end_io) 2286 dio_iodone_t end_io)
2284{ 2287{
2285 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, 2288 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
2286 nr_segs, get_block, end_io, DIO_NO_LOCKING); 2289 nr_segs, get_block, end_io, 0);
2287}
2288
2289static inline ssize_t blockdev_direct_IO_own_locking(int rw, struct kiocb *iocb,
2290 struct inode *inode, struct block_device *bdev, const struct iovec *iov,
2291 loff_t offset, unsigned long nr_segs, get_block_t get_block,
2292 dio_iodone_t end_io)
2293{
2294 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
2295 nr_segs, get_block, end_io, DIO_OWN_LOCKING);
2296} 2290}
2297#endif 2291#endif
2298 2292