[PATCH v2 23/35] ubifs: set/clear MS_RDONLY properly in ubifs_remount
Artem Bityutskiy
dedekind1 at gmail.com
Mon Aug 24 00:02:50 PDT 2015
On Mon, 2015-08-24 at 09:29 +0800, Dongsheng Yang wrote:
> On 08/10/2015 10:46 AM, Dongsheng Yang wrote:
> > On 08/09/2015 05:17 AM, Richard Weinberger wrote:
> > > Am 30.07.2015 um 07:48 schrieb Dongsheng Yang:
> > > > We need to set or clear MS_RDONLY in remounting.
> > >
> > > Care to explain why?
> > > Does the quota subsystem need that information?
> > > If so, where?
> >
> > Ha, yes, you are right.
> >
> > When we remount to rw from ro, we need to call dquot_resume.
> > And dquot_resume will call vfs_load_quota_inode() which
> > will check the MS_RDONLY. If it's ro mode, will return
> > an -EROFS.
> >
> > And I know that we are using ->ro_mount in ubifs
> > to store the mounted mode. So we don't care about
> > the MS_RDONLY in ubifs. But why not to tell vfs we are in
> > ro or rw? Does it cause any problem?
>
> Hi Artem,
> I found there is a commit 2ef13294d to introduce
> ro_mount to ubifs. Yes, I see the reason to use ro_mount
> rather than MS_RDONLY in ubifs. But why we do not set
> MS_RDONLY to tell vfs it's in rdonly or not? Current
> quota depends on it. Does this patch cause some problem?
MS_RDONLY is set at mount time, then it can be changed when we re
-mount, and then UBIFS can change it when there was a critical error,
to ask VFS to stop writing more data to the file-system. See
'ubifs_ro_mode()'.
The custom ro_mount is the same as MS_RDONLY, but it does not change in
'ubifs_ro_mode()'. It preserves the last mount state before the error
happened - was it R/O or R/W.
Why is this needed?
UBIFS allocate different amount of resources depending on whether we
are R/O or R/W. We use less memory in R/O mode, for example.
At unmount time, we need to know whether we allocated the "RW" amount
of resources or the "RO" amount of resources.
We cannot use the MS_RDONLY flag to detect that, because it is changed
in 'ubifs_ro_mode()' unconditionally, so we lose the information.
Therefore we use the custom ro_mount flag - it tells us how we were
mounted, so we know how much resources to free.
Artem.
More information about the linux-mtd
mailing list