On Mon, Apr 28, 2025 at 11:51:24AM +0000, Hans Holmberg wrote: > 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? Thanks, it wasn't really clear to me what the purpose of RESTRICT_WRITES was, thanks for the clarification, this looks good to me: Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx> > > > > > > > -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 > >> > > >