diff options
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r-- | include/linux/fs.h | 22 |
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 | ||
2265 | enum { | 2265 | enum { |
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 | ||
2271 | static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, | 2273 | static 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 | ||
2280 | static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb, | 2283 | static 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 | |||
2289 | static 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 | ||