xfs: respect the stable writes flag on the RT device
commit 9c04138414c00ae61421f36ada002712c4bac94a upstream. Update the per-folio stable writes flag dependening on which device an inode resides on. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20231025141020.192413-5-hch@lst.de Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com> Acked-by: Chandan Babu R <chandanbabu@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
d7d5ed6536
commit
05955a703b
|
@ -569,6 +569,14 @@ extern void xfs_setup_inode(struct xfs_inode *ip);
|
|||
extern void xfs_setup_iops(struct xfs_inode *ip);
|
||||
extern void xfs_diflags_to_iflags(struct xfs_inode *ip, bool init);
|
||||
|
||||
static inline void xfs_update_stable_writes(struct xfs_inode *ip)
|
||||
{
|
||||
if (bdev_stable_writes(xfs_inode_buftarg(ip)->bt_bdev))
|
||||
mapping_set_stable_writes(VFS_I(ip)->i_mapping);
|
||||
else
|
||||
mapping_clear_stable_writes(VFS_I(ip)->i_mapping);
|
||||
}
|
||||
|
||||
/*
|
||||
* When setting up a newly allocated inode, we need to call
|
||||
* xfs_finish_inode_setup() once the inode is fully instantiated at
|
||||
|
|
|
@ -1149,6 +1149,14 @@ xfs_ioctl_setattr_xflags(
|
|||
ip->i_diflags2 = i_flags2;
|
||||
|
||||
xfs_diflags_to_iflags(ip, false);
|
||||
|
||||
/*
|
||||
* Make the stable writes flag match that of the device the inode
|
||||
* resides on when flipping the RT flag.
|
||||
*/
|
||||
if (rtflag != XFS_IS_REALTIME_INODE(ip) && S_ISREG(VFS_I(ip)->i_mode))
|
||||
xfs_update_stable_writes(ip);
|
||||
|
||||
xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG);
|
||||
xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
|
||||
XFS_STATS_INC(mp, xs_ig_attrchg);
|
||||
|
|
|
@ -1298,6 +1298,13 @@ xfs_setup_inode(
|
|||
gfp_mask = mapping_gfp_mask(inode->i_mapping);
|
||||
mapping_set_gfp_mask(inode->i_mapping, (gfp_mask & ~(__GFP_FS)));
|
||||
|
||||
/*
|
||||
* For real-time inodes update the stable write flags to that of the RT
|
||||
* device instead of the data device.
|
||||
*/
|
||||
if (S_ISREG(inode->i_mode) && XFS_IS_REALTIME_INODE(ip))
|
||||
xfs_update_stable_writes(ip);
|
||||
|
||||
/*
|
||||
* If there is no attribute fork no ACL can exist on this inode,
|
||||
* and it can't have any file capabilities attached to it either.
|
||||
|
|
Loading…
Reference in New Issue