linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 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

* [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: [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

* 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

* 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-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-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 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

* 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-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 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 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 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-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-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

* [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

* [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).