* Hole Punching V3 @ 2010-11-18 1:46 Josef Bacik 2010-11-18 1:46 ` [PATCH 1/6] fs: add hole punching to fallocate Josef Bacik ` (6 more replies) 0 siblings, 7 replies; 22+ messages in thread From: Josef Bacik @ 2010-11-18 1:46 UTC (permalink / raw) To: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, joel.becker, jack This is version 3 of the hole punching series I've been posting. Not much has changed, the history is below V2->V3 -FALLOC_FL_PUNCH_HOLE must also have FALLOC_FL_KEEP_SIZE in order to work -formatting fixes V1->V2 -Hole punching doesn't change file size -Fixed the mode checks in ext4/btrfs/gfs2 so they do what they are supposed to I've updated my local copies of the xfsprogs patches I have to test this to use KEEP_SIZE and PUNCH_HOLE together, I'll post them after it looks like these patches are good to go, including the manpage update. The xfstest I wrote ran fine both on xfs and btrfs (failing on btrfs obviously). Thanks, Josef ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/6] fs: add hole punching to fallocate 2010-11-18 1:46 Hole Punching V3 Josef Bacik @ 2010-11-18 1:46 ` Josef Bacik 2010-11-18 23:43 ` Jan Kara 2010-11-18 1:46 ` [PATCH 2/6] XFS: handle hole punching via fallocate properly Josef Bacik ` (5 subsequent siblings) 6 siblings, 1 reply; 22+ messages in thread From: Josef Bacik @ 2010-11-18 1:46 UTC (permalink / raw) To: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, joel.becker, jack Hole punching has already been implemented by XFS and OCFS2, and has the potential to be implemented on both BTRFS and EXT4 so we need a generic way to get to this feature. The simplest way in my mind is to add FALLOC_FL_PUNCH_HOLE to fallocate() since it already looks like the normal fallocate() operation. I've tested this patch with XFS and BTRFS to make sure XFS did what it's supposed to do and that BTRFS failed like it was supposed to. Thank you, Signed-off-by: Josef Bacik <josef@redhat.com> --- fs/open.c | 7 ++++++- include/linux/falloc.h | 1 + 2 files changed, 7 insertions(+), 1 deletions(-) diff --git a/fs/open.c b/fs/open.c index 4197b9e..5b6ef7e 100644 --- a/fs/open.c +++ b/fs/open.c @@ -223,7 +223,12 @@ int do_fallocate(struct file *file, int mode, loff_t offset, loff_t len) return -EINVAL; /* Return error if mode is not supported */ - if (mode && !(mode & FALLOC_FL_KEEP_SIZE)) + if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE)) + return -EOPNOTSUPP; + + /* Punch hole must have keep size set */ + if ((mode & FALLOC_FL_PUNCH_HOLE) && + !(mode & FALLOC_FL_KEEP_SIZE)) return -EOPNOTSUPP; if (!(file->f_mode & FMODE_WRITE)) diff --git a/include/linux/falloc.h b/include/linux/falloc.h index 3c15510..73e0b62 100644 --- a/include/linux/falloc.h +++ b/include/linux/falloc.h @@ -2,6 +2,7 @@ #define _FALLOC_H_ #define FALLOC_FL_KEEP_SIZE 0x01 /* default is extend size */ +#define FALLOC_FL_PUNCH_HOLE 0x02 /* de-allocates range */ #ifdef __KERNEL__ -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH 1/6] fs: add hole punching to fallocate 2010-11-18 1:46 ` [PATCH 1/6] fs: add hole punching to fallocate Josef Bacik @ 2010-11-18 23:43 ` Jan Kara 0 siblings, 0 replies; 22+ messages in thread From: Jan Kara @ 2010-11-18 23:43 UTC (permalink / raw) To: Josef Bacik Cc: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, joel.becker, jack On Wed 17-11-10 20:46:15, Josef Bacik wrote: > Hole punching has already been implemented by XFS and OCFS2, and has the > potential to be implemented on both BTRFS and EXT4 so we need a generic way to > get to this feature. The simplest way in my mind is to add FALLOC_FL_PUNCH_HOLE > to fallocate() since it already looks like the normal fallocate() operation. > I've tested this patch with XFS and BTRFS to make sure XFS did what it's > supposed to do and that BTRFS failed like it was supposed to. Thank you, Looks nice now. Acked-by: Jan Kara <jack@suse.cz> Honza > > Signed-off-by: Josef Bacik <josef@redhat.com> > --- > fs/open.c | 7 ++++++- > include/linux/falloc.h | 1 + > 2 files changed, 7 insertions(+), 1 deletions(-) > > diff --git a/fs/open.c b/fs/open.c > index 4197b9e..5b6ef7e 100644 > --- a/fs/open.c > +++ b/fs/open.c > @@ -223,7 +223,12 @@ int do_fallocate(struct file *file, int mode, loff_t offset, loff_t len) > return -EINVAL; > > /* Return error if mode is not supported */ > - if (mode && !(mode & FALLOC_FL_KEEP_SIZE)) > + if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE)) > + return -EOPNOTSUPP; > + > + /* Punch hole must have keep size set */ > + if ((mode & FALLOC_FL_PUNCH_HOLE) && > + !(mode & FALLOC_FL_KEEP_SIZE)) > return -EOPNOTSUPP; > > if (!(file->f_mode & FMODE_WRITE)) > diff --git a/include/linux/falloc.h b/include/linux/falloc.h > index 3c15510..73e0b62 100644 > --- a/include/linux/falloc.h > +++ b/include/linux/falloc.h > @@ -2,6 +2,7 @@ > #define _FALLOC_H_ > > #define FALLOC_FL_KEEP_SIZE 0x01 /* default is extend size */ > +#define FALLOC_FL_PUNCH_HOLE 0x02 /* de-allocates range */ > > #ifdef __KERNEL__ > > -- > 1.6.6.1 > -- Jan Kara <jack@suse.cz> SUSE Labs, CR ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 2/6] XFS: handle hole punching via fallocate properly 2010-11-18 1:46 Hole Punching V3 Josef Bacik 2010-11-18 1:46 ` [PATCH 1/6] fs: add hole punching to fallocate Josef Bacik @ 2010-11-18 1:46 ` Josef Bacik 2010-11-18 1:46 ` [PATCH 3/6] Ocfs2: " Josef Bacik ` (4 subsequent siblings) 6 siblings, 0 replies; 22+ messages in thread From: Josef Bacik @ 2010-11-18 1:46 UTC (permalink / raw) To: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, joel.becker, jack This patch simply allows XFS to handle the hole punching flag in fallocate properly. I've tested this with a little program that does a bunch of random hole punching with FL_KEEP_SIZE and without it to make sure it does the right thing. Thanks, Signed-off-by: Josef Bacik <josef@redhat.com> --- fs/xfs/linux-2.6/xfs_iops.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 96107ef..07d2164 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c @@ -516,6 +516,7 @@ xfs_vn_fallocate( loff_t new_size = 0; xfs_flock64_t bf; xfs_inode_t *ip = XFS_I(inode); + int cmd = XFS_IOC_RESVSP; /* preallocation on directories not yet supported */ error = -ENODEV; @@ -528,6 +529,9 @@ xfs_vn_fallocate( xfs_ilock(ip, XFS_IOLOCK_EXCL); + if (mode & FALLOC_FL_PUNCH_HOLE) + cmd = XFS_IOC_UNRESVSP; + /* check the new inode size is valid before allocating */ if (!(mode & FALLOC_FL_KEEP_SIZE) && offset + len > i_size_read(inode)) { @@ -537,8 +541,7 @@ xfs_vn_fallocate( goto out_unlock; } - error = -xfs_change_file_space(ip, XFS_IOC_RESVSP, &bf, - 0, XFS_ATTR_NOLOCK); + error = -xfs_change_file_space(ip, cmd, &bf, 0, XFS_ATTR_NOLOCK); if (error) goto out_unlock; -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 3/6] Ocfs2: handle hole punching via fallocate properly 2010-11-18 1:46 Hole Punching V3 Josef Bacik 2010-11-18 1:46 ` [PATCH 1/6] fs: add hole punching to fallocate Josef Bacik 2010-11-18 1:46 ` [PATCH 2/6] XFS: handle hole punching via fallocate properly Josef Bacik @ 2010-11-18 1:46 ` Josef Bacik 2010-11-18 1:46 ` [PATCH 4/6] Ext4: fail if we try to use hole punch Josef Bacik ` (3 subsequent siblings) 6 siblings, 0 replies; 22+ messages in thread From: Josef Bacik @ 2010-11-18 1:46 UTC (permalink / raw) To: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, joel.becker, jack This patch just makes ocfs2 use its UNRESERVP ioctl when we get the hole punch flag in fallocate. I didn't test it, but it seems simple enough. Thanks, Acked-by: Jan Kara <jack@suse.cz> Acked-by: Joel Becker <joel.becker@oracle.com> Signed-off-by: Josef Bacik <josef@redhat.com> --- fs/ocfs2/file.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 77b4c04..ad23a18 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c @@ -1992,6 +1992,7 @@ static long ocfs2_fallocate(struct inode *inode, int mode, loff_t offset, struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); struct ocfs2_space_resv sr; int change_size = 1; + int cmd = OCFS2_IOC_RESVSP64; if (!ocfs2_writes_unwritten_extents(osb)) return -EOPNOTSUPP; @@ -2002,12 +2003,15 @@ static long ocfs2_fallocate(struct inode *inode, int mode, loff_t offset, if (mode & FALLOC_FL_KEEP_SIZE) change_size = 0; + if (mode & FALLOC_FL_PUNCH_HOLE) + cmd = OCFS2_IOC_UNRESVSP64; + sr.l_whence = 0; sr.l_start = (s64)offset; sr.l_len = (s64)len; - return __ocfs2_change_file_space(NULL, inode, offset, - OCFS2_IOC_RESVSP64, &sr, change_size); + return __ocfs2_change_file_space(NULL, inode, offset, cmd, &sr, + change_size); } int ocfs2_check_range_for_refcount(struct inode *inode, loff_t pos, -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-18 1:46 Hole Punching V3 Josef Bacik ` (2 preceding siblings ...) 2010-11-18 1:46 ` [PATCH 3/6] Ocfs2: " Josef Bacik @ 2010-11-18 1:46 ` Josef Bacik 2010-11-18 1:46 ` [PATCH 5/6] Btrfs: " Josef Bacik ` (2 subsequent siblings) 6 siblings, 0 replies; 22+ messages in thread From: Josef Bacik @ 2010-11-18 1:46 UTC (permalink / raw) To: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, joel.becker, jack Ext4 doesn't have the ability to punch holes yet, so make sure we return EOPNOTSUPP if we try to use hole punching through fallocate. This support can be added later. Thanks, Acked-by: Jan Kara <jack@suse.cz> Signed-off-by: Josef Bacik <josef@redhat.com> --- fs/ext4/extents.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 0554c48..35bca73 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -3622,6 +3622,10 @@ long ext4_fallocate(struct inode *inode, int mode, loff_t offset, loff_t len) struct ext4_map_blocks map; unsigned int credits, blkbits = inode->i_blkbits; + /* We only support the FALLOC_FL_KEEP_SIZE mode */ + if (mode && (mode != FALLOC_FL_KEEP_SIZE)) + return -EOPNOTSUPP; + /* * currently supporting (pre)allocate mode for extent-based * files _only_ -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 5/6] Btrfs: fail if we try to use hole punch 2010-11-18 1:46 Hole Punching V3 Josef Bacik ` (3 preceding siblings ...) 2010-11-18 1:46 ` [PATCH 4/6] Ext4: fail if we try to use hole punch Josef Bacik @ 2010-11-18 1:46 ` Josef Bacik 2010-11-18 1:46 ` [PATCH 6/6] Gfs2: " Josef Bacik 2011-01-03 21:57 ` Hole Punching V3 Josef Bacik 6 siblings, 0 replies; 22+ messages in thread From: Josef Bacik @ 2010-11-18 1:46 UTC (permalink / raw) To: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, joel.becker, jack Btrfs doesn't have the ability to punch holes yet, so make sure we return EOPNOTSUPP if we try to use hole punching through fallocate. This support can be added later. Thanks, Signed-off-by: Josef Bacik <josef@redhat.com> --- fs/btrfs/inode.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 78877d7..6f08892 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -6936,6 +6936,10 @@ static long btrfs_fallocate(struct inode *inode, int mode, alloc_start = offset & ~mask; alloc_end = (offset + len + mask) & ~mask; + /* We only support the FALLOC_FL_KEEP_SIZE mode */ + if (mode && (mode != FALLOC_FL_KEEP_SIZE)) + return -EOPNOTSUPP; + /* * wait for ordered IO before we have any locks. We'll loop again * below with the locks held. -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 6/6] Gfs2: fail if we try to use hole punch 2010-11-18 1:46 Hole Punching V3 Josef Bacik ` (4 preceding siblings ...) 2010-11-18 1:46 ` [PATCH 5/6] Btrfs: " Josef Bacik @ 2010-11-18 1:46 ` Josef Bacik 2011-01-03 21:57 ` Hole Punching V3 Josef Bacik 6 siblings, 0 replies; 22+ messages in thread From: Josef Bacik @ 2010-11-18 1:46 UTC (permalink / raw) To: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, joel.becker, jack Gfs2 doesn't have the ability to punch holes yet, so make sure we return EOPNOTSUPP if we try to use hole punching through fallocate. This support can be added later. Thanks, Signed-off-by: Josef Bacik <josef@redhat.com> --- fs/gfs2/ops_inode.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/fs/gfs2/ops_inode.c b/fs/gfs2/ops_inode.c index 12cbea7..65cb5f6 100644 --- a/fs/gfs2/ops_inode.c +++ b/fs/gfs2/ops_inode.c @@ -1439,6 +1439,10 @@ static long gfs2_fallocate(struct inode *inode, int mode, loff_t offset, loff_t next = (offset + len - 1) >> sdp->sd_sb.sb_bsize_shift; next = (next + 1) << sdp->sd_sb.sb_bsize_shift; + /* We only support the FALLOC_FL_KEEP_SIZE mode */ + if (mode && (mode != FALLOC_FL_KEEP_SIZE)) + return -EOPNOTSUPP; + offset = (offset >> sdp->sd_sb.sb_bsize_shift) << sdp->sd_sb.sb_bsize_shift; -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: Hole Punching V3 2010-11-18 1:46 Hole Punching V3 Josef Bacik ` (5 preceding siblings ...) 2010-11-18 1:46 ` [PATCH 6/6] Gfs2: " Josef Bacik @ 2011-01-03 21:57 ` Josef Bacik 6 siblings, 0 replies; 22+ messages in thread From: Josef Bacik @ 2011-01-03 21:57 UTC (permalink / raw) To: Josef Bacik Cc: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, joel.becker, jack, akpm, torvalds On Wed, Nov 17, 2010 at 08:46:14PM -0500, Josef Bacik wrote: > This is version 3 of the hole punching series I've been posting. Not much has > changed, the history is below > > V2->V3 > -FALLOC_FL_PUNCH_HOLE must also have FALLOC_FL_KEEP_SIZE in order to work > -formatting fixes > > V1->V2 > -Hole punching doesn't change file size > -Fixed the mode checks in ext4/btrfs/gfs2 so they do what they are supposed to > > I've updated my local copies of the xfsprogs patches I have to test this to use > KEEP_SIZE and PUNCH_HOLE together, I'll post them after it looks like these > patches are good to go, including the manpage update. The xfstest I wrote ran > fine both on xfs and btrfs (failing on btrfs obviously). Thanks, > I'd like to try and get this into the next merge window, it seems everybody is happy with it so far, any other comments? Provided everybody is ok with it, how would you like me to send it to you Linus? Would you prefer a pull request or will you just pull the patches off the mailinglist? Thanks, Josef ^ permalink raw reply [flat|nested] 22+ messages in thread
* Hole Punching V2 @ 2010-11-15 17:05 Josef Bacik 2010-11-15 17:05 ` [PATCH 4/6] Ext4: fail if we try to use hole punch Josef Bacik 0 siblings, 1 reply; 22+ messages in thread From: Josef Bacik @ 2010-11-15 17:05 UTC (permalink / raw) To: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel This is version 2 of the hole punching series I posted last week. The following things have changed -Hole punching doesn't change file size -Fixed the mode checks in ext4/btrfs/gfs2 so they do what they are supposed to I posted updates to xfstests and xfsprogs in order to test this new interface, and ran the test on xfs to make sure hole punching worked properly for xfs and I tested it on btrfs to make sure it failed properly. This series also adds support for doing hole punching to ocfs2, but I did not test this part of it, albiet it's an obvious fix so it should work fine. Thanks, Josef ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-15 17:05 Hole Punching V2 Josef Bacik @ 2010-11-15 17:05 ` Josef Bacik 2010-11-16 11:52 ` Jan Kara ` (2 more replies) 0 siblings, 3 replies; 22+ messages in thread From: Josef Bacik @ 2010-11-15 17:05 UTC (permalink / raw) To: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel Ext4 doesn't have the ability to punch holes yet, so make sure we return EOPNOTSUPP if we try to use hole punching through fallocate. This support can be added later. Thanks, Signed-off-by: Josef Bacik <josef@redhat.com> --- fs/ext4/extents.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 0554c48..35bca73 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -3622,6 +3622,10 @@ long ext4_fallocate(struct inode *inode, int mode, loff_t offset, loff_t len) struct ext4_map_blocks map; unsigned int credits, blkbits = inode->i_blkbits; + /* We only support the FALLOC_FL_KEEP_SIZE mode */ + if (mode && (mode != FALLOC_FL_KEEP_SIZE)) + return -EOPNOTSUPP; + /* * currently supporting (pre)allocate mode for extent-based * files _only_ -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-15 17:05 ` [PATCH 4/6] Ext4: fail if we try to use hole punch Josef Bacik @ 2010-11-16 11:52 ` Jan Kara 2010-11-16 12:25 ` Avi Kivity 2010-11-16 16:20 ` Pádraig Brady 2 siblings, 0 replies; 22+ messages in thread From: Jan Kara @ 2010-11-16 11:52 UTC (permalink / raw) To: Josef Bacik Cc: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel On Mon 15-11-10 12:05:21, Josef Bacik wrote: > Ext4 doesn't have the ability to punch holes yet, so make sure we return > EOPNOTSUPP if we try to use hole punching through fallocate. This support can > be added later. Thanks, > > Signed-off-by: Josef Bacik <josef@redhat.com> Acked-by: Jan Kara <jack@suse.cz> Honza > --- > fs/ext4/extents.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c > index 0554c48..35bca73 100644 > --- a/fs/ext4/extents.c > +++ b/fs/ext4/extents.c > @@ -3622,6 +3622,10 @@ long ext4_fallocate(struct inode *inode, int mode, loff_t offset, loff_t len) > struct ext4_map_blocks map; > unsigned int credits, blkbits = inode->i_blkbits; > > + /* We only support the FALLOC_FL_KEEP_SIZE mode */ > + if (mode && (mode != FALLOC_FL_KEEP_SIZE)) > + return -EOPNOTSUPP; > + > /* > * currently supporting (pre)allocate mode for extent-based > * files _only_ > -- > 1.6.6.1 > > -- > 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 -- Jan Kara <jack@suse.cz> SUSE Labs, CR ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-15 17:05 ` [PATCH 4/6] Ext4: fail if we try to use hole punch Josef Bacik 2010-11-16 11:52 ` Jan Kara @ 2010-11-16 12:25 ` Avi Kivity 2010-11-16 12:50 ` Josef Bacik 2010-11-16 16:20 ` Pádraig Brady 2 siblings, 1 reply; 22+ messages in thread From: Avi Kivity @ 2010-11-16 12:25 UTC (permalink / raw) To: Josef Bacik Cc: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel On 11/15/2010 07:05 PM, Josef Bacik wrote: > Ext4 doesn't have the ability to punch holes yet, so make sure we return > EOPNOTSUPP if we try to use hole punching through fallocate. This support can > be added later. Thanks, > Instead of teaching filesystems to fail if they don't support the capability, why don't supporting filesystems say so, allowing the fail code to be in common code? -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-16 12:25 ` Avi Kivity @ 2010-11-16 12:50 ` Josef Bacik 2010-11-16 13:07 ` Avi Kivity 0 siblings, 1 reply; 22+ messages in thread From: Josef Bacik @ 2010-11-16 12:50 UTC (permalink / raw) To: Avi Kivity Cc: Josef Bacik, david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel On Tue, Nov 16, 2010 at 02:25:35PM +0200, Avi Kivity wrote: > On 11/15/2010 07:05 PM, Josef Bacik wrote: >> Ext4 doesn't have the ability to punch holes yet, so make sure we return >> EOPNOTSUPP if we try to use hole punching through fallocate. This support can >> be added later. Thanks, >> > > Instead of teaching filesystems to fail if they don't support the > capability, why don't supporting filesystems say so, allowing the fail > code to be in common code? > There is no simple way to test if a filesystem supports hole punching or not so the check has to be done per fs. Thanks, Josef ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-16 12:50 ` Josef Bacik @ 2010-11-16 13:07 ` Avi Kivity 2010-11-16 16:05 ` Josef Bacik 2010-11-17 3:06 ` Ted Ts'o 0 siblings, 2 replies; 22+ messages in thread From: Avi Kivity @ 2010-11-16 13:07 UTC (permalink / raw) To: Josef Bacik Cc: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel On 11/16/2010 02:50 PM, Josef Bacik wrote: > On Tue, Nov 16, 2010 at 02:25:35PM +0200, Avi Kivity wrote: > > On 11/15/2010 07:05 PM, Josef Bacik wrote: > >> Ext4 doesn't have the ability to punch holes yet, so make sure we return > >> EOPNOTSUPP if we try to use hole punching through fallocate. This support can > >> be added later. Thanks, > >> > > > > Instead of teaching filesystems to fail if they don't support the > > capability, why don't supporting filesystems say so, allowing the fail > > code to be in common code? > > > > There is no simple way to test if a filesystem supports hole punching or not so > the check has to be done per fs. Thanks, Could put a flag word in superblock_operations. Filesystems which support punching (or other features) can enable it there. Or even have its own callback. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-16 13:07 ` Avi Kivity @ 2010-11-16 16:05 ` Josef Bacik 2010-11-16 20:47 ` Greg Freemyer 2010-11-17 3:06 ` Ted Ts'o 1 sibling, 1 reply; 22+ messages in thread From: Josef Bacik @ 2010-11-16 16:05 UTC (permalink / raw) To: Avi Kivity Cc: Josef Bacik, david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel On Tue, Nov 16, 2010 at 03:07:29PM +0200, Avi Kivity wrote: > On 11/16/2010 02:50 PM, Josef Bacik wrote: >> On Tue, Nov 16, 2010 at 02:25:35PM +0200, Avi Kivity wrote: >> > On 11/15/2010 07:05 PM, Josef Bacik wrote: >> >> Ext4 doesn't have the ability to punch holes yet, so make sure we return >> >> EOPNOTSUPP if we try to use hole punching through fallocate. This support can >> >> be added later. Thanks, >> >> >> > >> > Instead of teaching filesystems to fail if they don't support the >> > capability, why don't supporting filesystems say so, allowing the fail >> > code to be in common code? >> > >> >> There is no simple way to test if a filesystem supports hole punching or not so >> the check has to be done per fs. Thanks, > > Could put a flag word in superblock_operations. Filesystems which > support punching (or other features) can enable it there. > > Or even have its own callback. > Sure but then you have to do the same thing for every other flag you add to fallocate and then you have this huge mess of random flags just so you don't call into the filesystem. This way is a lesser of two evils I think. Thanks, Josef ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-16 16:05 ` Josef Bacik @ 2010-11-16 20:47 ` Greg Freemyer 0 siblings, 0 replies; 22+ messages in thread From: Greg Freemyer @ 2010-11-16 20:47 UTC (permalink / raw) To: Josef Bacik Cc: Avi Kivity, david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel On Tue, Nov 16, 2010 at 8:05 AM, Josef Bacik <josef@redhat.com> wrote: > On Tue, Nov 16, 2010 at 03:07:29PM +0200, Avi Kivity wrote: >> On 11/16/2010 02:50 PM, Josef Bacik wrote: >>> On Tue, Nov 16, 2010 at 02:25:35PM +0200, Avi Kivity wrote: >>> > On 11/15/2010 07:05 PM, Josef Bacik wrote: >>> >> Ext4 doesn't have the ability to punch holes yet, so make sure we return >>> >> EOPNOTSUPP if we try to use hole punching through fallocate. This support can >>> >> be added later. Thanks, >>> >> >>> > >>> > Instead of teaching filesystems to fail if they don't support the >>> > capability, why don't supporting filesystems say so, allowing the fail >>> > code to be in common code? >>> > >>> >>> There is no simple way to test if a filesystem supports hole punching or not so >>> the check has to be done per fs. Thanks, >> >> Could put a flag word in superblock_operations. Filesystems which >> support punching (or other features) can enable it there. >> >> Or even have its own callback. >> > > Sure but then you have to do the same thing for every other flag you add to > fallocate and then you have this huge mess of random flags just so you don't > call into the filesystem. This way is a lesser of two evils I think. Thanks, > > Josef I'm not a true kernel hacker, so my opinion is not critical but I find it hard to read / expand as > + /* We only support the FALLOC_FL_KEEP_SIZE mode */ > + if (mode && (mode != FALLOC_FL_KEEP_SIZE)) > + return -EOPNOTSUPP; How about: #define EXT4_FALLOC_MODES_SUPPORTED (FALLOC_FL_KEEP_SIZE) if (modes & ~EXT4_FALLOC_MODES_SUPPORTED) return -EOPNOTSUPP; Greg ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-16 13:07 ` Avi Kivity 2010-11-16 16:05 ` Josef Bacik @ 2010-11-17 3:06 ` Ted Ts'o 2010-11-17 6:31 ` Josef Bacik 1 sibling, 1 reply; 22+ messages in thread From: Ted Ts'o @ 2010-11-17 3:06 UTC (permalink / raw) To: Avi Kivity Cc: Josef Bacik, david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel > >There is no simple way to test if a filesystem supports hole punching or not so > >the check has to be done per fs. Thanks, > > Could put a flag word in superblock_operations. Filesystems which > support punching (or other features) can enable it there. No, it couldn't be in super_operations. It may vary on a per-inode basis for some file systems, such as ext4 (depending on whether the inode is extent-mapped or indirect-block mapped). So at least for ext4 we'd need to call into fallocate() function anyway, once we add support. I suppose if other file systems really want it, we could add a flag to the super block ops structure, so they don't have do the "do we support the punch" operation. I can go either way on that; although if we think the majority of file systems are going support punch in the long-term, then it might not be worth it to add such a flag. - Ted ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-17 3:06 ` Ted Ts'o @ 2010-11-17 6:31 ` Josef Bacik 0 siblings, 0 replies; 22+ messages in thread From: Josef Bacik @ 2010-11-17 6:31 UTC (permalink / raw) To: Ted Ts'o, Avi Kivity, Josef Bacik, david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel On Tue, Nov 16, 2010 at 10:06:40PM -0500, Ted Ts'o wrote: > > >There is no simple way to test if a filesystem supports hole punching or not so > > >the check has to be done per fs. Thanks, > > > > Could put a flag word in superblock_operations. Filesystems which > > support punching (or other features) can enable it there. > > No, it couldn't be in super_operations. It may vary on a per-inode > basis for some file systems, such as ext4 (depending on whether the > inode is extent-mapped or indirect-block mapped). > > So at least for ext4 we'd need to call into fallocate() function > anyway, once we add support. I suppose if other file systems really > want it, we could add a flag to the super block ops structure, so they > don't have do the "do we support the punch" operation. I can go > either way on that; although if we think the majority of file systems > are going support punch in the long-term, then it might not be worth > it to add such a flag. > Yeah thats alot of extra code just for one part of fallocate. Calling into ->fallocate is perfectly reasonable, especially since ext4 works the way it does, I'm going to leave things as they are. Thanks, Josef ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-15 17:05 ` [PATCH 4/6] Ext4: fail if we try to use hole punch Josef Bacik 2010-11-16 11:52 ` Jan Kara 2010-11-16 12:25 ` Avi Kivity @ 2010-11-16 16:20 ` Pádraig Brady 2010-11-16 16:33 ` Josef Bacik 2 siblings, 1 reply; 22+ messages in thread From: Pádraig Brady @ 2010-11-16 16:20 UTC (permalink / raw) To: Josef Bacik Cc: david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel On 15/11/10 17:05, Josef Bacik wrote: > Ext4 doesn't have the ability to punch holes yet, so make sure we return > EOPNOTSUPP if we try to use hole punching through fallocate. This support can > be added later. Thanks, > > Signed-off-by: Josef Bacik <josef@redhat.com> > --- > fs/ext4/extents.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c > index 0554c48..35bca73 100644 > --- a/fs/ext4/extents.c > +++ b/fs/ext4/extents.c > @@ -3622,6 +3622,10 @@ long ext4_fallocate(struct inode *inode, int mode, loff_t offset, loff_t len) > struct ext4_map_blocks map; > unsigned int credits, blkbits = inode->i_blkbits; > > + /* We only support the FALLOC_FL_KEEP_SIZE mode */ > + if (mode && (mode != FALLOC_FL_KEEP_SIZE)) > + return -EOPNOTSUPP; > + > /* > * currently supporting (pre)allocate mode for extent-based > * files _only_ So for older versions of ext4 or other filesystems, how do we know that fallocate(...,FALLOC_FL_PUNCH_HOLE) is not supported. I.E. how do we detect at runtime that the call succeeded and didn't just do a normal fallocate()? cheers, Pádraig. ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-16 16:20 ` Pádraig Brady @ 2010-11-16 16:33 ` Josef Bacik 2010-11-16 16:56 ` Pádraig Brady 0 siblings, 1 reply; 22+ messages in thread From: Josef Bacik @ 2010-11-16 16:33 UTC (permalink / raw) To: Pádraig Brady Cc: Josef Bacik, david, linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, cmm, cluster-devel, ocfs2-devel On Tue, Nov 16, 2010 at 04:20:43PM +0000, Pádraig Brady wrote: > On 15/11/10 17:05, Josef Bacik wrote: > > Ext4 doesn't have the ability to punch holes yet, so make sure we return > > EOPNOTSUPP if we try to use hole punching through fallocate. This support can > > be added later. Thanks, > > > > Signed-off-by: Josef Bacik <josef@redhat.com> > > --- > > fs/ext4/extents.c | 4 ++++ > > 1 files changed, 4 insertions(+), 0 deletions(-) > > > > diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c > > index 0554c48..35bca73 100644 > > --- a/fs/ext4/extents.c > > +++ b/fs/ext4/extents.c > > @@ -3622,6 +3622,10 @@ long ext4_fallocate(struct inode *inode, int mode, loff_t offset, loff_t len) > > struct ext4_map_blocks map; > > unsigned int credits, blkbits = inode->i_blkbits; > > > > + /* We only support the FALLOC_FL_KEEP_SIZE mode */ > > + if (mode && (mode != FALLOC_FL_KEEP_SIZE)) > > + return -EOPNOTSUPP; > > + > > /* > > * currently supporting (pre)allocate mode for extent-based > > * files _only_ > > So for older versions of ext4 or other filesystems, how do we know > that fallocate(...,FALLOC_FL_PUNCH_HOLE) is not supported. > I.E. how do we detect at runtime that the call succeeded > and didn't just do a normal fallocate()? > Older kernels won't accept FALLOC_FL_PUNCH_HOLE, so you'll get an error. Thanks, Josef ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-16 16:33 ` Josef Bacik @ 2010-11-16 16:56 ` Pádraig Brady 0 siblings, 0 replies; 22+ messages in thread From: Pádraig Brady @ 2010-11-16 16:56 UTC (permalink / raw) To: Josef Bacik; +Cc: linux-kernel On 16/11/10 16:33, Josef Bacik wrote: > On Tue, Nov 16, 2010 at 04:20:43PM +0000, Pádraig Brady wrote: >> >> So for older versions of ext4 or other filesystems, how do we know >> that fallocate(...,FALLOC_FL_PUNCH_HOLE) is not supported. >> I.E. how do we detect at runtime that the call succeeded >> and didn't just do a normal fallocate()? >> > > Older kernels won't accept FALLOC_FL_PUNCH_HOLE, so you'll get an error. > Thanks, Oops right. Older kernels filter FALLOC_FL_PUNCH_HOLE at a higher level in fs/open.c Whereas newer kernels will do it per file system. thanks, Pádraig. ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/6] fs: add hole punching to fallocate @ 2010-11-08 20:32 Josef Bacik 2010-11-08 20:32 ` [PATCH 4/6] Ext4: fail if we try to use hole punch Josef Bacik 0 siblings, 1 reply; 22+ messages in thread From: Josef Bacik @ 2010-11-08 20:32 UTC (permalink / raw) To: linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, joel.becker, cmm, cluster-devel Hole punching has already been implemented by XFS and OCFS2, and has the potential to be implemented on both BTRFS and EXT4 so we need a generic way to get to this feature. The simplest way in my mind is to add FALLOC_FL_PUNCH_HOLE to fallocate() since it already looks like the normal fallocate() operation. I've tested this patch with XFS and BTRFS to make sure XFS did what it's supposed to do and that BTRFS failed like it was supposed to. Thank you, Signed-off-by: Josef Bacik <josef@redhat.com> --- fs/open.c | 2 +- include/linux/falloc.h | 1 + 2 files changed, 2 insertions(+), 1 deletions(-) diff --git a/fs/open.c b/fs/open.c index 4197b9e..ab8dedf 100644 --- a/fs/open.c +++ b/fs/open.c @@ -223,7 +223,7 @@ int do_fallocate(struct file *file, int mode, loff_t offset, loff_t len) return -EINVAL; /* Return error if mode is not supported */ - if (mode && !(mode & FALLOC_FL_KEEP_SIZE)) + if (mode && (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))) return -EOPNOTSUPP; if (!(file->f_mode & FMODE_WRITE)) diff --git a/include/linux/falloc.h b/include/linux/falloc.h index 3c15510..851cba2 100644 --- a/include/linux/falloc.h +++ b/include/linux/falloc.h @@ -2,6 +2,7 @@ #define _FALLOC_H_ #define FALLOC_FL_KEEP_SIZE 0x01 /* default is extend size */ +#define FALLOC_FL_PUNCH_HOLE 0X02 /* de-allocates range */ #ifdef __KERNEL__ -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 4/6] Ext4: fail if we try to use hole punch 2010-11-08 20:32 [PATCH 1/6] fs: add hole punching to fallocate Josef Bacik @ 2010-11-08 20:32 ` Josef Bacik 0 siblings, 0 replies; 22+ messages in thread From: Josef Bacik @ 2010-11-08 20:32 UTC (permalink / raw) To: linux-kernel, linux-btrfs, linux-ext4, linux-fsdevel, xfs, joel.becker, cmm, cluster-devel Ext4 doesn't have the ability to punch holes yet, so make sure we return EOPNOTSUPP if we try to use hole punching through fallocate. This support can be added later. Thanks, Signed-off-by: Josef Bacik <josef@redhat.com> --- fs/ext4/extents.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 0554c48..9bff6bd 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -3622,6 +3622,10 @@ long ext4_fallocate(struct inode *inode, int mode, loff_t offset, loff_t len) struct ext4_map_blocks map; unsigned int credits, blkbits = inode->i_blkbits; + /* We only support the FALLOC_FL_KEEP_SIZE mode */ + if (mode && (mode & FALLOC_FL_KEEP_SIZE)) + return -EOPNOTSUPP; + /* * currently supporting (pre)allocate mode for extent-based * files _only_ -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
end of thread, other threads:[~2011-01-03 21:58 UTC | newest] Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2010-11-18 1:46 Hole Punching V3 Josef Bacik 2010-11-18 1:46 ` [PATCH 1/6] fs: add hole punching to fallocate Josef Bacik 2010-11-18 23:43 ` Jan Kara 2010-11-18 1:46 ` [PATCH 2/6] XFS: handle hole punching via fallocate properly Josef Bacik 2010-11-18 1:46 ` [PATCH 3/6] Ocfs2: " Josef Bacik 2010-11-18 1:46 ` [PATCH 4/6] Ext4: fail if we try to use hole punch Josef Bacik 2010-11-18 1:46 ` [PATCH 5/6] Btrfs: " Josef Bacik 2010-11-18 1:46 ` [PATCH 6/6] Gfs2: " Josef Bacik 2011-01-03 21:57 ` Hole Punching V3 Josef Bacik -- strict thread matches above, loose matches on Subject: below -- 2010-11-15 17:05 Hole Punching V2 Josef Bacik 2010-11-15 17:05 ` [PATCH 4/6] Ext4: fail if we try to use hole punch Josef Bacik 2010-11-16 11:52 ` Jan Kara 2010-11-16 12:25 ` Avi Kivity 2010-11-16 12:50 ` Josef Bacik 2010-11-16 13:07 ` Avi Kivity 2010-11-16 16:05 ` Josef Bacik 2010-11-16 20:47 ` Greg Freemyer 2010-11-17 3:06 ` Ted Ts'o 2010-11-17 6:31 ` Josef Bacik 2010-11-16 16:20 ` Pádraig Brady 2010-11-16 16:33 ` Josef Bacik 2010-11-16 16:56 ` Pádraig Brady 2010-11-08 20:32 [PATCH 1/6] fs: add hole punching to fallocate Josef Bacik 2010-11-08 20:32 ` [PATCH 4/6] Ext4: fail if we try to use hole punch Josef Bacik
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).