On Fri, Apr 25, 2025 at 08:52:53AM +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. > > Signed-off-by: Hans Holmberg <hans.holmberg@xxxxxxx> > --- > > I will post a couple of xfstests to add coverage for these cases. > > fs/xfs/xfs_super.c | 24 +++++++++++++++++++++--- > 1 file changed, 21 insertions(+), 3 deletions(-) > > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index b2dd0c0bf509..d7ac1654bc80 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -380,10 +380,14 @@ 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 = BLK_OPEN_READ | BLK_OPEN_RESTRICT_WRITES; Does BLK_OPEN_RESTRICT_WRITES makes sense without BLK_OPEN_WRITE? Perhaps this should be OR'ed together with OPEN_WRITE below? -Carlos > + if (!xfs_is_readonly(mp)) > + mode |= BLK_OPEN_WRITE; > + > + *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 +1973,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 >