| To: | david@xxxxxxxxxxxxx, darrick.wong@xxxxxxxxxx |
|---|---|
| Subject: | [PATCH 42/71] xfs: cancel CoW reservations and clear inode reflink flag when freeing blocks |
| From: | "Darrick J. Wong" <darrick.wong@xxxxxxxxxx> |
| Date: | Thu, 25 Aug 2016 16:36:30 -0700 |
| Cc: | linux-xfs@xxxxxxxxxxxxxxx, xfs@xxxxxxxxxxx |
| Delivered-to: | xfs@xxxxxxxxxxx |
| In-reply-to: | <147216791538.867.12413509832420924168.stgit@xxxxxxxxxxxxxxxx> |
| References: | <147216791538.867.12413509832420924168.stgit@xxxxxxxxxxxxxxxx> |
| User-agent: | StGit/0.17.1-dirty |
When we're freeing blocks (truncate, punch, etc.), clear all CoW
reservations in the range being freed. If the file block count
drops to zero, also clear the inode reflink flag.
Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
---
fs/xfs/xfs_inode.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 0c25a76..8c971fd 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -49,6 +49,7 @@
#include "xfs_trans_priv.h"
#include "xfs_log.h"
#include "xfs_bmap_btree.h"
+#include "xfs_reflink.h"
kmem_zone_t *xfs_inode_zone;
@@ -1586,6 +1587,18 @@ xfs_itruncate_extents(
goto out;
}
+ /* Remove all pending CoW reservations. */
+ error = xfs_reflink_cancel_cow_blocks(ip, &tp, first_unmap_block,
+ last_block);
+ if (error)
+ goto out;
+
+ /*
+ * Clear the reflink flag if we truncated everything.
+ */
+ if (ip->i_d.di_nblocks == 0 && xfs_is_reflink_inode(ip))
+ ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK;
+
/*
* Always re-log the inode so that our permanent transaction can keep
* on rolling it forward in the log.
|
| Previous by Date: | [PATCH 41/71] xfs: implement CoW for directio writes, Darrick J. Wong |
|---|---|
| Next by Date: | [PATCH 43/71] xfs: cancel pending CoW reservations when destroying inodes, Darrick J. Wong |
| Previous by Thread: | [PATCH 41/71] xfs: implement CoW for directio writes, Darrick J. Wong |
| Next by Thread: | [PATCH 43/71] xfs: cancel pending CoW reservations when destroying inodes, Darrick J. Wong |
| Indexes: | [Date] [Thread] [Top] [All Lists] |