> On Wed, Sep 13, 2023 at 05:44:45PM +0800, cheng.lin130@xxxxxxxxxx wrote: > > From: Cheng Lin <cheng.lin130@xxxxxxxxxx> > > > > When abnormal drop_nlink are detected on the inode, > > shutdown filesystem, to avoid corruption propagation. > > > > Signed-off-by: Cheng Lin <cheng.lin130@xxxxxxxxxx> > > --- > > fs/xfs/xfs_inode.c | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > > index 9e62cc500..40cc106ae 100644 > > --- a/fs/xfs/xfs_inode.c > > +++ b/fs/xfs/xfs_inode.c > > @@ -919,6 +919,15 @@ xfs_droplink( > > xfs_trans_t *tp, > > xfs_inode_t *ip) > > { > > + > > + if (VFS_I(ip)->i_nlink == 0) { > > + xfs_alert(ip->i_mount, > > + "%s: Deleting inode %llu with no links.", > > + __func__, ip->i_ino); > > + tp->t_flags |= XFS_TRANS_DIRTY; > Marking the transaction dirty is not necessary. > Otherwise this seems fine. Another strategy: Set nlink to an invalid value(like XFS_NLINK_PINNED), and Complete this transaction before shutdown fs. To make sure nlink not be zero. If the nlink of a directory are zero, it may be cleaned up. Is that appropriate? > -Dave. > -- > Dave Chinner > david@xxxxxxxxxxxxx