UBIFS: introduce new flags for RO mounts
Commit 2fde99cb55
"UBIFS: mark VFS SB RO too"
introduced regression. This commit made UBIFS set the 'MS_RDONLY' flag in the
VFS superblock when it switches to R/O mode due to an error. This was done
to make VFS show the R/O UBIFS flag in /proc/mounts.
However, several places in UBIFS relied on the 'MS_RDONLY' flag and assume this
flag can only change when we re-mount. For example, 'ubifs_put_super()'.
This patch introduces new UBIFS flag - 'c->ro_mount' which changes only when
we re-mount, and preserves the way UBIFS was originally mounted (R/W or R/O).
This allows us to de-initialize UBIFS cleanly in 'ubifs_put_super()'.
This patch also changes all 'ubifs_assert(!c->ro_media)' assertions to
'ubifs_assert(!c->ro_media && !c->ro_mount)', because we never should write
anything if the FS was mounter R/O.
All the places where we test for 'MS_RDONLY' flag in the VFS SB were changed
and now we test the 'c->ro_mount' flag instead, because it preserves the
original UBIFS mount type, unlike the 'MS_RDONLY' flag.
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This commit is contained in:
@@ -433,7 +433,7 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping,
|
||||
struct page *page;
|
||||
|
||||
ubifs_assert(ubifs_inode(inode)->ui_size == inode->i_size);
|
||||
ubifs_assert(!c->ro_media);
|
||||
ubifs_assert(!c->ro_media && !c->ro_mount);
|
||||
|
||||
if (unlikely(c->ro_error))
|
||||
return -EROFS;
|
||||
@@ -1440,8 +1440,7 @@ static int ubifs_vm_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vm
|
||||
|
||||
dbg_gen("ino %lu, pg %lu, i_size %lld", inode->i_ino, page->index,
|
||||
i_size_read(inode));
|
||||
ubifs_assert(!(inode->i_sb->s_flags & MS_RDONLY));
|
||||
ubifs_assert(!c->ro_media);
|
||||
ubifs_assert(!c->ro_media && !c->ro_mount);
|
||||
|
||||
if (unlikely(c->ro_error))
|
||||
return VM_FAULT_SIGBUS; /* -EROFS */
|
||||
|
Reference in New Issue
Block a user