Re: [PATCH] xfs: allow ro mounts if rtdev or logdev are read-only

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

 



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
> >>
> >
> 




[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