Subject: linux-next: build failure after merge of the block tree

From: Stephen Rothwell <[email-masked]>
Date: Mon, 6 Jan 2020 12:30:27 +1100

Hi all,

After merging the block tree, today's linux-next build (arm
multi_v7_defconfig) failed like this:

fs/open.c:977:12: error: conflicting types for 'build_open_flags'
  977 | inline int build_open_flags(const struct open_how *how,
      |            ^~~~~~~~~~~~~~~~
In file included from /home/sfr/next/next/fs/open.c:36:
fs/internal.h:127:12: note: previous declaration of 'build_open_flags' was here
  127 | extern int build_open_flags(int flags, umode_t mode, struct open_flags *op);
      |            ^~~~~~~~~~~~~~~~

Caused by commits

  4e9e15c9426e ("fs: make build_open_flags() available internally")
  3bba3e571bc8 ("io_uring: add support for IORING_OP_OPENAT")

interacting with commit

  0a51692d49ec ("open: introduce openat2(2) syscall")

from the vfs tree.

I have applied the following fix up patch for today:

From: Stephen Rothwell <[email-masked]>
Date: Fri, 20 Dec 2019 11:50:51 +1100
Subject: [PATCH] io_uring: fix up for "open: introduce openat2(2) syscall"

Signed-off-by: Stephen Rothwell <[email-masked]>
---
 fs/internal.h | 3 ++-
 fs/io_uring.c | 6 ++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/fs/internal.h b/fs/internal.h
index 166134be439f..dabf747c14fd 100644
--- a/fs/internal.h
+++ b/fs/internal.h
@@ -124,7 +124,8 @@ extern struct file *do_filp_open(int dfd, struct filename *pathname,
 		const struct open_flags *op);
 extern struct file *do_file_open_root(struct dentry *, struct vfsmount *,
 		const char *, const struct open_flags *);
-extern int build_open_flags(int flags, umode_t mode, struct open_flags *op);
+extern struct open_how build_open_how(int flags, umode_t mode);
+extern int build_open_flags(const struct open_how *how, struct open_flags *op);
 
 long do_sys_ftruncate(unsigned int fd, loff_t length, int small);
 long do_faccessat(int dfd, const char __user *filename, int mode);
diff --git a/fs/io_uring.c b/fs/io_uring.c
index c770c2c0eb52..60ebdea1d8c6 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -2476,16 +2476,18 @@ static int io_openat(struct io_kiocb *req, struct io_kiocb **nxt,
 		     bool force_nonblock)
 {
 	struct open_flags op;
+	struct open_how how;
 	struct file *file;
 	int ret;
 
-	ret = build_open_flags(req->open.flags, req->open.mode, &op);
+	how = build_open_how(req->open.flags, req->open.mode);
+	ret = build_open_flags(&how, &op);
 	if (ret)
 		goto err;
 	if (force_nonblock)
 		op.lookup_flags |= LOOKUP_NONBLOCK;
 
-	ret = get_unused_fd_flags(req->open.flags);
+	ret = get_unused_fd_flags(how.flags);
 	if (ret < 0)
 		goto err;
 
-- 
2.24.0

-- 
Cheers,
Stephen Rothwell