|
@@ -61,8 +61,8 @@
|
|
|
*/
|
|
|
void ubifs_ro_mode(struct ubifs_info *c, int err)
|
|
|
{
|
|
|
- if (!c->ro_media) {
|
|
|
- c->ro_media = 1;
|
|
|
+ if (!c->ro_error) {
|
|
|
+ c->ro_error = 1;
|
|
|
c->no_chk_data_crc = 0;
|
|
|
c->vfs_sb->s_flags |= MS_RDONLY;
|
|
|
ubifs_warn("switched to read-only mode, error %d", err);
|
|
@@ -359,8 +359,9 @@ int ubifs_wbuf_sync_nolock(struct ubifs_wbuf *wbuf)
|
|
|
ubifs_assert(!(c->vfs_sb->s_flags & MS_RDONLY));
|
|
|
ubifs_assert(!(wbuf->avail & 7));
|
|
|
ubifs_assert(wbuf->offs + c->min_io_size <= c->leb_size);
|
|
|
+ ubifs_assert(!c->ro_media);
|
|
|
|
|
|
- if (c->ro_media)
|
|
|
+ if (c->ro_error)
|
|
|
return -EROFS;
|
|
|
|
|
|
ubifs_pad(c, wbuf->buf + wbuf->used, wbuf->avail);
|
|
@@ -440,11 +441,12 @@ int ubifs_bg_wbufs_sync(struct ubifs_info *c)
|
|
|
{
|
|
|
int err, i;
|
|
|
|
|
|
+ ubifs_assert(!c->ro_media);
|
|
|
if (!c->need_wbuf_sync)
|
|
|
return 0;
|
|
|
c->need_wbuf_sync = 0;
|
|
|
|
|
|
- if (c->ro_media) {
|
|
|
+ if (c->ro_error) {
|
|
|
err = -EROFS;
|
|
|
goto out_timers;
|
|
|
}
|
|
@@ -519,6 +521,7 @@ int ubifs_wbuf_write_nolock(struct ubifs_wbuf *wbuf, void *buf, int len)
|
|
|
ubifs_assert(!(wbuf->offs & 7) && wbuf->offs <= c->leb_size);
|
|
|
ubifs_assert(wbuf->avail > 0 && wbuf->avail <= c->min_io_size);
|
|
|
ubifs_assert(mutex_is_locked(&wbuf->io_mutex));
|
|
|
+ ubifs_assert(!c->ro_media);
|
|
|
|
|
|
if (c->leb_size - wbuf->offs - wbuf->used < aligned_len) {
|
|
|
err = -ENOSPC;
|
|
@@ -527,7 +530,7 @@ int ubifs_wbuf_write_nolock(struct ubifs_wbuf *wbuf, void *buf, int len)
|
|
|
|
|
|
cancel_wbuf_timer_nolock(wbuf);
|
|
|
|
|
|
- if (c->ro_media)
|
|
|
+ if (c->ro_error)
|
|
|
return -EROFS;
|
|
|
|
|
|
if (aligned_len <= wbuf->avail) {
|
|
@@ -663,8 +666,9 @@ int ubifs_write_node(struct ubifs_info *c, void *buf, int len, int lnum,
|
|
|
buf_len);
|
|
|
ubifs_assert(lnum >= 0 && lnum < c->leb_cnt && offs >= 0);
|
|
|
ubifs_assert(offs % c->min_io_size == 0 && offs < c->leb_size);
|
|
|
+ ubifs_assert(!c->ro_media);
|
|
|
|
|
|
- if (c->ro_media)
|
|
|
+ if (c->ro_error)
|
|
|
return -EROFS;
|
|
|
|
|
|
ubifs_prepare_node(c, buf, len, 1);
|