Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

annotate RWF_... flags

[AV: added missing annotations in syscalls.h/compat.h]

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

authored by

Christoph Hellwig and committed by
Al Viro
ddef7ed2 4f59c718

+79 -52
+1 -1
fs/nfsd/vfs.c
··· 969 969 int use_wgather; 970 970 loff_t pos = offset; 971 971 unsigned int pflags = current->flags; 972 - int flags = 0; 972 + rwf_t flags = 0; 973 973 974 974 if (test_bit(RQ_LOCAL, &rqstp->rq_flags)) 975 975 /*
+25 -25
fs/read_write.c
··· 33 33 34 34 EXPORT_SYMBOL(generic_ro_fops); 35 35 36 - static inline int unsigned_offsets(struct file *file) 36 + static inline bool unsigned_offsets(struct file *file) 37 37 { 38 38 return file->f_mode & FMODE_UNSIGNED_OFFSET; 39 39 } ··· 633 633 EXPORT_SYMBOL(iov_shorten); 634 634 635 635 static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter, 636 - loff_t *ppos, int type, int flags) 636 + loff_t *ppos, int type, rwf_t flags) 637 637 { 638 638 struct kiocb kiocb; 639 639 ssize_t ret; ··· 655 655 656 656 /* Do it by hand, with file-ops */ 657 657 static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter, 658 - loff_t *ppos, int type, int flags) 658 + loff_t *ppos, int type, rwf_t flags) 659 659 { 660 660 ssize_t ret = 0; 661 661 ··· 871 871 #endif 872 872 873 873 static ssize_t do_iter_read(struct file *file, struct iov_iter *iter, 874 - loff_t *pos, int flags) 874 + loff_t *pos, rwf_t flags) 875 875 { 876 876 size_t tot_len; 877 877 ssize_t ret = 0; ··· 899 899 } 900 900 901 901 ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos, 902 - int flags) 902 + rwf_t flags) 903 903 { 904 904 if (!file->f_op->read_iter) 905 905 return -EINVAL; ··· 908 908 EXPORT_SYMBOL(vfs_iter_read); 909 909 910 910 static ssize_t do_iter_write(struct file *file, struct iov_iter *iter, 911 - loff_t *pos, int flags) 911 + loff_t *pos, rwf_t flags) 912 912 { 913 913 size_t tot_len; 914 914 ssize_t ret = 0; ··· 935 935 } 936 936 937 937 ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos, 938 - int flags) 938 + rwf_t flags) 939 939 { 940 940 if (!file->f_op->write_iter) 941 941 return -EINVAL; ··· 944 944 EXPORT_SYMBOL(vfs_iter_write); 945 945 946 946 ssize_t vfs_readv(struct file *file, const struct iovec __user *vec, 947 - unsigned long vlen, loff_t *pos, int flags) 947 + unsigned long vlen, loff_t *pos, rwf_t flags) 948 948 { 949 949 struct iovec iovstack[UIO_FASTIOV]; 950 950 struct iovec *iov = iovstack; ··· 962 962 EXPORT_SYMBOL(vfs_readv); 963 963 964 964 ssize_t vfs_writev(struct file *file, const struct iovec __user *vec, 965 - unsigned long vlen, loff_t *pos, int flags) 965 + unsigned long vlen, loff_t *pos, rwf_t flags) 966 966 { 967 967 struct iovec iovstack[UIO_FASTIOV]; 968 968 struct iovec *iov = iovstack; ··· 981 981 EXPORT_SYMBOL(vfs_writev); 982 982 983 983 static ssize_t do_readv(unsigned long fd, const struct iovec __user *vec, 984 - unsigned long vlen, int flags) 984 + unsigned long vlen, rwf_t flags) 985 985 { 986 986 struct fd f = fdget_pos(fd); 987 987 ssize_t ret = -EBADF; ··· 1001 1001 } 1002 1002 1003 1003 static ssize_t do_writev(unsigned long fd, const struct iovec __user *vec, 1004 - unsigned long vlen, int flags) 1004 + unsigned long vlen, rwf_t flags) 1005 1005 { 1006 1006 struct fd f = fdget_pos(fd); 1007 1007 ssize_t ret = -EBADF; ··· 1027 1027 } 1028 1028 1029 1029 static ssize_t do_preadv(unsigned long fd, const struct iovec __user *vec, 1030 - unsigned long vlen, loff_t pos, int flags) 1030 + unsigned long vlen, loff_t pos, rwf_t flags) 1031 1031 { 1032 1032 struct fd f; 1033 1033 ssize_t ret = -EBADF; ··· 1050 1050 } 1051 1051 1052 1052 static ssize_t do_pwritev(unsigned long fd, const struct iovec __user *vec, 1053 - unsigned long vlen, loff_t pos, int flags) 1053 + unsigned long vlen, loff_t pos, rwf_t flags) 1054 1054 { 1055 1055 struct fd f; 1056 1056 ssize_t ret = -EBADF; ··· 1094 1094 1095 1095 SYSCALL_DEFINE6(preadv2, unsigned long, fd, const struct iovec __user *, vec, 1096 1096 unsigned long, vlen, unsigned long, pos_l, unsigned long, pos_h, 1097 - int, flags) 1097 + rwf_t, flags) 1098 1098 { 1099 1099 loff_t pos = pos_from_hilo(pos_h, pos_l); 1100 1100 ··· 1114 1114 1115 1115 SYSCALL_DEFINE6(pwritev2, unsigned long, fd, const struct iovec __user *, vec, 1116 1116 unsigned long, vlen, unsigned long, pos_l, unsigned long, pos_h, 1117 - int, flags) 1117 + rwf_t, flags) 1118 1118 { 1119 1119 loff_t pos = pos_from_hilo(pos_h, pos_l); 1120 1120 ··· 1127 1127 #ifdef CONFIG_COMPAT 1128 1128 static size_t compat_readv(struct file *file, 1129 1129 const struct compat_iovec __user *vec, 1130 - unsigned long vlen, loff_t *pos, int flags) 1130 + unsigned long vlen, loff_t *pos, rwf_t flags) 1131 1131 { 1132 1132 struct iovec iovstack[UIO_FASTIOV]; 1133 1133 struct iovec *iov = iovstack; ··· 1147 1147 1148 1148 static size_t do_compat_readv(compat_ulong_t fd, 1149 1149 const struct compat_iovec __user *vec, 1150 - compat_ulong_t vlen, int flags) 1150 + compat_ulong_t vlen, rwf_t flags) 1151 1151 { 1152 1152 struct fd f = fdget_pos(fd); 1153 1153 ssize_t ret; ··· 1173 1173 1174 1174 static long do_compat_preadv64(unsigned long fd, 1175 1175 const struct compat_iovec __user *vec, 1176 - unsigned long vlen, loff_t pos, int flags) 1176 + unsigned long vlen, loff_t pos, rwf_t flags) 1177 1177 { 1178 1178 struct fd f; 1179 1179 ssize_t ret; ··· 1211 1211 #ifdef __ARCH_WANT_COMPAT_SYS_PREADV64V2 1212 1212 COMPAT_SYSCALL_DEFINE5(preadv64v2, unsigned long, fd, 1213 1213 const struct compat_iovec __user *,vec, 1214 - unsigned long, vlen, loff_t, pos, int, flags) 1214 + unsigned long, vlen, loff_t, pos, rwf_t, flags) 1215 1215 { 1216 1216 return do_compat_preadv64(fd, vec, vlen, pos, flags); 1217 1217 } ··· 1220 1220 COMPAT_SYSCALL_DEFINE6(preadv2, compat_ulong_t, fd, 1221 1221 const struct compat_iovec __user *,vec, 1222 1222 compat_ulong_t, vlen, u32, pos_low, u32, pos_high, 1223 - int, flags) 1223 + rwf_t, flags) 1224 1224 { 1225 1225 loff_t pos = ((loff_t)pos_high << 32) | pos_low; 1226 1226 ··· 1232 1232 1233 1233 static size_t compat_writev(struct file *file, 1234 1234 const struct compat_iovec __user *vec, 1235 - unsigned long vlen, loff_t *pos, int flags) 1235 + unsigned long vlen, loff_t *pos, rwf_t flags) 1236 1236 { 1237 1237 struct iovec iovstack[UIO_FASTIOV]; 1238 1238 struct iovec *iov = iovstack; ··· 1254 1254 1255 1255 static size_t do_compat_writev(compat_ulong_t fd, 1256 1256 const struct compat_iovec __user* vec, 1257 - compat_ulong_t vlen, int flags) 1257 + compat_ulong_t vlen, rwf_t flags) 1258 1258 { 1259 1259 struct fd f = fdget_pos(fd); 1260 1260 ssize_t ret; ··· 1279 1279 1280 1280 static long do_compat_pwritev64(unsigned long fd, 1281 1281 const struct compat_iovec __user *vec, 1282 - unsigned long vlen, loff_t pos, int flags) 1282 + unsigned long vlen, loff_t pos, rwf_t flags) 1283 1283 { 1284 1284 struct fd f; 1285 1285 ssize_t ret; ··· 1317 1317 #ifdef __ARCH_WANT_COMPAT_SYS_PWRITEV64V2 1318 1318 COMPAT_SYSCALL_DEFINE5(pwritev64v2, unsigned long, fd, 1319 1319 const struct compat_iovec __user *,vec, 1320 - unsigned long, vlen, loff_t, pos, int, flags) 1320 + unsigned long, vlen, loff_t, pos, rwf_t, flags) 1321 1321 { 1322 1322 return do_compat_pwritev64(fd, vec, vlen, pos, flags); 1323 1323 } ··· 1325 1325 1326 1326 COMPAT_SYSCALL_DEFINE6(pwritev2, compat_ulong_t, fd, 1327 1327 const struct compat_iovec __user *,vec, 1328 - compat_ulong_t, vlen, u32, pos_low, u32, pos_high, int, flags) 1328 + compat_ulong_t, vlen, u32, pos_low, u32, pos_high, rwf_t, flags) 1329 1329 { 1330 1330 loff_t pos = ((loff_t)pos_high << 32) | pos_low; 1331 1331
+14 -2
include/linux/compat.h
··· 365 365 compat_ulong_t vlen, u32 pos_low, u32 pos_high); 366 366 asmlinkage ssize_t compat_sys_preadv2(compat_ulong_t fd, 367 367 const struct compat_iovec __user *vec, 368 - compat_ulong_t vlen, u32 pos_low, u32 pos_high, int flags); 368 + compat_ulong_t vlen, u32 pos_low, u32 pos_high, rwf_t flags); 369 369 asmlinkage ssize_t compat_sys_pwritev2(compat_ulong_t fd, 370 370 const struct compat_iovec __user *vec, 371 - compat_ulong_t vlen, u32 pos_low, u32 pos_high, int flags); 371 + compat_ulong_t vlen, u32 pos_low, u32 pos_high, rwf_t flags); 372 372 373 373 #ifdef __ARCH_WANT_COMPAT_SYS_PREADV64 374 374 asmlinkage long compat_sys_preadv64(unsigned long fd, ··· 380 380 asmlinkage long compat_sys_pwritev64(unsigned long fd, 381 381 const struct compat_iovec __user *vec, 382 382 unsigned long vlen, loff_t pos); 383 + #endif 384 + 385 + #ifdef __ARCH_WANT_COMPAT_SYS_PREADV64V2 386 + asmlinkage long compat_sys_readv64v2(unsigned long fd, 387 + const struct compat_iovec __user *vec, 388 + unsigned long vlen, loff_t pos, rwf_t flags); 389 + #endif 390 + 391 + #ifdef __ARCH_WANT_COMPAT_SYS_PWRITEV64V2 392 + asmlinkage long compat_sys_pwritev64v2(unsigned long fd, 393 + const struct compat_iovec __user *vec, 394 + unsigned long vlen, loff_t pos, rwf_t flags); 383 395 #endif 384 396 385 397 asmlinkage long compat_sys_lseek(unsigned int, compat_off_t, unsigned int);
+7 -5
include/linux/fs.h
··· 72 72 extern int sysctl_protected_symlinks; 73 73 extern int sysctl_protected_hardlinks; 74 74 75 + typedef __kernel_rwf_t rwf_t; 76 + 75 77 struct buffer_head; 76 78 typedef int (get_block_t)(struct inode *inode, sector_t iblock, 77 79 struct buffer_head *bh_result, int create); ··· 1760 1758 extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *); 1761 1759 extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *); 1762 1760 extern ssize_t vfs_readv(struct file *, const struct iovec __user *, 1763 - unsigned long, loff_t *, int); 1761 + unsigned long, loff_t *, rwf_t); 1764 1762 extern ssize_t vfs_writev(struct file *, const struct iovec __user *, 1765 - unsigned long, loff_t *, int); 1763 + unsigned long, loff_t *, rwf_t); 1766 1764 extern ssize_t vfs_copy_file_range(struct file *, loff_t , struct file *, 1767 1765 loff_t, size_t, unsigned int); 1768 1766 extern int vfs_clone_file_prep_inodes(struct inode *inode_in, loff_t pos_in, ··· 2876 2874 extern ssize_t generic_perform_write(struct file *, struct iov_iter *, loff_t); 2877 2875 2878 2876 ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos, 2879 - int flags); 2877 + rwf_t flags); 2880 2878 ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos, 2881 - int flags); 2879 + rwf_t flags); 2882 2880 2883 2881 /* fs/block_dev.c */ 2884 2882 extern ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to); ··· 3145 3143 return res; 3146 3144 } 3147 3145 3148 - static inline int kiocb_set_rw_flags(struct kiocb *ki, int flags) 3146 + static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags) 3149 3147 { 3150 3148 if (unlikely(flags & ~RWF_SUPPORTED)) 3151 3149 return -EOPNOTSUPP;
+2 -2
include/linux/syscalls.h
··· 579 579 unsigned long vlen, unsigned long pos_l, unsigned long pos_h); 580 580 asmlinkage long sys_preadv2(unsigned long fd, const struct iovec __user *vec, 581 581 unsigned long vlen, unsigned long pos_l, unsigned long pos_h, 582 - int flags); 582 + rwf_t flags); 583 583 asmlinkage long sys_pwritev(unsigned long fd, const struct iovec __user *vec, 584 584 unsigned long vlen, unsigned long pos_l, unsigned long pos_h); 585 585 asmlinkage long sys_pwritev2(unsigned long fd, const struct iovec __user *vec, 586 586 unsigned long vlen, unsigned long pos_l, unsigned long pos_h, 587 - int flags); 587 + rwf_t flags); 588 588 asmlinkage long sys_getcwd(char __user *buf, unsigned long size); 589 589 asmlinkage long sys_mkdir(const char __user *pathname, umode_t mode); 590 590 asmlinkage long sys_chdir(const char __user *filename);
+11 -10
include/uapi/linux/aio_abi.h
··· 28 28 #define __LINUX__AIO_ABI_H 29 29 30 30 #include <linux/types.h> 31 + #include <linux/fs.h> 31 32 #include <asm/byteorder.h> 32 33 33 34 typedef __kernel_ulong_t aio_context_t; ··· 63 62 __s64 res2; /* secondary result */ 64 63 }; 65 64 66 - #if defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN) 67 - #define PADDED(x,y) x, y 68 - #elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN) 69 - #define PADDED(x,y) y, x 70 - #else 71 - #error edit for your odd byteorder. 72 - #endif 73 - 74 65 /* 75 66 * we always use a 64bit off_t when communicating 76 67 * with userland. its up to libraries to do the ··· 72 79 struct iocb { 73 80 /* these are internal to the kernel/libc. */ 74 81 __u64 aio_data; /* data to be returned in event's data */ 75 - __u32 PADDED(aio_key, aio_rw_flags); 76 - /* the kernel sets aio_key to the req # */ 82 + 83 + #if defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN) 84 + __u32 aio_key; /* the kernel sets aio_key to the req # */ 85 + __kernel_rwf_t aio_rw_flags; /* RWF_* flags */ 86 + #elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN) 87 + __kernel_rwf_t aio_rw_flags; /* RWF_* flags */ 88 + __u32 aio_key; /* the kernel sets aio_key to the req # */ 89 + #else 90 + #error edit for your odd byteorder. 91 + #endif 77 92 78 93 /* common fields */ 79 94 __u16 aio_lio_opcode; /* see IOCB_CMD_ above */
+19 -7
include/uapi/linux/fs.h
··· 358 358 #define SYNC_FILE_RANGE_WRITE 2 359 359 #define SYNC_FILE_RANGE_WAIT_AFTER 4 360 360 361 - /* flags for preadv2/pwritev2: */ 362 - #define RWF_HIPRI 0x00000001 /* high priority request, poll if possible */ 363 - #define RWF_DSYNC 0x00000002 /* per-IO O_DSYNC */ 364 - #define RWF_SYNC 0x00000004 /* per-IO O_SYNC */ 365 - #define RWF_NOWAIT 0x00000008 /* per-IO, return -EAGAIN if operation would block */ 361 + /* 362 + * Flags for preadv2/pwritev2: 363 + */ 366 364 367 - #define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC |\ 368 - RWF_NOWAIT) 365 + typedef int __bitwise __kernel_rwf_t; 366 + 367 + /* high priority request, poll if possible */ 368 + #define RWF_HIPRI ((__force __kernel_rwf_t)0x00000001) 369 + 370 + /* per-IO O_DSYNC */ 371 + #define RWF_DSYNC ((__force __kernel_rwf_t)0x00000002) 372 + 373 + /* per-IO O_SYNC */ 374 + #define RWF_SYNC ((__force __kernel_rwf_t)0x00000004) 375 + 376 + /* per-IO, return -EAGAIN if operation would block */ 377 + #define RWF_NOWAIT ((__force __kernel_rwf_t)0x00000008) 378 + 379 + /* mask of flags supported by the kernel */ 380 + #define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT) 369 381 370 382 #endif /* _UAPI_LINUX_FS_H */