mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 00:04:15 +08:00
xfs: cancel pending CoW reservations when destroying inodes
When destroying the inode, cancel all pending reservations in the CoW fork so that all the reserved blocks go back to the free pile. In theory this sort of cleanup is only needed to clean up after write errors. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
aa8968f227
commit
5e7e605c4d
@ -49,6 +49,7 @@
|
||||
#include "xfs_rmap_item.h"
|
||||
#include "xfs_refcount_item.h"
|
||||
#include "xfs_bmap_item.h"
|
||||
#include "xfs_reflink.h"
|
||||
|
||||
#include <linux/namei.h>
|
||||
#include <linux/init.h>
|
||||
@ -938,6 +939,7 @@ xfs_fs_destroy_inode(
|
||||
struct inode *inode)
|
||||
{
|
||||
struct xfs_inode *ip = XFS_I(inode);
|
||||
int error;
|
||||
|
||||
trace_xfs_destroy_inode(ip);
|
||||
|
||||
@ -945,6 +947,12 @@ xfs_fs_destroy_inode(
|
||||
XFS_STATS_INC(ip->i_mount, vn_rele);
|
||||
XFS_STATS_INC(ip->i_mount, vn_remove);
|
||||
|
||||
error = xfs_reflink_cancel_cow_range(ip, 0, NULLFILEOFF);
|
||||
if (error && !XFS_FORCED_SHUTDOWN(ip->i_mount))
|
||||
xfs_warn(ip->i_mount, "Error %d while evicting CoW blocks "
|
||||
"for inode %llu.",
|
||||
error, ip->i_ino);
|
||||
|
||||
xfs_inactive(ip);
|
||||
|
||||
ASSERT(XFS_FORCED_SHUTDOWN(ip->i_mount) || ip->i_delayed_blks == 0);
|
||||
|
Loading…
Reference in New Issue
Block a user