diff options
| -rw-r--r-- | fs/read_write.c | 6 | ||||
| -rw-r--r-- | include/linux/fs.h | 1 | ||||
| -rw-r--r-- | include/uapi/linux/fs.h | 3 |
3 files changed, 8 insertions, 2 deletions
diff --git a/fs/read_write.c b/fs/read_write.c index e9c9e2a667ce..07c53db04ec1 100644 --- a/fs/read_write.c +++ b/fs/read_write.c | |||
| @@ -697,10 +697,12 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter, | |||
| 697 | struct kiocb kiocb; | 697 | struct kiocb kiocb; |
| 698 | ssize_t ret; | 698 | ssize_t ret; |
| 699 | 699 | ||
| 700 | if (flags) | 700 | if (flags & ~RWF_HIPRI) |
| 701 | return -EOPNOTSUPP; | 701 | return -EOPNOTSUPP; |
| 702 | 702 | ||
| 703 | init_sync_kiocb(&kiocb, filp); | 703 | init_sync_kiocb(&kiocb, filp); |
| 704 | if (flags & RWF_HIPRI) | ||
| 705 | kiocb.ki_flags |= IOCB_HIPRI; | ||
| 704 | kiocb.ki_pos = *ppos; | 706 | kiocb.ki_pos = *ppos; |
| 705 | 707 | ||
| 706 | ret = fn(&kiocb, iter); | 708 | ret = fn(&kiocb, iter); |
| @@ -715,7 +717,7 @@ static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter, | |||
| 715 | { | 717 | { |
| 716 | ssize_t ret = 0; | 718 | ssize_t ret = 0; |
| 717 | 719 | ||
| 718 | if (flags) | 720 | if (flags & ~RWF_HIPRI) |
| 719 | return -EOPNOTSUPP; | 721 | return -EOPNOTSUPP; |
| 720 | 722 | ||
| 721 | while (iov_iter_count(iter)) { | 723 | while (iov_iter_count(iter)) { |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 6ec87964644f..337de88ff50f 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -320,6 +320,7 @@ struct writeback_control; | |||
| 320 | #define IOCB_EVENTFD (1 << 0) | 320 | #define IOCB_EVENTFD (1 << 0) |
| 321 | #define IOCB_APPEND (1 << 1) | 321 | #define IOCB_APPEND (1 << 1) |
| 322 | #define IOCB_DIRECT (1 << 2) | 322 | #define IOCB_DIRECT (1 << 2) |
| 323 | #define IOCB_HIPRI (1 << 3) | ||
| 323 | 324 | ||
| 324 | struct kiocb { | 325 | struct kiocb { |
| 325 | struct file *ki_filp; | 326 | struct file *ki_filp; |
diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h index 41e0433b4a83..847c656729f8 100644 --- a/include/uapi/linux/fs.h +++ b/include/uapi/linux/fs.h | |||
| @@ -305,4 +305,7 @@ struct fsxattr { | |||
| 305 | #define SYNC_FILE_RANGE_WRITE 2 | 305 | #define SYNC_FILE_RANGE_WRITE 2 |
| 306 | #define SYNC_FILE_RANGE_WAIT_AFTER 4 | 306 | #define SYNC_FILE_RANGE_WAIT_AFTER 4 |
| 307 | 307 | ||
| 308 | /* flags for preadv2/pwritev2: */ | ||
| 309 | #define RWF_HIPRI 0x00000001 /* high priority request, poll if possible */ | ||
| 310 | |||
| 308 | #endif /* _UAPI_LINUX_FS_H */ | 311 | #endif /* _UAPI_LINUX_FS_H */ |
