Message ID | 20151215151325.15499.65499.stgit@localhost.localdomain (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Stanislav, [auto build test ERROR on v4.4-rc5] [also build test ERROR on next-20151215] url: https://github.com/0day-ci/linux/commits/Stanislav-Kinsburskiy/fcntl-allow-to-set-O_DIRECT-flag-on-pipe/20151216-000234 config: x86_64-randconfig-x011-12141150 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): fs/fcntl.c: In function 'setfl': >> fs/fcntl.c:55:7: error: implicit declaration of function 'IS_FIFO' [-Werror=implicit-function-declaration] if (!IS_FIFO(f->f_mode) && (arg & O_DIRECT)) { ^ >> fs/fcntl.c:55:15: error: 'f' undeclared (first use in this function) if (!IS_FIFO(f->f_mode) && (arg & O_DIRECT)) { ^ fs/fcntl.c:55:15: note: each undeclared identifier is reported only once for each function it appears in cc1: some warnings being treated as errors vim +/IS_FIFO +55 fs/fcntl.c 49 /* required for strict SunOS emulation */ 50 if (O_NONBLOCK != O_NDELAY) 51 if (arg & O_NDELAY) 52 arg |= O_NONBLOCK; 53 54 /* Pipe packetized mode is controlled by O_DIRECT flag */ > 55 if (!IS_FIFO(f->f_mode) && (arg & O_DIRECT)) { 56 if (!filp->f_mapping || !filp->f_mapping->a_ops || 57 !filp->f_mapping->a_ops->direct_IO) 58 return -EINVAL; --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Stanislav, [auto build test WARNING on v4.4-rc5] [also build test WARNING on next-20151215] url: https://github.com/0day-ci/linux/commits/Stanislav-Kinsburskiy/fcntl-allow-to-set-O_DIRECT-flag-on-pipe/20151216-000234 config: i386-randconfig-x009-12141102 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=i386 All warnings (new ones prefixed by >>): In file included from include/uapi/linux/stddef.h:1:0, from include/linux/stddef.h:4, from include/uapi/linux/posix_types.h:4, from include/uapi/linux/types.h:13, from include/linux/types.h:5, from include/linux/syscalls.h:70, from fs/fcntl.c:7: fs/fcntl.c: In function 'setfl': fs/fcntl.c:55:7: error: implicit declaration of function 'IS_FIFO' [-Werror=implicit-function-declaration] if (!IS_FIFO(f->f_mode) && (arg & O_DIRECT)) { ^ include/linux/compiler.h:147:28: note: in definition of macro '__trace_if' if (__builtin_constant_p((cond)) ? !!(cond) : \ ^ >> fs/fcntl.c:55:2: note: in expansion of macro 'if' if (!IS_FIFO(f->f_mode) && (arg & O_DIRECT)) { ^ fs/fcntl.c:55:15: error: 'f' undeclared (first use in this function) if (!IS_FIFO(f->f_mode) && (arg & O_DIRECT)) { ^ include/linux/compiler.h:147:28: note: in definition of macro '__trace_if' if (__builtin_constant_p((cond)) ? !!(cond) : \ ^ >> fs/fcntl.c:55:2: note: in expansion of macro 'if' if (!IS_FIFO(f->f_mode) && (arg & O_DIRECT)) { ^ fs/fcntl.c:55:15: note: each undeclared identifier is reported only once for each function it appears in if (!IS_FIFO(f->f_mode) && (arg & O_DIRECT)) { ^ include/linux/compiler.h:147:28: note: in definition of macro '__trace_if' if (__builtin_constant_p((cond)) ? !!(cond) : \ ^ >> fs/fcntl.c:55:2: note: in expansion of macro 'if' if (!IS_FIFO(f->f_mode) && (arg & O_DIRECT)) { ^ cc1: some warnings being treated as errors vim +/if +55 fs/fcntl.c 1 /* 2 * linux/fs/fcntl.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 > 7 #include <linux/syscalls.h> 8 #include <linux/init.h> 9 #include <linux/mm.h> 10 #include <linux/fs.h> 11 #include <linux/file.h> 12 #include <linux/fdtable.h> 13 #include <linux/capability.h> 14 #include <linux/dnotify.h> 15 #include <linux/slab.h> 16 #include <linux/module.h> 17 #include <linux/pipe_fs_i.h> 18 #include <linux/security.h> 19 #include <linux/ptrace.h> 20 #include <linux/signal.h> 21 #include <linux/rcupdate.h> 22 #include <linux/pid_namespace.h> 23 #include <linux/user_namespace.h> 24 #include <linux/shmem_fs.h> 25 26 #include <asm/poll.h> 27 #include <asm/siginfo.h> 28 #include <asm/uaccess.h> 29 30 #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME) 31 32 static int setfl(int fd, struct file * filp, unsigned long arg) 33 { 34 struct inode * inode = file_inode(filp); 35 int error = 0; 36 37 /* 38 * O_APPEND cannot be cleared if the file is marked as append-only 39 * and the file is open for write. 40 */ 41 if (((arg ^ filp->f_flags) & O_APPEND) && IS_APPEND(inode)) 42 return -EPERM; 43 44 /* O_NOATIME can only be set by the owner or superuser */ 45 if ((arg & O_NOATIME) && !(filp->f_flags & O_NOATIME)) 46 if (!inode_owner_or_capable(inode)) 47 return -EPERM; 48 49 /* required for strict SunOS emulation */ 50 if (O_NONBLOCK != O_NDELAY) 51 if (arg & O_NDELAY) 52 arg |= O_NONBLOCK; 53 54 /* Pipe packetized mode is controlled by O_DIRECT flag */ > 55 if (!IS_FIFO(f->f_mode) && (arg & O_DIRECT)) { 56 if (!filp->f_mapping || !filp->f_mapping->a_ops || 57 !filp->f_mapping->a_ops->direct_IO) 58 return -EINVAL; --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/fs/fcntl.c b/fs/fcntl.c index ee85cd4..4463a87 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c @@ -51,7 +51,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg) if (arg & O_NDELAY) arg |= O_NONBLOCK; - if (arg & O_DIRECT) { + /* Pipe packetized mode is controlled by O_DIRECT flag */ + if (!IS_FIFO(f->f_mode) && (arg & O_DIRECT)) { if (!filp->f_mapping || !filp->f_mapping->a_ops || !filp->f_mapping->a_ops->direct_IO) return -EINVAL;
With packetized mode for pipes, it's not possible to set O_DIRECT on pipe file via sys_fcntl, because of unsupported (by pipes) sanity checks. Ability to set this flag will be used by CRIU to migrate packetized pipes. Signed-off-by: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com> --- fs/fcntl.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html