summaryrefslogtreecommitdiffstats
path: root/fs/iomap.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-06-01 09:03:06 -0700
committerDarrick J. Wong <darrick.wong@oracle.com>2018-06-01 18:37:32 -0700
commit19319b53210c6b89c375cf395c08f156cccd83ea (patch)
treed0379f5b72aea5bbd5cf8d20738daa9aca93ff54 /fs/iomap.c
parentb3751e6ab45a3b92da1e4acd42ada7b6a4122f2b (diff)
downloadlinux-19319b53210c6b89c375cf395c08f156cccd83ea.tar.bz2
iomap: inline data should be an iomap type, not a flag
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. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Diffstat (limited to 'fs/iomap.c')
-rw-r--r--fs/iomap.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/fs/iomap.c b/fs/iomap.c
index f2456d0d8ddd..df2652b0d85d 100644
--- a/fs/iomap.c
+++ b/fs/iomap.c
@@ -502,10 +502,13 @@ static int iomap_to_fiemap(struct fiemap_extent_info *fi,
case IOMAP_DELALLOC:
flags |= FIEMAP_EXTENT_DELALLOC | FIEMAP_EXTENT_UNKNOWN;
break;
+ case IOMAP_MAPPED:
+ break;
case IOMAP_UNWRITTEN:
flags |= FIEMAP_EXTENT_UNWRITTEN;
break;
- case IOMAP_MAPPED:
+ case IOMAP_INLINE:
+ flags |= FIEMAP_EXTENT_DATA_INLINE;
break;
}
@@ -513,8 +516,6 @@ static int iomap_to_fiemap(struct fiemap_extent_info *fi,
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,
@@ -1214,14 +1215,16 @@ static loff_t iomap_swapfile_activate_actor(struct inode *inode, loff_t pos,
struct iomap_swapfile_info *isi = data;
int error;
- /* No inline data. */
- if (iomap->flags & IOMAP_F_DATA_INLINE) {
+ switch (iomap->type) {
+ case IOMAP_MAPPED:
+ case IOMAP_UNWRITTEN:
+ /* Only real or unwritten extents. */
+ break;
+ case IOMAP_INLINE:
+ /* No inline data. */
pr_err("swapon: file is inline\n");
return -EINVAL;
- }
-
- /* Only real or unwritten extents. */
- if (iomap->type != IOMAP_MAPPED && iomap->type != IOMAP_UNWRITTEN) {
+ default:
pr_err("swapon: file has unallocated extents\n");
return -EINVAL;
}