On Wed, Apr 30, 2025 at 08:35:34AM +0000, Hans Holmberg wrote: > Allow read-only mounts on rtdevs and logdevs that are marked as > read-only and make sure those mounts can't be remounted read-write. > > Use the sb_open_mode helper to make sure that we don't try to open > devices with write access enabled for read-only mounts. > > Signed-off-by: Hans Holmberg <hans.holmberg@xxxxxxx> This looks good, thanks Hans! Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx> > --- > > Changes since v1: > - Switched to using the sb_open_mode helper that does exactly > what we want. > > fs/xfs/xfs_super.c | 21 ++++++++++++++++++--- > 1 file changed, 18 insertions(+), 3 deletions(-) > > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index b2dd0c0bf509..5e456a6073ca 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -380,10 +380,11 @@ xfs_blkdev_get( > struct file **bdev_filep) > { > int error = 0; > + blk_mode_t mode; > > - *bdev_filep = bdev_file_open_by_path(name, > - BLK_OPEN_READ | BLK_OPEN_WRITE | BLK_OPEN_RESTRICT_WRITES, > - mp->m_super, &fs_holder_ops); > + mode = sb_open_mode(mp->m_super->s_flags); > + *bdev_filep = bdev_file_open_by_path(name, mode, > + mp->m_super, &fs_holder_ops); > if (IS_ERR(*bdev_filep)) { > error = PTR_ERR(*bdev_filep); > *bdev_filep = NULL; > @@ -1969,6 +1970,20 @@ xfs_remount_rw( > struct xfs_sb *sbp = &mp->m_sb; > int error; > > + if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp && > + bdev_read_only(mp->m_logdev_targp->bt_bdev)) { > + xfs_warn(mp, > + "ro->rw transition prohibited by read-only logdev"); > + return -EACCES; > + } > + > + if (mp->m_rtdev_targp && > + bdev_read_only(mp->m_rtdev_targp->bt_bdev)) { > + xfs_warn(mp, > + "ro->rw transition prohibited by read-only rtdev"); > + return -EACCES; > + } > + > if (xfs_has_norecovery(mp)) { > xfs_warn(mp, > "ro->rw transition prohibited on norecovery mount"); > -- > 2.34.1 >