From: sandeen@sandeen.net
To: xfs@oss.sgi.com
Cc: hch@infradead.org
Subject: [patch 03/11] Add compat handlers for data & rt growfs ioctls
Date: Tue, 18 Nov 2008 22:44:04 -0600 [thread overview]
Message-ID: <20081119044908.507467044@sandeen.net> (raw)
In-Reply-To: 20081119044401.573365619@sandeen.net
[-- Attachment #1: compat_ioctl_growfs --]
[-- Type: text/plain, Size: 3159 bytes --]
The args for XFS_IOC_FSGROWFSDATA and XFS_IOC_FSGROWFSRTA
have padding on the end on intel, so add arg copyin functions,
and then just call the native ioctl.
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
--
Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl32.c
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ioctl32.c
+++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl32.c
@@ -87,6 +87,28 @@ xfs_ioc_fsgeometry_v1_compat(
return 0;
}
+STATIC unsigned long
+xfs_ioctl32_growfs_data_copyin(unsigned long arg)
+{
+ compat_xfs_growfs_data_t __user *p32 = (void __user *)arg;
+ xfs_growfs_data_t __user *p = compat_alloc_user_space(sizeof(*p));
+
+ if (copy_in_user(p, p32, sizeof(*p32)))
+ return -XFS_ERROR(EFAULT);
+ return (unsigned long)p;
+}
+
+STATIC unsigned long
+xfs_ioctl32_growfs_rt_copyin(unsigned long arg)
+{
+ compat_xfs_growfs_rt_t __user *p32 = (void __user *)arg;
+ xfs_growfs_rt_t __user *p = compat_alloc_user_space(sizeof(*p));
+
+ if (copy_in_user(p, p32, sizeof(*p32)))
+ return -XFS_ERROR(EFAULT);
+ return (unsigned long)p;
+}
+
STATIC int
xfs_inumbers_fmt_compat(
void __user *ubuffer,
@@ -310,7 +332,14 @@ xfs_compat_ioctl(
case XFS_IOC_FSGEOMETRY_V1_32:
return xfs_ioc_fsgeometry_v1_compat(XFS_I(inode)->i_mount,
(void __user*)arg);
-
+ case XFS_IOC_FSGROWFSDATA_32:
+ arg = xfs_ioctl32_growfs_data_copyin(arg);
+ cmd = _NATIVE_IOC(cmd, struct xfs_growfs_data);
+ break;
+ case XFS_IOC_FSGROWFSRT_32:
+ arg = xfs_ioctl32_growfs_rt_copyin(arg);
+ cmd = _NATIVE_IOC(cmd, struct xfs_growfs_rt);
+ break;
#else /* These are handled fine if no alignment issues */
case XFS_IOC_ALLOCSP:
case XFS_IOC_FREESP:
@@ -322,7 +351,6 @@ xfs_compat_ioctl(
case XFS_IOC_UNRESVSP64:
case XFS_IOC_FSGEOMETRY_V1:
break;
-
/* xfs_bstat_t still has wrong u32 vs u64 alignment */
case XFS_IOC_SWAPEXT:
break;
Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl32.h
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ioctl32.h
+++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl32.h
@@ -159,6 +159,20 @@ typedef struct compat_xfs_inogrp {
__u64 xi_allocmask; /* mask of allocated inodes */
} __attribute__((packed)) compat_xfs_inogrp_t;
+/* These growfs input structures have padding on the end, so must translate */
+typedef struct compat_xfs_growfs_data {
+ __u64 newblocks; /* new data subvol size, fsblocks */
+ __u32 imaxpct; /* new inode space percentage limit */
+} __attribute__((packed)) compat_xfs_growfs_data_t;
+
+typedef struct compat_xfs_growfs_rt {
+ __u64 newblocks; /* new realtime size, fsblocks */
+ __u32 extsize; /* new realtime extent size, fsblocks */
+} __attribute__((packed)) compat_xfs_growfs_rt_t;
+
+#define XFS_IOC_FSGROWFSDATA_32 _IOW ('X', 110, struct compat_xfs_growfs_data)
+#define XFS_IOC_FSGROWFSRT_32 _IOW ('X', 112, struct compat_xfs_growfs_rt)
+
#endif /* BROKEN_X86_ALIGNMENT */
#endif /* __XFS_IOCTL32_H__ */
--
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2008-11-19 6:01 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-19 4:44 [patch 00/11] RFC: compat ioctl fixes/cleanups/additions sandeen
2008-11-19 4:44 ` [patch 01/11] Move compat ioctl structs & numbers into xfs_ioctl32.h sandeen
[not found] ` <20081119145941.GA13050@infradead.org>
2008-11-19 15:24 ` Eric Sandeen
2008-11-20 1:54 ` Eric Sandeen
2008-11-19 4:44 ` [patch 02/11] Fix the compat XFS_IOC_FSGEOMETRY_V1 ioctl sandeen
2008-11-19 4:44 ` sandeen [this message]
2008-11-19 4:44 ` [patch 04/11] Add compat handlers for swapext ioctl sandeen
2008-11-19 4:44 ` [patch 05/11] Make the bulkstat_one compat ioctl handling more sane sandeen
2008-11-19 4:44 ` [patch 06/11] Fix xfs_bulkstat_one size checks & error handling sandeen
2008-11-19 4:44 ` [patch 07/11] Fix compat XFS_IOC_FSBULKSTAT_SINGLE ioctl sandeen
2008-11-19 4:44 ` [patch 08/11] Hook up compat XFS_IOC_ATTRLIST_BY_HANDLE ioctl handler sandeen
2008-11-19 4:44 ` [patch 09/11] Hook up compat XFS_IOC_ATTRMULTI_BY_HANDLE " sandeen
[not found] ` <20081119151628.GI13050@infradead.org>
2008-11-19 15:30 ` Eric Sandeen
2008-11-19 4:44 ` [patch 10/11] Hook up compat XFS_IOC_FSSETDM_BY_HANDLE " sandeen
2008-11-19 4:44 ` [patch 11/11] Reorder xfs_ioctl32.c for some tidiness sandeen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081119044908.507467044@sandeen.net \
--to=sandeen@sandeen.net \
--cc=hch@infradead.org \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.