All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Gruenbacher <agruenba@redhat.com>
To: cluster-devel@redhat.com, Christoph Hellwig <hch@lst.de>
Cc: linux-fsdevel@vger.kernel.org
Subject: [PATCH v5 13/14] iomap: inline data should be an iomap type, not a flag
Date: Wed, 30 May 2018 11:48:41 +0200	[thread overview]
Message-ID: <20180530094842.13559-14-agruenba@redhat.com> (raw)
In-Reply-To: <20180530094842.13559-1-agruenba@redhat.com>

From: Christoph Hellwig <hch@lst.de>

Inline data is fundamentally different from our normal mapped case in that
it doesn't even have a block address.  So instead of having a flag for it
it should be an entirely separate iomap range type.

[Minimally adjusted to fit into the gfs2 iomap-write patch queue.]

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 fs/ext4/inline.c      | 4 ++--
 fs/gfs2/bmap.c        | 8 ++++----
 fs/iomap.c            | 8 ++++----
 include/linux/iomap.h | 2 +-
 4 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index 70cf4c7b268a..e1f00891ef95 100644
--- a/fs/ext4/inline.c
+++ b/fs/ext4/inline.c
@@ -1835,8 +1835,8 @@ int ext4_inline_data_iomap(struct inode *inode, struct iomap *iomap)
 	iomap->offset = 0;
 	iomap->length = min_t(loff_t, ext4_get_inline_size(inode),
 			      i_size_read(inode));
-	iomap->type = 0;
-	iomap->flags = IOMAP_F_DATA_INLINE;
+	iomap->type = IOMAP_INLINE;
+	iomap->flags = 0;
 
 out:
 	up_read(&EXT4_I(inode)->xattr_sem);
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index 69d87a38a209..c157af31dc56 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -754,8 +754,8 @@ static void gfs2_stuffed_iomap(struct inode *inode, struct iomap *iomap,
 		      sizeof(struct gfs2_dinode);
 	iomap->offset = 0;
 	iomap->length = length;
-	iomap->type = IOMAP_MAPPED;
-	iomap->flags = IOMAP_F_DATA_INLINE;
+	iomap->type = IOMAP_INLINE;
+	iomap->flags = 0;
 }
 
 /**
@@ -980,7 +980,7 @@ static int gfs2_iomap_begin_write(struct inode *inode, loff_t pos, loff_t length
 	if (ret)
 		goto out_release;
 
-	alloc_required = unstuff || iomap->type != IOMAP_MAPPED;
+	alloc_required = unstuff || iomap->type == IOMAP_HOLE;
 
 	if (alloc_required || gfs2_is_jdata(ip))
 		gfs2_write_calc_reserv(ip, iomap->length, &data_blocks, &ind_blocks);
@@ -1021,7 +1021,7 @@ static int gfs2_iomap_begin_write(struct inode *inode, loff_t pos, loff_t length
 			goto out_trans_end;
 	}
 
-	if (iomap->type != IOMAP_MAPPED) {
+	if (iomap->type == IOMAP_HOLE) {
 		ret = gfs2_iomap_alloc(inode, iomap, flags, &mp);
 		if (ret) {
 			gfs2_trans_end(sdp);
diff --git a/fs/iomap.c b/fs/iomap.c
index fcd3e26aadb7..819b6c56ecfe 100644
--- a/fs/iomap.c
+++ b/fs/iomap.c
@@ -522,22 +522,22 @@ static int iomap_to_fiemap(struct fiemap_extent_info *fi,
 	case IOMAP_HOLE:
 		/* skip holes */
 		return 0;
+	case IOMAP_MAPPED:
+		break;
 	case IOMAP_DELALLOC:
 		flags |= FIEMAP_EXTENT_DELALLOC | FIEMAP_EXTENT_UNKNOWN;
 		break;
 	case IOMAP_UNWRITTEN:
 		flags |= FIEMAP_EXTENT_UNWRITTEN;
 		break;
-	case IOMAP_MAPPED:
-		break;
+	case IOMAP_INLINE:
+		flags |= FIEMAP_EXTENT_DATA_INLINE;
 	}
 
 	if (iomap->flags & IOMAP_F_MERGED)
 		flags |= FIEMAP_EXTENT_MERGED;
 	if (iomap->flags & IOMAP_F_SHARED)
 		flags |= FIEMAP_EXTENT_SHARED;
-	if (iomap->flags & IOMAP_F_DATA_INLINE)
-		flags |= FIEMAP_EXTENT_DATA_INLINE;
 
 	return fiemap_fill_next_extent(fi, iomap->offset,
 			iomap->addr != IOMAP_NULL_ADDR ? iomap->addr : 0,
diff --git a/include/linux/iomap.h b/include/linux/iomap.h
index 423f7ecc1231..0a018a58d84e 100644
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@ -18,6 +18,7 @@ struct vm_fault;
 #define IOMAP_DELALLOC	0x02	/* delayed allocation blocks */
 #define IOMAP_MAPPED	0x03	/* blocks allocated at @addr */
 #define IOMAP_UNWRITTEN	0x04	/* blocks allocated at @addr in unwritten state */
+#define IOMAP_INLINE	0x05
 
 /*
  * Flags for all iomap mappings:
@@ -34,7 +35,6 @@ struct vm_fault;
  */
 #define IOMAP_F_MERGED		0x10	/* contains multiple blocks/extents */
 #define IOMAP_F_SHARED		0x20	/* block shared with another file */
-#define IOMAP_F_DATA_INLINE	0x40	/* data inline in the inode */
 
 /*
  * Magic value for addr:
-- 
2.17.0

WARNING: multiple messages have this Message-ID (diff)
From: Andreas Gruenbacher <agruenba@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH v5 13/14] iomap: inline data should be an iomap type, not a flag
Date: Wed, 30 May 2018 11:48:41 +0200	[thread overview]
Message-ID: <20180530094842.13559-14-agruenba@redhat.com> (raw)
In-Reply-To: <20180530094842.13559-1-agruenba@redhat.com>

From: Christoph Hellwig <hch@lst.de>

Inline data is fundamentally different from our normal mapped case in that
it doesn't even have a block address.  So instead of having a flag for it
it should be an entirely separate iomap range type.

[Minimally adjusted to fit into the gfs2 iomap-write patch queue.]

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 fs/ext4/inline.c      | 4 ++--
 fs/gfs2/bmap.c        | 8 ++++----
 fs/iomap.c            | 8 ++++----
 include/linux/iomap.h | 2 +-
 4 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index 70cf4c7b268a..e1f00891ef95 100644
--- a/fs/ext4/inline.c
+++ b/fs/ext4/inline.c
@@ -1835,8 +1835,8 @@ int ext4_inline_data_iomap(struct inode *inode, struct iomap *iomap)
 	iomap->offset = 0;
 	iomap->length = min_t(loff_t, ext4_get_inline_size(inode),
 			      i_size_read(inode));
-	iomap->type = 0;
-	iomap->flags = IOMAP_F_DATA_INLINE;
+	iomap->type = IOMAP_INLINE;
+	iomap->flags = 0;
 
 out:
 	up_read(&EXT4_I(inode)->xattr_sem);
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index 69d87a38a209..c157af31dc56 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -754,8 +754,8 @@ static void gfs2_stuffed_iomap(struct inode *inode, struct iomap *iomap,
 		      sizeof(struct gfs2_dinode);
 	iomap->offset = 0;
 	iomap->length = length;
-	iomap->type = IOMAP_MAPPED;
-	iomap->flags = IOMAP_F_DATA_INLINE;
+	iomap->type = IOMAP_INLINE;
+	iomap->flags = 0;
 }
 
 /**
@@ -980,7 +980,7 @@ static int gfs2_iomap_begin_write(struct inode *inode, loff_t pos, loff_t length
 	if (ret)
 		goto out_release;
 
-	alloc_required = unstuff || iomap->type != IOMAP_MAPPED;
+	alloc_required = unstuff || iomap->type == IOMAP_HOLE;
 
 	if (alloc_required || gfs2_is_jdata(ip))
 		gfs2_write_calc_reserv(ip, iomap->length, &data_blocks, &ind_blocks);
@@ -1021,7 +1021,7 @@ static int gfs2_iomap_begin_write(struct inode *inode, loff_t pos, loff_t length
 			goto out_trans_end;
 	}
 
-	if (iomap->type != IOMAP_MAPPED) {
+	if (iomap->type == IOMAP_HOLE) {
 		ret = gfs2_iomap_alloc(inode, iomap, flags, &mp);
 		if (ret) {
 			gfs2_trans_end(sdp);
diff --git a/fs/iomap.c b/fs/iomap.c
index fcd3e26aadb7..819b6c56ecfe 100644
--- a/fs/iomap.c
+++ b/fs/iomap.c
@@ -522,22 +522,22 @@ static int iomap_to_fiemap(struct fiemap_extent_info *fi,
 	case IOMAP_HOLE:
 		/* skip holes */
 		return 0;
+	case IOMAP_MAPPED:
+		break;
 	case IOMAP_DELALLOC:
 		flags |= FIEMAP_EXTENT_DELALLOC | FIEMAP_EXTENT_UNKNOWN;
 		break;
 	case IOMAP_UNWRITTEN:
 		flags |= FIEMAP_EXTENT_UNWRITTEN;
 		break;
-	case IOMAP_MAPPED:
-		break;
+	case IOMAP_INLINE:
+		flags |= FIEMAP_EXTENT_DATA_INLINE;
 	}
 
 	if (iomap->flags & IOMAP_F_MERGED)
 		flags |= FIEMAP_EXTENT_MERGED;
 	if (iomap->flags & IOMAP_F_SHARED)
 		flags |= FIEMAP_EXTENT_SHARED;
-	if (iomap->flags & IOMAP_F_DATA_INLINE)
-		flags |= FIEMAP_EXTENT_DATA_INLINE;
 
 	return fiemap_fill_next_extent(fi, iomap->offset,
 			iomap->addr != IOMAP_NULL_ADDR ? iomap->addr : 0,
diff --git a/include/linux/iomap.h b/include/linux/iomap.h
index 423f7ecc1231..0a018a58d84e 100644
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@ -18,6 +18,7 @@ struct vm_fault;
 #define IOMAP_DELALLOC	0x02	/* delayed allocation blocks */
 #define IOMAP_MAPPED	0x03	/* blocks allocated at @addr */
 #define IOMAP_UNWRITTEN	0x04	/* blocks allocated at @addr in unwritten state */
+#define IOMAP_INLINE	0x05
 
 /*
  * Flags for all iomap mappings:
@@ -34,7 +35,6 @@ struct vm_fault;
  */
 #define IOMAP_F_MERGED		0x10	/* contains multiple blocks/extents */
 #define IOMAP_F_SHARED		0x20	/* block shared with another file */
-#define IOMAP_F_DATA_INLINE	0x40	/* data inline in the inode */
 
 /*
  * Magic value for addr:
-- 
2.17.0



  parent reply	other threads:[~2018-05-30  9:49 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-30  9:48 [PATCH v5 00/14] gfs2 iomap write support Andreas Gruenbacher
2018-05-30  9:48 ` [Cluster-devel] " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 01/14] gfs2: Update find_metapath comment Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 02/14] gfs2: hole_size improvement Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 03/14] gfs2: gfs2_stuffed_write_end cleanup Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 04/14] gfs2: Remove ordered write mode handling from gfs2_trans_add_data Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 05/14] gfs2: Iomap cleanups and improvements Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 06/14] iomap: Add write_{begin,end} iomap operations Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] [PATCH v5 06/14] iomap: Add write_{begin, end} " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 07/14] iomap: Mark newly allocated buffer heads as new Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 08/14] gfs2: iomap buffered write support Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 09/14] gfs2: gfs2_extent_length cleanup Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 10/14] iomap: Complete partial direct I/O writes synchronously Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 11/14] gfs2: iomap direct I/O support Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] " Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 12/14] gfs2: Remove gfs2_write_{begin,end} Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] [PATCH v5 12/14] gfs2: Remove gfs2_write_{begin, end} Andreas Gruenbacher
2018-05-30  9:48 ` Andreas Gruenbacher [this message]
2018-05-30  9:48   ` [Cluster-devel] [PATCH v5 13/14] iomap: inline data should be an iomap type, not a flag Andreas Gruenbacher
2018-05-30  9:48 ` [PATCH v5 14/14] gfs2: Handle stuffed files in iomap_{begin,end} Andreas Gruenbacher
2018-05-30  9:48   ` [Cluster-devel] [PATCH v5 14/14] gfs2: Handle stuffed files in iomap_{begin, end} Andreas Gruenbacher
2018-05-30  9:57   ` [PATCH v5 14/14] gfs2: Handle stuffed files in iomap_{begin,end} Christoph Hellwig
2018-05-30  9:57     ` [Cluster-devel] [PATCH v5 14/14] gfs2: Handle stuffed files in iomap_{begin, end} Christoph Hellwig
2018-05-30 15:48 ` [Cluster-devel] [PATCH v5 00/14] gfs2 iomap write support Bob Peterson
2018-05-30 15:48   ` Bob Peterson

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=20180530094842.13559-14-agruenba@redhat.com \
    --to=agruenba@redhat.com \
    --cc=cluster-devel@redhat.com \
    --cc=hch@lst.de \
    --cc=linux-fsdevel@vger.kernel.org \
    /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.