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 a057f48eb156..b23a7018eb90 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -2264,9 +2264,11 @@ ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, | |||
2264 | int lock_type); | 2264 | int lock_type); |
2265 | 2265 | ||
2266 | enum { | 2266 | enum { |
2267 | DIO_LOCKING = 1, /* need locking between buffered and direct access */ | 2267 | /* need locking between buffered and direct access */ |
2268 | DIO_NO_LOCKING, /* bdev; no locking at all between buffered/direct */ | 2268 | DIO_LOCKING = 0x01, |
2269 | DIO_OWN_LOCKING, /* filesystem locks buffered and direct internally */ | 2269 | |
2270 | /* filesystem does not support filling holes */ | ||
2271 | DIO_SKIP_HOLES = 0x02, | ||
2270 | }; | 2272 | }; |
2271 | 2273 | ||
2272 | static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, | 2274 | static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, |
@@ -2275,7 +2277,8 @@ static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, | |||
2275 | dio_iodone_t end_io) | 2277 | dio_iodone_t end_io) |
2276 | { | 2278 | { |
2277 | return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, | 2279 | return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, |
2278 | nr_segs, get_block, end_io, DIO_LOCKING); | 2280 | nr_segs, get_block, end_io, |
2281 | DIO_LOCKING | DIO_SKIP_HOLES); | ||
2279 | } | 2282 | } |
2280 | 2283 | ||
2281 | static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb, | 2284 | static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb, |
@@ -2284,16 +2287,7 @@ static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb, | |||
2284 | dio_iodone_t end_io) | 2287 | dio_iodone_t end_io) |
2285 | { | 2288 | { |
2286 | return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, | 2289 | return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, |
2287 | nr_segs, get_block, end_io, DIO_NO_LOCKING); | 2290 | nr_segs, get_block, end_io, 0); |
2288 | } | ||
2289 | |||
2290 | static inline ssize_t blockdev_direct_IO_own_locking(int rw, struct kiocb *iocb, | ||
2291 | struct inode *inode, struct block_device *bdev, const struct iovec *iov, | ||
2292 | loff_t offset, unsigned long nr_segs, get_block_t get_block, | ||
2293 | dio_iodone_t end_io) | ||
2294 | { | ||
2295 | return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, | ||
2296 | nr_segs, get_block, end_io, DIO_OWN_LOCKING); | ||
2297 | } | 2291 | } |
2298 | #endif | 2292 | #endif |
2299 | 2293 | ||