Linux-Next Archive on lore.kernel.org
 help / color / Atom feed
* linux-next: manual merge of the y2038 tree with the xfs tree
@ 2019-10-30  4:31 Stephen Rothwell
  0 siblings, 0 replies; only message in thread
From: Stephen Rothwell @ 2019-10-30  4:31 UTC (permalink / raw)
  To: Arnd Bergmann, Darrick J. Wong, David Chinner, linux-xfs
  Cc: Linux Next Mailing List, Linux Kernel Mailing List,
	Christoph Hellwig, Al Viro

[-- Attachment #1: Type: text/plain, Size: 5455 bytes --]

Hi all,

Today's linux-next merge of the y2038 tree got a conflict in:

  fs/compat_ioctl.c

between commit:

  837a6e7f5cdb ("fs: add generic UNRESVSP and ZERO_RANGE ioctl handlers")

from the xfs tree and commits:
  011da44bc5b6 ("compat: move FS_IOC_RESVSP_32 handling to fs/ioctl.c")
  37ecf8b20abd ("compat_sys_ioctl(): make parallel to do_vfs_ioctl()")

from the y2038 tree.

I fixed it up (see below and the added patch) and can carry the fix as
necessary. This is now fixed as far as linux-next is concerned, but any
non trivial conflicts should be mentioned to your upstream maintainer
when your tree is submitted for merging.  You may also want to consider
cooperating with the maintainer of the conflicting tree to minimise any
particularly complex conflicts.

From af387ea192196ffd141234e7e45bcfbc2be1a4fc Mon Sep 17 00:00:00 2001
From: Stephen Rothwell <sfr@canb.auug.org.au>
Date: Wed, 30 Oct 2019 15:05:29 +1100
Subject: [PATCH] fix up for "compat: move FS_IOC_RESVSP_32 handling to
 fs/ioctl.c"

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
---
 fs/ioctl.c             | 4 ++--
 include/linux/falloc.h | 7 +++++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/fs/ioctl.c b/fs/ioctl.c
index 455ad38c8610..2f5e4e5b97e1 100644
--- a/fs/ioctl.c
+++ b/fs/ioctl.c
@@ -495,7 +495,7 @@ int ioctl_preallocate(struct file *filp, int mode, void __user *argp)
 /* on ia32 l_start is on a 32-bit boundary */
 #if defined CONFIG_COMPAT && defined(CONFIG_X86_64)
 /* just account for different alignment */
-int compat_ioctl_preallocate(struct file *file,
+int compat_ioctl_preallocate(struct file *file, int mode,
 				struct space_resv_32 __user *argp)
 {
 	struct inode *inode = file_inode(file);
@@ -517,7 +517,7 @@ int compat_ioctl_preallocate(struct file *file,
 		return -EINVAL;
 	}
 
-	return vfs_fallocate(file, FALLOC_FL_KEEP_SIZE, sr.l_start, sr.l_len);
+	return vfs_fallocate(file, mode | FALLOC_FL_KEEP_SIZE, sr.l_start, sr.l_len);
 }
 #endif
 
diff --git a/include/linux/falloc.h b/include/linux/falloc.h
index 63c4f0d615bc..ab42b72424f0 100644
--- a/include/linux/falloc.h
+++ b/include/linux/falloc.h
@@ -45,10 +45,13 @@ struct space_resv_32 {
 	__s32		l_pad[4];	/* reserve area */
 };
 
-#define FS_IOC_RESVSP_32		_IOW ('X', 40, struct space_resv_32)
+#define FS_IOC_RESVSP_32	_IOW ('X', 40, struct space_resv_32)
+#define FS_IOC_UNRESVSP_32	_IOW ('X', 41, struct space_resv_32)
 #define FS_IOC_RESVSP64_32	_IOW ('X', 42, struct space_resv_32)
+#define FS_IOC_UNRESVSP64_32	_IOW ('X', 43, struct space_resv_32)
+#define FS_IOC_ZERO_RANGE_32	_IOW ('X', 57, struct space_resv_32)
 
-int compat_ioctl_preallocate(struct file *, struct space_resv_32 __user *);
+int compat_ioctl_preallocate(struct file *, int mode, struct space_resv_32 __user *);
 
 #endif
 
-- 
2.23.0

-- 
Cheers,
Stephen Rothwell

diff --cc fs/compat_ioctl.c
index 62e530814cef,9ae90d728c0f..000000000000
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
@@@ -1020,51 -165,38 +165,57 @@@ COMPAT_SYSCALL_DEFINE3(ioctl, unsigned 
  	case FIONBIO:
  	case FIOASYNC:
  	case FIOQSIZE:
- 		break;
- 
- #if defined(CONFIG_IA64) || defined(CONFIG_X86_64)
+ 	case FS_IOC_FIEMAP:
+ 	case FIGETBSZ:
+ 	case FICLONERANGE:
+ 	case FIDEDUPERANGE:
+ 		goto found_handler;
+ 	/*
+ 	 * The next group is the stuff handled inside file_ioctl().
+ 	 * For regular files these never reach ->ioctl(); for
+ 	 * devices, sockets, etc. they do and one (FIONREAD) is
+ 	 * even accepted in some cases.  In all those cases
+ 	 * argument has the same type, so we can handle these
+ 	 * here, shunting them towards do_vfs_ioctl().
+ 	 * ->compat_ioctl() will never see any of those.
+ 	 */
+ 	/* pointer argument, never actually handled by ->ioctl() */
+ 	case FIBMAP:
+ 		goto found_handler;
+ 	/* handled by some ->ioctl(); always a pointer to int */
+ 	case FIONREAD:
+ 		goto found_handler;
+ 	/* these two get messy on amd64 due to alignment differences */
+ #if defined(CONFIG_X86_64)
  	case FS_IOC_RESVSP_32:
  	case FS_IOC_RESVSP64_32:
 -		error = compat_ioctl_preallocate(f.file, compat_ptr(arg));
 +		error = compat_ioctl_preallocate(f.file, 0, compat_ptr(arg));
 +		goto out_fput;
 +	case FS_IOC_UNRESVSP_32:
 +	case FS_IOC_UNRESVSP64_32:
 +		error = compat_ioctl_preallocate(f.file, FALLOC_FL_PUNCH_HOLE,
 +				compat_ptr(arg));
 +		goto out_fput;
 +	case FS_IOC_ZERO_RANGE_32:
 +		error = compat_ioctl_preallocate(f.file, FALLOC_FL_ZERO_RANGE,
 +				compat_ptr(arg));
  		goto out_fput;
  #else
  	case FS_IOC_RESVSP:
  	case FS_IOC_RESVSP64:
 -		goto found_handler;
 +		error = ioctl_preallocate(f.file, 0, compat_ptr(arg));
 +		goto out_fput;
 +	case FS_IOC_UNRESVSP:
 +	case FS_IOC_UNRESVSP64:
 +		error = ioctl_preallocate(f.file, FALLOC_FL_PUNCH_HOLE,
 +				compat_ptr(arg));
 +		goto out_fput;
 +	case FS_IOC_ZERO_RANGE:
 +		error = ioctl_preallocate(f.file, FALLOC_FL_ZERO_RANGE,
 +				compat_ptr(arg));
 +		goto out_fput;
  #endif
  
- 	case FICLONE:
- 	case FICLONERANGE:
- 	case FIDEDUPERANGE:
- 	case FS_IOC_FIEMAP:
- 		goto do_ioctl;
- 
- 	case FIBMAP:
- 	case FIGETBSZ:
- 	case FIONREAD:
- 		if (S_ISREG(file_inode(f.file)->i_mode))
- 			break;
- 		/*FALL THROUGH*/
- 
  	default:
  		if (f.file->f_op->compat_ioctl) {
  			error = f.file->f_op->compat_ioctl(f.file, cmd, arg);

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, back to index

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-30  4:31 linux-next: manual merge of the y2038 tree with the xfs tree Stephen Rothwell

Linux-Next Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-next/0 linux-next/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-next linux-next/ https://lore.kernel.org/linux-next \
		linux-next@vger.kernel.org
	public-inbox-index linux-next

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-next


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git