On 28/04/2025 11:52, Carlos Maiolino wrote: > 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? BLK_OPEN_RESTRICT_WRITES disallows other writers to mounted devs, and I presume we want this for read-only mounts as well? > > > -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 >> >