All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josef Bacik <josef@redhat.com>
To: david@fromorbit.com, linux-kernel@vger.kernel.org,
	linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, cmm@us.ibm.com,
	cluster-dev
Subject: [PATCH 1/6] fs: add hole punching to fallocate
Date: Wed, 17 Nov 2010 20:46:15 -0500	[thread overview]
Message-ID: <1290044780-2902-2-git-send-email-josef@redhat.com> (raw)
In-Reply-To: <1290044780-2902-1-git-send-email-josef@redhat.com>

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


WARNING: multiple messages have this Message-ID (diff)
From: Josef Bacik <josef@redhat.com>
To: david@fromorbit.com, linux-kernel@vger.kernel.org,
	linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, cmm@us.ibm.com,
	cluster-devel@redhat.com, joel.becker@oracle.com, jack@suse.cz
Subject: [PATCH 1/6] fs: add hole punching to fallocate
Date: Wed, 17 Nov 2010 20:46:15 -0500	[thread overview]
Message-ID: <1290044780-2902-2-git-send-email-josef@redhat.com> (raw)
In-Reply-To: <1290044780-2902-1-git-send-email-josef@redhat.com>

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


WARNING: multiple messages have this Message-ID (diff)
From: Josef Bacik <josef@redhat.com>
To: david@fromorbit.com, linux-kernel@vger.kernel.org,
	linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, cmm@us.ibm.com,
	cluster-devel@redhat.com, joel.becker@oracle.com, jack@suse.cz
Subject: [PATCH 1/6] fs: add hole punching to fallocate
Date: Wed, 17 Nov 2010 20:46:15 -0500	[thread overview]
Message-ID: <1290044780-2902-2-git-send-email-josef@redhat.com> (raw)
In-Reply-To: <1290044780-2902-1-git-send-email-josef@redhat.com>

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

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2010-11-18  1:46 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-18  1:46 Hole Punching V3 Josef Bacik
2010-11-18  1:46 ` Josef Bacik
2010-11-18  1:46 ` Josef Bacik
2010-11-18  1:46 ` Josef Bacik [this message]
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 23:43   ` Jan Kara
2010-11-18 23:43     ` [Cluster-devel] " Jan Kara
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   ` Josef Bacik
2010-11-18  1:46   ` Josef Bacik
2010-11-18  1:46 ` [PATCH 3/6] Ocfs2: " Josef Bacik
2010-11-18  1:46   ` 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
2010-11-18  1:46   ` Josef Bacik
2010-11-18  1:46   ` Josef Bacik
2010-11-18  1:46 ` [PATCH 5/6] Btrfs: " Josef Bacik
2010-11-18  1:46   ` Josef Bacik
2010-11-18  1:46   ` Josef Bacik
2010-11-18  1:46 ` [PATCH 6/6] Gfs2: " Josef Bacik
2010-11-18  1:46   ` Josef Bacik
2010-11-18  1:46   ` Josef Bacik
2011-01-03 21:57 ` Hole Punching V3 Josef Bacik
2011-01-03 21:57   ` 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 1/6] fs: add hole punching to fallocate Josef Bacik
2010-11-15 17:05   ` Josef Bacik
2010-11-15 17:05   ` Josef Bacik
2010-11-16 11:16   ` Jan Kara
2010-11-16 11:16     ` Jan Kara
2010-11-16 11:43     ` Jan Kara
2010-11-16 11:43       ` Jan Kara
2010-11-16 12:52       ` Josef Bacik
2010-11-16 12:52         ` Josef Bacik
2010-11-16 13:14         ` Jan Kara
2010-11-16 13:14           ` Jan Kara
2010-11-17  0:22           ` Andreas Dilger
2010-11-17  0:22             ` Andreas Dilger
2010-11-17  2:11             ` Dave Chinner
2010-11-17  2:11               ` Dave Chinner
2010-11-17  2:28               ` Josef Bacik
2010-11-17  2:28                 ` Josef Bacik
2010-11-17  2:34                 ` Josef Bacik
2010-11-17  2:34                   ` Josef Bacik
2010-11-17  9:30                   ` Andreas Dilger
2010-11-17  9:30                     ` Andreas Dilger
2010-11-17  9:19               ` Andreas Dilger
2010-11-17  9:19                 ` Andreas Dilger
2010-11-16 12:53     ` Josef Bacik
2010-11-16 12:53       ` Josef Bacik
2010-11-08 20:32 Josef Bacik
2010-11-08 20:32 ` Josef Bacik
2010-11-08 20:32 ` Josef Bacik
2010-11-09  1:12 ` Dave Chinner
2010-11-09  1:12   ` Dave Chinner
2010-11-09  2:10   ` Josef Bacik
2010-11-09  2:10     ` Josef Bacik
2010-11-09  3:30   ` Ted Ts'o
2010-11-09  3:30     ` Ted Ts'o
2010-11-09  4:42     ` Dave Chinner
2010-11-09  4:42       ` Dave Chinner
2010-11-09  4:42       ` Dave Chinner
2010-11-09 21:41       ` Ted Ts'o
2010-11-09 21:41         ` Ted Ts'o
2010-11-09 21:53         ` Jan Kara
2010-11-09 21:53           ` Jan Kara
2010-11-09 23:40         ` Dave Chinner
2010-11-09 23:40           ` Dave Chinner
2010-11-09 23:40           ` Dave Chinner
2010-11-09 23:40           ` Dave Chinner
2011-01-11 21:13           ` Lawrence Greenfield
2011-01-11 21:13             ` Lawrence Greenfield
2011-01-11 21:13             ` Lawrence Greenfield
2011-01-11 21:13             ` Lawrence Greenfield
2011-01-11 21:30             ` Ted Ts'o
2011-01-11 21:30               ` Ted Ts'o
2011-01-12 11:48               ` Dave Chinner
2011-01-12 11:48               ` Dave Chinner
2011-01-12 11:48                 ` Dave Chinner
2011-01-12 11:48                 ` Dave Chinner
2011-01-12 12:44             ` Dave Chinner
2011-01-12 12:44               ` Dave Chinner
2011-01-28 18:13               ` Ric Wheeler
2011-01-28 18:13                 ` Ric Wheeler
2010-11-09 20:51   ` Josef Bacik
2010-11-09 20:51     ` Josef Bacik

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=1290044780-2902-2-git-send-email-josef@redhat.com \
    --to=josef@redhat.com \
    --cc=cmm@us.ibm.com \
    --cc=david@fromorbit.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.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.