diff options
author | Darrick J. Wong <darrick.wong@oracle.com> | 2016-10-03 09:11:25 -0700 |
---|---|---|
committer | Darrick J. Wong <darrick.wong@oracle.com> | 2016-10-04 11:05:43 -0700 |
commit | 6413a01420c2fbf03b3d059795f541caeb962e86 (patch) | |
tree | 314ad92ff0bd3db16bb6b934fcc6aef49a62a531 /fs/xfs/xfs_super.c | |
parent | 350a27a6a65cc5dd2ba1b220e8641993414816d2 (diff) |
xfs: create bmbt update intent log items
Create bmbt update intent/done log items to record redo information in
the log. Because we roll transactions multiple times for reflink
operations, we also have to track the status of the metadata updates
that will be recorded in the post-roll transactions in case we crash
before committing the final transaction. This mechanism enables log
recovery to finish what was already started.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'fs/xfs/xfs_super.c')
-rw-r--r-- | fs/xfs/xfs_super.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 62346223d04f..071bae0ec499 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -48,6 +48,7 @@ #include "xfs_ondisk.h" #include "xfs_rmap_item.h" #include "xfs_refcount_item.h" +#include "xfs_bmap_item.h" #include <linux/namei.h> #include <linux/init.h> @@ -1800,8 +1801,23 @@ xfs_init_zones(void) if (!xfs_cui_zone) goto out_destroy_cud_zone; + xfs_bud_zone = kmem_zone_init(sizeof(struct xfs_bud_log_item), + "xfs_bud_item"); + if (!xfs_bud_zone) + goto out_destroy_cui_zone; + + xfs_bui_zone = kmem_zone_init( + xfs_bui_log_item_sizeof(XFS_BUI_MAX_FAST_EXTENTS), + "xfs_bui_item"); + if (!xfs_bui_zone) + goto out_destroy_bud_zone; + return 0; + out_destroy_bud_zone: + kmem_zone_destroy(xfs_bud_zone); + out_destroy_cui_zone: + kmem_zone_destroy(xfs_cui_zone); out_destroy_cud_zone: kmem_zone_destroy(xfs_cud_zone); out_destroy_rui_zone: @@ -1848,6 +1864,8 @@ xfs_destroy_zones(void) * destroy caches. */ rcu_barrier(); + kmem_zone_destroy(xfs_bui_zone); + kmem_zone_destroy(xfs_bud_zone); kmem_zone_destroy(xfs_cui_zone); kmem_zone_destroy(xfs_cud_zone); kmem_zone_destroy(xfs_rui_zone); |