From: Dave Chinner <david@fromorbit.com>
To: Ankit Jain <me@ankitjain.org>
Cc: mfasheh@suse.com, joel.becker@oracle.com,
linux-kernel@vger.kernel.org,
Christoph Hellwig <hch@infradead.org>,
xfs-masters@oss.sgi.com, Al Viro <viro@zeniv.linux.org.uk>,
linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com,
ocfs2-devel@oss.oracle.com
Subject: Re: [PATCH v2] fs: Add new pre-allocation ioctls to vfs for compatibility with legacy xfs ioctls
Date: Fri, 19 Dec 2008 15:37:44 +1100 [thread overview]
Message-ID: <20081219043744.GC17177@disturbed> (raw)
In-Reply-To: <494ABEBC.8060101@ankitjain.org>
On Fri, Dec 19, 2008 at 02:51:00AM +0530, Ankit Jain wrote:
> This patch adds ioctls to vfs for compatibility with legacy XFS
> pre-allocation ioctls (XFS_IOC_*RESVP*). The implementation
> effectively invokes sys_fallocate for the new ioctls.
> Note: These legacy ioctls are also implemented by OCFS2.
>
> Changes in v2:
> - Dropped the incorrect handling of *UNRESVSP* ioctl.
> - Made the ioctl and argument structure kernel only (__KERNEL__)
>
> Signed-off-by: Ankit Jain <me@ankitjain.org>
.....
> @@ -361,6 +393,9 @@ static int file_ioctl(struct file *filp, unsigned int cmd,
> return put_user(inode->i_sb->s_blocksize, p);
> case FIONREAD:
> return put_user(i_size_read(inode) - filp->f_pos, p);
> + case F_IOC_RESVSP:
> + case F_IOC_RESVSP64:
> + return ioctl_preallocate(filp, arg);
> }
>
> return vfs_ioctl(filp, cmd, arg);
Adding this here breaks XFS_IOC_RESVSP in subtle and interesting
ways.
XFS_IOC_RESVSP supports invisible I/O, and that means
XFS_IOC_RESVSP needs to be passed through to vfs_ioctl()
to vector to XFS to handle.
This happenѕ because:
> +struct space_resv {
> + __s16 l_type;
> + __s16 l_whence;
> + __s64 l_start;
> + __s64 l_len; /* len == 0 means until end of file */
> + __s32 l_sysid;
> + __u32 l_pid;
> + __s32 l_pad[4]; /* reserve area */
> +};
> +
> +#define F_IOC_RESVSP _IOW('X', 40, struct space_resv)
> +#define F_IOC_RESVSP64 _IOW('X', 42, struct space_resv)
Is the same as:
#define XFS_IOC_RESVSP _IOW ('X', 40, struct xfs_flock64)
#define XFS_IOC_RESVSP64 _IOW ('X', 42, struct xfs_flock64)
because:
typedef struct xfs_flock64 {
__s16 l_type;
__s16 l_whence;
__s64 l_start;
__s64 l_len; /* len == 0 means until end of file */
__s32 l_sysid;
__u32 l_pid;
__s32 l_pad[4]; /* reserve area */
} xfs_flock64_t;
is the same size as struct space_resv. Hence existing calls to
XFS_IOC_RESVSP will now vector incorrectly down the fallocate path
resulting in invisible operations will now be visible....
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
WARNING: multiple messages have this Message-ID (diff)
From: Dave Chinner <david@fromorbit.com>
To: Ankit Jain <me@ankitjain.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
mfasheh@suse.com, linux-kernel@vger.kernel.org,
joel.becker@oracle.com, Christoph Hellwig <hch@infradead.org>,
xfs-masters@oss.sgi.com, linux-fsdevel@vger.kernel.org,
xfs@oss.sgi.com, ocfs2-devel@oss.oracle.com
Subject: Re: [PATCH v2] fs: Add new pre-allocation ioctls to vfs for compatibility with legacy xfs ioctls
Date: Fri, 19 Dec 2008 15:37:44 +1100 [thread overview]
Message-ID: <20081219043744.GC17177@disturbed> (raw)
In-Reply-To: <494ABEBC.8060101@ankitjain.org>
On Fri, Dec 19, 2008 at 02:51:00AM +0530, Ankit Jain wrote:
> This patch adds ioctls to vfs for compatibility with legacy XFS
> pre-allocation ioctls (XFS_IOC_*RESVP*). The implementation
> effectively invokes sys_fallocate for the new ioctls.
> Note: These legacy ioctls are also implemented by OCFS2.
>
> Changes in v2:
> - Dropped the incorrect handling of *UNRESVSP* ioctl.
> - Made the ioctl and argument structure kernel only (__KERNEL__)
>
> Signed-off-by: Ankit Jain <me@ankitjain.org>
.....
> @@ -361,6 +393,9 @@ static int file_ioctl(struct file *filp, unsigned int cmd,
> return put_user(inode->i_sb->s_blocksize, p);
> case FIONREAD:
> return put_user(i_size_read(inode) - filp->f_pos, p);
> + case F_IOC_RESVSP:
> + case F_IOC_RESVSP64:
> + return ioctl_preallocate(filp, arg);
> }
>
> return vfs_ioctl(filp, cmd, arg);
Adding this here breaks XFS_IOC_RESVSP in subtle and interesting
ways.
XFS_IOC_RESVSP supports invisible I/O, and that means
XFS_IOC_RESVSP needs to be passed through to vfs_ioctl()
to vector to XFS to handle.
This happenѕ because:
> +struct space_resv {
> + __s16 l_type;
> + __s16 l_whence;
> + __s64 l_start;
> + __s64 l_len; /* len == 0 means until end of file */
> + __s32 l_sysid;
> + __u32 l_pid;
> + __s32 l_pad[4]; /* reserve area */
> +};
> +
> +#define F_IOC_RESVSP _IOW('X', 40, struct space_resv)
> +#define F_IOC_RESVSP64 _IOW('X', 42, struct space_resv)
Is the same as:
#define XFS_IOC_RESVSP _IOW ('X', 40, struct xfs_flock64)
#define XFS_IOC_RESVSP64 _IOW ('X', 42, struct xfs_flock64)
because:
typedef struct xfs_flock64 {
__s16 l_type;
__s16 l_whence;
__s64 l_start;
__s64 l_len; /* len == 0 means until end of file */
__s32 l_sysid;
__u32 l_pid;
__s32 l_pad[4]; /* reserve area */
} xfs_flock64_t;
is the same size as struct space_resv. Hence existing calls to
XFS_IOC_RESVSP will now vector incorrectly down the fallocate path
resulting in invisible operations will now be visible....
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
WARNING: multiple messages have this Message-ID (diff)
From: Dave Chinner <david@fromorbit.com>
To: Ankit Jain <me@ankitjain.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
mfasheh@suse.com, linux-kernel@vger.kernel.org,
joel.becker@oracle.com, Christoph Hellwig <hch@infradead.org>,
xfs-masters@oss.sgi.com, linux-fsdevel@vger.kernel.org,
xfs@oss.sgi.com, ocfs2-devel@oss.oracle.com
Subject: Re: [PATCH v2] fs: Add new pre-allocation ioctls to vfs for compatibility with legacy xfs ioctls
Date: Fri, 19 Dec 2008 15:37:44 +1100 [thread overview]
Message-ID: <20081219043744.GC17177@disturbed> (raw)
In-Reply-To: <494ABEBC.8060101@ankitjain.org>
On Fri, Dec 19, 2008 at 02:51:00AM +0530, Ankit Jain wrote:
> This patch adds ioctls to vfs for compatibility with legacy XFS
> pre-allocation ioctls (XFS_IOC_*RESVP*). The implementation
> effectively invokes sys_fallocate for the new ioctls.
> Note: These legacy ioctls are also implemented by OCFS2.
>
> Changes in v2:
> - Dropped the incorrect handling of *UNRESVSP* ioctl.
> - Made the ioctl and argument structure kernel only (__KERNEL__)
>
> Signed-off-by: Ankit Jain <me@ankitjain.org>
.....
> @@ -361,6 +393,9 @@ static int file_ioctl(struct file *filp, unsigned int cmd,
> return put_user(inode->i_sb->s_blocksize, p);
> case FIONREAD:
> return put_user(i_size_read(inode) - filp->f_pos, p);
> + case F_IOC_RESVSP:
> + case F_IOC_RESVSP64:
> + return ioctl_preallocate(filp, arg);
> }
>
> return vfs_ioctl(filp, cmd, arg);
Adding this here breaks XFS_IOC_RESVSP in subtle and interesting
ways.
XFS_IOC_RESVSP supports invisible I/O, and that means
XFS_IOC_RESVSP needs to be passed through to vfs_ioctl()
to vector to XFS to handle.
This happenѕ because:
> +struct space_resv {
> + __s16 l_type;
> + __s16 l_whence;
> + __s64 l_start;
> + __s64 l_len; /* len == 0 means until end of file */
> + __s32 l_sysid;
> + __u32 l_pid;
> + __s32 l_pad[4]; /* reserve area */
> +};
> +
> +#define F_IOC_RESVSP _IOW('X', 40, struct space_resv)
> +#define F_IOC_RESVSP64 _IOW('X', 42, struct space_resv)
Is the same as:
#define XFS_IOC_RESVSP _IOW ('X', 40, struct xfs_flock64)
#define XFS_IOC_RESVSP64 _IOW ('X', 42, struct xfs_flock64)
because:
typedef struct xfs_flock64 {
__s16 l_type;
__s16 l_whence;
__s64 l_start;
__s64 l_len; /* len == 0 means until end of file */
__s32 l_sysid;
__u32 l_pid;
__s32 l_pad[4]; /* reserve area */
} xfs_flock64_t;
is the same size as struct space_resv. Hence existing calls to
XFS_IOC_RESVSP will now vector incorrectly down the fallocate path
resulting in invisible operations will now be visible....
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
--
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
next prev parent reply other threads:[~2008-12-19 4:37 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-18 21:21 [PATCH v2] fs: Add new pre-allocation ioctls to vfs for compatibility with legacy xfs ioctls Ankit Jain
2008-12-18 21:21 ` Ankit Jain
2008-12-18 21:21 ` [Ocfs2-devel] " Ankit Jain
2008-12-19 4:37 ` Dave Chinner [this message]
2008-12-19 4:37 ` Dave Chinner
2008-12-19 4:37 ` Dave Chinner
2008-12-19 8:59 ` Christoph Hellwig
2008-12-19 9:00 ` [Ocfs2-devel] " Christoph Hellwig
2008-12-19 8:59 ` Christoph Hellwig
2008-12-19 8:59 ` Christoph Hellwig
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=20081219043744.GC17177@disturbed \
--to=david@fromorbit.com \
--cc=hch@infradead.org \
--cc=joel.becker@oracle.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=me@ankitjain.org \
--cc=mfasheh@suse.com \
--cc=ocfs2-devel@oss.oracle.com \
--cc=viro@zeniv.linux.org.uk \
--cc=xfs-masters@oss.sgi.com \
--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.