diff options
Diffstat (limited to 'fs/ubifs/io.c')
-rw-r--r-- | fs/ubifs/io.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/fs/ubifs/io.c b/fs/ubifs/io.c index bcf5a16f30bb..d82173182eeb 100644 --- a/fs/ubifs/io.c +++ b/fs/ubifs/io.c | |||
@@ -61,8 +61,8 @@ | |||
61 | */ | 61 | */ |
62 | void ubifs_ro_mode(struct ubifs_info *c, int err) | 62 | void ubifs_ro_mode(struct ubifs_info *c, int err) |
63 | { | 63 | { |
64 | if (!c->ro_media) { | 64 | if (!c->ro_error) { |
65 | c->ro_media = 1; | 65 | c->ro_error = 1; |
66 | c->no_chk_data_crc = 0; | 66 | c->no_chk_data_crc = 0; |
67 | c->vfs_sb->s_flags |= MS_RDONLY; | 67 | c->vfs_sb->s_flags |= MS_RDONLY; |
68 | ubifs_warn("switched to read-only mode, error %d", err); | 68 | ubifs_warn("switched to read-only mode, error %d", err); |
@@ -356,11 +356,11 @@ int ubifs_wbuf_sync_nolock(struct ubifs_wbuf *wbuf) | |||
356 | 356 | ||
357 | dbg_io("LEB %d:%d, %d bytes, jhead %s", | 357 | dbg_io("LEB %d:%d, %d bytes, jhead %s", |
358 | wbuf->lnum, wbuf->offs, wbuf->used, dbg_jhead(wbuf->jhead)); | 358 | wbuf->lnum, wbuf->offs, wbuf->used, dbg_jhead(wbuf->jhead)); |
359 | ubifs_assert(!(c->vfs_sb->s_flags & MS_RDONLY)); | ||
360 | ubifs_assert(!(wbuf->avail & 7)); | 359 | ubifs_assert(!(wbuf->avail & 7)); |
361 | ubifs_assert(wbuf->offs + c->min_io_size <= c->leb_size); | 360 | ubifs_assert(wbuf->offs + c->min_io_size <= c->leb_size); |
361 | ubifs_assert(!c->ro_media && !c->ro_mount); | ||
362 | 362 | ||
363 | if (c->ro_media) | 363 | if (c->ro_error) |
364 | return -EROFS; | 364 | return -EROFS; |
365 | 365 | ||
366 | ubifs_pad(c, wbuf->buf + wbuf->used, wbuf->avail); | 366 | ubifs_pad(c, wbuf->buf + wbuf->used, wbuf->avail); |
@@ -440,11 +440,12 @@ int ubifs_bg_wbufs_sync(struct ubifs_info *c) | |||
440 | { | 440 | { |
441 | int err, i; | 441 | int err, i; |
442 | 442 | ||
443 | ubifs_assert(!c->ro_media && !c->ro_mount); | ||
443 | if (!c->need_wbuf_sync) | 444 | if (!c->need_wbuf_sync) |
444 | return 0; | 445 | return 0; |
445 | c->need_wbuf_sync = 0; | 446 | c->need_wbuf_sync = 0; |
446 | 447 | ||
447 | if (c->ro_media) { | 448 | if (c->ro_error) { |
448 | err = -EROFS; | 449 | err = -EROFS; |
449 | goto out_timers; | 450 | goto out_timers; |
450 | } | 451 | } |
@@ -519,6 +520,7 @@ int ubifs_wbuf_write_nolock(struct ubifs_wbuf *wbuf, void *buf, int len) | |||
519 | ubifs_assert(!(wbuf->offs & 7) && wbuf->offs <= c->leb_size); | 520 | ubifs_assert(!(wbuf->offs & 7) && wbuf->offs <= c->leb_size); |
520 | ubifs_assert(wbuf->avail > 0 && wbuf->avail <= c->min_io_size); | 521 | ubifs_assert(wbuf->avail > 0 && wbuf->avail <= c->min_io_size); |
521 | ubifs_assert(mutex_is_locked(&wbuf->io_mutex)); | 522 | ubifs_assert(mutex_is_locked(&wbuf->io_mutex)); |
523 | ubifs_assert(!c->ro_media && !c->ro_mount); | ||
522 | 524 | ||
523 | if (c->leb_size - wbuf->offs - wbuf->used < aligned_len) { | 525 | if (c->leb_size - wbuf->offs - wbuf->used < aligned_len) { |
524 | err = -ENOSPC; | 526 | err = -ENOSPC; |
@@ -527,7 +529,7 @@ int ubifs_wbuf_write_nolock(struct ubifs_wbuf *wbuf, void *buf, int len) | |||
527 | 529 | ||
528 | cancel_wbuf_timer_nolock(wbuf); | 530 | cancel_wbuf_timer_nolock(wbuf); |
529 | 531 | ||
530 | if (c->ro_media) | 532 | if (c->ro_error) |
531 | return -EROFS; | 533 | return -EROFS; |
532 | 534 | ||
533 | if (aligned_len <= wbuf->avail) { | 535 | if (aligned_len <= wbuf->avail) { |
@@ -663,8 +665,9 @@ int ubifs_write_node(struct ubifs_info *c, void *buf, int len, int lnum, | |||
663 | buf_len); | 665 | buf_len); |
664 | ubifs_assert(lnum >= 0 && lnum < c->leb_cnt && offs >= 0); | 666 | ubifs_assert(lnum >= 0 && lnum < c->leb_cnt && offs >= 0); |
665 | ubifs_assert(offs % c->min_io_size == 0 && offs < c->leb_size); | 667 | ubifs_assert(offs % c->min_io_size == 0 && offs < c->leb_size); |
668 | ubifs_assert(!c->ro_media && !c->ro_mount); | ||
666 | 669 | ||
667 | if (c->ro_media) | 670 | if (c->ro_error) |
668 | return -EROFS; | 671 | return -EROFS; |
669 | 672 | ||
670 | ubifs_prepare_node(c, buf, len, 1); | 673 | ubifs_prepare_node(c, buf, len, 1); |
@@ -815,7 +818,8 @@ int ubifs_read_node(const struct ubifs_info *c, void *buf, int type, int len, | |||
815 | return 0; | 818 | return 0; |
816 | 819 | ||
817 | out: | 820 | out: |
818 | ubifs_err("bad node at LEB %d:%d", lnum, offs); | 821 | ubifs_err("bad node at LEB %d:%d, LEB mapping status %d", lnum, offs, |
822 | ubi_is_mapped(c->ubi, lnum)); | ||
819 | dbg_dump_node(c, buf); | 823 | dbg_dump_node(c, buf); |
820 | dbg_dump_stack(); | 824 | dbg_dump_stack(); |
821 | return -EINVAL; | 825 | return -EINVAL; |