aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2016-10-03 12:11:47 -0400
committerDarrick J. Wong <darrick.wong@oracle.com>2016-10-05 19:26:29 -0400
commit0e07c039bac5f6ce7e3bc512ab9efb4aaa76da94 (patch)
tree955c79cb97ffb167d03ed0fa82c8ebbc248b1d69
parent80de462e090c2c346ca6ec6344b326e81e8cef84 (diff)
xfs: add shared rmap map/unmap/convert log item types
Wire up some rmap log redo item type codes to map, unmap, or convert shared data block extents. The actual log item recovery comes in a later patch. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
-rw-r--r--fs/xfs/libxfs/xfs_log_format.h3
-rw-r--r--fs/xfs/xfs_rmap_item.c3
-rw-r--r--fs/xfs/xfs_trans_rmap.c9
3 files changed, 15 insertions, 0 deletions
diff --git a/fs/xfs/libxfs/xfs_log_format.h b/fs/xfs/libxfs/xfs_log_format.h
index 364ce6fcc213..083cdd6d6c28 100644
--- a/fs/xfs/libxfs/xfs_log_format.h
+++ b/fs/xfs/libxfs/xfs_log_format.h
@@ -635,8 +635,11 @@ struct xfs_map_extent {
635 635
636/* rmap me_flags: upper bits are flags, lower byte is type code */ 636/* rmap me_flags: upper bits are flags, lower byte is type code */
637#define XFS_RMAP_EXTENT_MAP 1 637#define XFS_RMAP_EXTENT_MAP 1
638#define XFS_RMAP_EXTENT_MAP_SHARED 2
638#define XFS_RMAP_EXTENT_UNMAP 3 639#define XFS_RMAP_EXTENT_UNMAP 3
640#define XFS_RMAP_EXTENT_UNMAP_SHARED 4
639#define XFS_RMAP_EXTENT_CONVERT 5 641#define XFS_RMAP_EXTENT_CONVERT 5
642#define XFS_RMAP_EXTENT_CONVERT_SHARED 6
640#define XFS_RMAP_EXTENT_ALLOC 7 643#define XFS_RMAP_EXTENT_ALLOC 7
641#define XFS_RMAP_EXTENT_FREE 8 644#define XFS_RMAP_EXTENT_FREE 8
642#define XFS_RMAP_EXTENT_TYPE_MASK 0xFF 645#define XFS_RMAP_EXTENT_TYPE_MASK 0xFF
diff --git a/fs/xfs/xfs_rmap_item.c b/fs/xfs/xfs_rmap_item.c
index 0432a459871c..19d817e3e1d9 100644
--- a/fs/xfs/xfs_rmap_item.c
+++ b/fs/xfs/xfs_rmap_item.c
@@ -441,8 +441,11 @@ xfs_rui_recover(
441 XFS_FSB_TO_DADDR(mp, rmap->me_startblock)); 441 XFS_FSB_TO_DADDR(mp, rmap->me_startblock));
442 switch (rmap->me_flags & XFS_RMAP_EXTENT_TYPE_MASK) { 442 switch (rmap->me_flags & XFS_RMAP_EXTENT_TYPE_MASK) {
443 case XFS_RMAP_EXTENT_MAP: 443 case XFS_RMAP_EXTENT_MAP:
444 case XFS_RMAP_EXTENT_MAP_SHARED:
444 case XFS_RMAP_EXTENT_UNMAP: 445 case XFS_RMAP_EXTENT_UNMAP:
446 case XFS_RMAP_EXTENT_UNMAP_SHARED:
445 case XFS_RMAP_EXTENT_CONVERT: 447 case XFS_RMAP_EXTENT_CONVERT:
448 case XFS_RMAP_EXTENT_CONVERT_SHARED:
446 case XFS_RMAP_EXTENT_ALLOC: 449 case XFS_RMAP_EXTENT_ALLOC:
447 case XFS_RMAP_EXTENT_FREE: 450 case XFS_RMAP_EXTENT_FREE:
448 op_ok = true; 451 op_ok = true;
diff --git a/fs/xfs/xfs_trans_rmap.c b/fs/xfs/xfs_trans_rmap.c
index 5a50ef881568..9ead064b5e90 100644
--- a/fs/xfs/xfs_trans_rmap.c
+++ b/fs/xfs/xfs_trans_rmap.c
@@ -48,12 +48,21 @@ xfs_trans_set_rmap_flags(
48 case XFS_RMAP_MAP: 48 case XFS_RMAP_MAP:
49 rmap->me_flags |= XFS_RMAP_EXTENT_MAP; 49 rmap->me_flags |= XFS_RMAP_EXTENT_MAP;
50 break; 50 break;
51 case XFS_RMAP_MAP_SHARED:
52 rmap->me_flags |= XFS_RMAP_EXTENT_MAP_SHARED;
53 break;
51 case XFS_RMAP_UNMAP: 54 case XFS_RMAP_UNMAP:
52 rmap->me_flags |= XFS_RMAP_EXTENT_UNMAP; 55 rmap->me_flags |= XFS_RMAP_EXTENT_UNMAP;
53 break; 56 break;
57 case XFS_RMAP_UNMAP_SHARED:
58 rmap->me_flags |= XFS_RMAP_EXTENT_UNMAP_SHARED;
59 break;
54 case XFS_RMAP_CONVERT: 60 case XFS_RMAP_CONVERT:
55 rmap->me_flags |= XFS_RMAP_EXTENT_CONVERT; 61 rmap->me_flags |= XFS_RMAP_EXTENT_CONVERT;
56 break; 62 break;
63 case XFS_RMAP_CONVERT_SHARED:
64 rmap->me_flags |= XFS_RMAP_EXTENT_CONVERT_SHARED;
65 break;
57 case XFS_RMAP_ALLOC: 66 case XFS_RMAP_ALLOC:
58 rmap->me_flags |= XFS_RMAP_EXTENT_ALLOC; 67 rmap->me_flags |= XFS_RMAP_EXTENT_ALLOC;
59 break; 68 break;