diff options
author | Adrian Hunter <ext-adrian.hunter@nokia.com> | 2009-01-29 05:59:33 -0500 |
---|---|---|
committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2009-01-29 09:19:36 -0500 |
commit | b466f17d780c5b72427f36aef22ecdec9f1d0689 (patch) | |
tree | 09346513db7a7563f9a79ec0e6ec56b8536fabe9 /fs/ubifs/gc.c | |
parent | 227c75c91dbfa037d109ab7ef45b7f5ba9cab6d0 (diff) |
UBIFS: remount ro fixes
- preserve the idx_gc list - it will be needed in the same
state, should UBIFS be remounted rw again
- prevent remounting ro if we have switched to read only
mode (due to a fatal error)
Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Diffstat (limited to 'fs/ubifs/gc.c')
-rw-r--r-- | fs/ubifs/gc.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/fs/ubifs/gc.c b/fs/ubifs/gc.c index bad3339a800d..a711d33b3d3e 100644 --- a/fs/ubifs/gc.c +++ b/fs/ubifs/gc.c | |||
@@ -830,29 +830,21 @@ out: | |||
830 | * ubifs_destroy_idx_gc - destroy idx_gc list. | 830 | * ubifs_destroy_idx_gc - destroy idx_gc list. |
831 | * @c: UBIFS file-system description object | 831 | * @c: UBIFS file-system description object |
832 | * | 832 | * |
833 | * This function destroys the @c->idx_gc list. It is called when unmounting or | 833 | * This function destroys the @c->idx_gc list. It is called when unmounting |
834 | * remounting read-only so locks are not needed. Returns zero in case of | 834 | * so locks are not needed. Returns zero in case of success and a negative |
835 | * success and a negative error code in case of failure. | 835 | * error code in case of failure. |
836 | */ | 836 | */ |
837 | int ubifs_destroy_idx_gc(struct ubifs_info *c) | 837 | void ubifs_destroy_idx_gc(struct ubifs_info *c) |
838 | { | 838 | { |
839 | int ret = 0; | ||
840 | |||
841 | while (!list_empty(&c->idx_gc)) { | 839 | while (!list_empty(&c->idx_gc)) { |
842 | int err; | ||
843 | struct ubifs_gced_idx_leb *idx_gc; | 840 | struct ubifs_gced_idx_leb *idx_gc; |
844 | 841 | ||
845 | idx_gc = list_entry(c->idx_gc.next, struct ubifs_gced_idx_leb, | 842 | idx_gc = list_entry(c->idx_gc.next, struct ubifs_gced_idx_leb, |
846 | list); | 843 | list); |
847 | err = ubifs_change_one_lp(c, idx_gc->lnum, LPROPS_NC, | 844 | c->idx_gc_cnt -= 1; |
848 | LPROPS_NC, 0, LPROPS_TAKEN, -1); | ||
849 | if (err && !ret) | ||
850 | ret = err; | ||
851 | list_del(&idx_gc->list); | 845 | list_del(&idx_gc->list); |
852 | kfree(idx_gc); | 846 | kfree(idx_gc); |
853 | } | 847 | } |
854 | |||
855 | return ret; | ||
856 | } | 848 | } |
857 | 849 | ||
858 | /** | 850 | /** |