Re: [PATCH] xfs: conditionally allow FS_XFLAG_REALTIME changes if S_DAX is set

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Aug 6, 2024 at 12:16 AM Darrick J. Wong <djwong@xxxxxxxxxx> wrote:
>
> From: Darrick J. Wong <djwong@xxxxxxxxxx>
>
> If a file has the S_DAX flag (aka fsdax access mode) set, we cannot
> allow users to change the realtime flag unless the datadev and rtdev
> both support fsdax access modes.  Even if there are no extents allocated
> to the file, the setattr thread could be racing with another thread
> that has already started down the write code paths.
>
> Fixes: ba23cba9b3bdc ("fs: allow per-device dax status checking for filesystems")
> Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx>
> ---
>  fs/xfs/xfs_ioctl.c |   11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
> index 4e933db75b12..6b13666d4e96 100644
> --- a/fs/xfs/xfs_ioctl.c
> +++ b/fs/xfs/xfs_ioctl.c
> @@ -483,6 +483,17 @@ xfs_ioctl_setattr_xflags(
>                 /* Can't change realtime flag if any extents are allocated. */
>                 if (ip->i_df.if_nextents || ip->i_delayed_blks)
>                         return -EINVAL;
> +
> +               /*
> +                * If S_DAX is enabled on this file, we can only switch the
> +                * device if both support fsdax.  We can't update S_DAX because
> +                * there might be other threads walking down the access paths.
> +                */
> +               if (IS_DAX(VFS_I(ip)) &&
> +                   (mp->m_ddev_targp->bt_daxdev == NULL ||
> +                    (mp->m_rtdev_targp &&
> +                     mp->m_rtdev_targp->bt_daxdev == NULL)))
> +                       return -EINVAL;
Any chance of  mp->m_ddev_targp == NULL  ?

>         }
>
>         if (rtflag) {
>





[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux