diff options
Diffstat (limited to 'fs/ubifs/super.c')
| -rw-r--r-- | fs/ubifs/super.c | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 1ab0d22e4c94..b5aeb5a8ebed 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c | |||
| @@ -811,15 +811,18 @@ static int alloc_wbufs(struct ubifs_info *c) | |||
| 811 | 811 | ||
| 812 | c->jheads[i].wbuf.sync_callback = &bud_wbuf_callback; | 812 | c->jheads[i].wbuf.sync_callback = &bud_wbuf_callback; |
| 813 | c->jheads[i].wbuf.jhead = i; | 813 | c->jheads[i].wbuf.jhead = i; |
| 814 | c->jheads[i].grouped = 1; | ||
| 814 | } | 815 | } |
| 815 | 816 | ||
| 816 | c->jheads[BASEHD].wbuf.dtype = UBI_SHORTTERM; | 817 | c->jheads[BASEHD].wbuf.dtype = UBI_SHORTTERM; |
| 817 | /* | 818 | /* |
| 818 | * Garbage Collector head likely contains long-term data and | 819 | * Garbage Collector head likely contains long-term data and |
| 819 | * does not need to be synchronized by timer. | 820 | * does not need to be synchronized by timer. Also GC head nodes are |
| 821 | * not grouped. | ||
| 820 | */ | 822 | */ |
| 821 | c->jheads[GCHD].wbuf.dtype = UBI_LONGTERM; | 823 | c->jheads[GCHD].wbuf.dtype = UBI_LONGTERM; |
| 822 | c->jheads[GCHD].wbuf.no_timer = 1; | 824 | c->jheads[GCHD].wbuf.no_timer = 1; |
| 825 | c->jheads[GCHD].grouped = 0; | ||
| 823 | 826 | ||
| 824 | return 0; | 827 | return 0; |
| 825 | } | 828 | } |
| @@ -1284,12 +1287,25 @@ static int mount_ubifs(struct ubifs_info *c) | |||
| 1284 | if ((c->mst_node->flags & cpu_to_le32(UBIFS_MST_DIRTY)) != 0) { | 1287 | if ((c->mst_node->flags & cpu_to_le32(UBIFS_MST_DIRTY)) != 0) { |
| 1285 | ubifs_msg("recovery needed"); | 1288 | ubifs_msg("recovery needed"); |
| 1286 | c->need_recovery = 1; | 1289 | c->need_recovery = 1; |
| 1287 | if (!c->ro_mount) { | 1290 | } |
| 1288 | err = ubifs_recover_inl_heads(c, c->sbuf); | 1291 | |
| 1289 | if (err) | 1292 | if (c->need_recovery && !c->ro_mount) { |
| 1290 | goto out_master; | 1293 | err = ubifs_recover_inl_heads(c, c->sbuf); |
| 1291 | } | 1294 | if (err) |
| 1292 | } else if (!c->ro_mount) { | 1295 | goto out_master; |
| 1296 | } | ||
| 1297 | |||
| 1298 | err = ubifs_lpt_init(c, 1, !c->ro_mount); | ||
| 1299 | if (err) | ||
| 1300 | goto out_master; | ||
| 1301 | |||
| 1302 | if (!c->ro_mount && c->space_fixup) { | ||
| 1303 | err = ubifs_fixup_free_space(c); | ||
| 1304 | if (err) | ||
| 1305 | goto out_master; | ||
| 1306 | } | ||
| 1307 | |||
| 1308 | if (!c->ro_mount) { | ||
| 1293 | /* | 1309 | /* |
| 1294 | * Set the "dirty" flag so that if we reboot uncleanly we | 1310 | * Set the "dirty" flag so that if we reboot uncleanly we |
| 1295 | * will notice this immediately on the next mount. | 1311 | * will notice this immediately on the next mount. |
| @@ -1297,13 +1313,9 @@ static int mount_ubifs(struct ubifs_info *c) | |||
| 1297 | c->mst_node->flags |= cpu_to_le32(UBIFS_MST_DIRTY); | 1313 | c->mst_node->flags |= cpu_to_le32(UBIFS_MST_DIRTY); |
| 1298 | err = ubifs_write_master(c); | 1314 | err = ubifs_write_master(c); |
| 1299 | if (err) | 1315 | if (err) |
| 1300 | goto out_master; | 1316 | goto out_lpt; |
| 1301 | } | 1317 | } |
| 1302 | 1318 | ||
| 1303 | err = ubifs_lpt_init(c, 1, !c->ro_mount); | ||
| 1304 | if (err) | ||
| 1305 | goto out_lpt; | ||
| 1306 | |||
| 1307 | err = dbg_check_idx_size(c, c->bi.old_idx_sz); | 1319 | err = dbg_check_idx_size(c, c->bi.old_idx_sz); |
| 1308 | if (err) | 1320 | if (err) |
| 1309 | goto out_lpt; | 1321 | goto out_lpt; |
| @@ -1396,12 +1408,6 @@ static int mount_ubifs(struct ubifs_info *c) | |||
| 1396 | } else | 1408 | } else |
| 1397 | ubifs_assert(c->lst.taken_empty_lebs > 0); | 1409 | ubifs_assert(c->lst.taken_empty_lebs > 0); |
| 1398 | 1410 | ||
| 1399 | if (!c->ro_mount && c->space_fixup) { | ||
| 1400 | err = ubifs_fixup_free_space(c); | ||
| 1401 | if (err) | ||
| 1402 | goto out_infos; | ||
| 1403 | } | ||
| 1404 | |||
| 1405 | err = dbg_check_filesystem(c); | 1411 | err = dbg_check_filesystem(c); |
| 1406 | if (err) | 1412 | if (err) |
| 1407 | goto out_infos; | 1413 | goto out_infos; |
