]> git.sur5r.net Git - u-boot/blobdiff - fs/ubifs/lpt_commit.c
rockchip: add boot-mode support for rk3288, rk3036
[u-boot] / fs / ubifs / lpt_commit.c
index cad422e06623a48254b42c51af64f764a8aeff94..2df9130efd1c7c45c78444c89ce8fdc668c5a7bf 100644 (file)
@@ -14,7 +14,6 @@
  * subsystem.
  */
 
-#define __UBOOT__
 #ifndef __UBOOT__
 #include <linux/crc16.h>
 #include <linux/slab.h>
@@ -302,7 +301,6 @@ static int layout_cnodes(struct ubifs_info *c)
                        ubifs_assert(lnum >= c->lpt_first &&
                                     lnum <= c->lpt_last);
                }
-               done_ltab = 1;
                c->ltab_lnum = lnum;
                c->ltab_offs = offs;
                offs += c->ltab_sz;
@@ -318,7 +316,7 @@ static int layout_cnodes(struct ubifs_info *c)
        return 0;
 
 no_space:
-       ubifs_err("LPT out of space at LEB %d:%d needing %d, done_ltab %d, done_lsave %d",
+       ubifs_err(c, "LPT out of space at LEB %d:%d needing %d, done_ltab %d, done_lsave %d",
                  lnum, offs, len, done_ltab, done_lsave);
        ubifs_dump_lpt_info(c);
        ubifs_dump_lpt_lebs(c);
@@ -459,9 +457,9 @@ static int write_cnodes(struct ubifs_info *c)
                 * important.
                 */
                clear_bit(DIRTY_CNODE, &cnode->flags);
-               smp_mb__before_clear_bit();
+               smp_mb__before_atomic();
                clear_bit(COW_CNODE, &cnode->flags);
-               smp_mb__after_clear_bit();
+               smp_mb__after_atomic();
                offs += len;
                dbg_chk_lpt_sz(c, 1, len);
                cnode = cnode->cnext;
@@ -513,7 +511,6 @@ static int write_cnodes(struct ubifs_info *c)
                        if (err)
                                return err;
                }
-               done_ltab = 1;
                ubifs_pack_ltab(c, buf + offs, c->ltab_cmt);
                offs += c->ltab_sz;
                dbg_chk_lpt_sz(c, 1, c->ltab_sz);
@@ -544,7 +541,7 @@ static int write_cnodes(struct ubifs_info *c)
        return 0;
 
 no_space:
-       ubifs_err("LPT out of space mismatch at LEB %d:%d needing %d, done_ltab %d, done_lsave %d",
+       ubifs_err(c, "LPT out of space mismatch at LEB %d:%d needing %d, done_ltab %d, done_lsave %d",
                  lnum, offs, len, done_ltab, done_lsave);
        ubifs_dump_lpt_info(c);
        ubifs_dump_lpt_lebs(c);
@@ -1645,7 +1642,7 @@ static int dbg_check_ltab_lnum(struct ubifs_info *c, int lnum)
 
        buf = p = __vmalloc(c->leb_size, GFP_NOFS, PAGE_KERNEL);
        if (!buf) {
-               ubifs_err("cannot allocate memory for ltab checking");
+               ubifs_err(c, "cannot allocate memory for ltab checking");
                return 0;
        }
 
@@ -1667,18 +1664,18 @@ static int dbg_check_ltab_lnum(struct ubifs_info *c, int lnum)
                                continue;
                        }
                        if (!dbg_is_all_ff(p, len)) {
-                               ubifs_err("invalid empty space in LEB %d at %d",
+                               ubifs_err(c, "invalid empty space in LEB %d at %d",
                                          lnum, c->leb_size - len);
                                err = -EINVAL;
                        }
                        i = lnum - c->lpt_first;
                        if (len != c->ltab[i].free) {
-                               ubifs_err("invalid free space in LEB %d (free %d, expected %d)",
+                               ubifs_err(c, "invalid free space in LEB %d (free %d, expected %d)",
                                          lnum, len, c->ltab[i].free);
                                err = -EINVAL;
                        }
                        if (dirty != c->ltab[i].dirty) {
-                               ubifs_err("invalid dirty space in LEB %d (dirty %d, expected %d)",
+                               ubifs_err(c, "invalid dirty space in LEB %d (dirty %d, expected %d)",
                                          lnum, dirty, c->ltab[i].dirty);
                                err = -EINVAL;
                        }
@@ -1732,7 +1729,7 @@ int dbg_check_ltab(struct ubifs_info *c)
        for (lnum = c->lpt_first; lnum <= c->lpt_last; lnum++) {
                err = dbg_check_ltab_lnum(c, lnum);
                if (err) {
-                       ubifs_err("failed at LEB %d", lnum);
+                       ubifs_err(c, "failed at LEB %d", lnum);
                        return err;
                }
        }
@@ -1764,7 +1761,7 @@ int dbg_chk_lpt_free_spc(struct ubifs_info *c)
                        free += c->leb_size;
        }
        if (free < c->lpt_sz) {
-               ubifs_err("LPT space error: free %lld lpt_sz %lld",
+               ubifs_err(c, "LPT space error: free %lld lpt_sz %lld",
                          free, c->lpt_sz);
                ubifs_dump_lpt_info(c);
                ubifs_dump_lpt_lebs(c);
@@ -1804,12 +1801,12 @@ int dbg_chk_lpt_sz(struct ubifs_info *c, int action, int len)
                d->chk_lpt_lebs = 0;
                d->chk_lpt_wastage = 0;
                if (c->dirty_pn_cnt > c->pnode_cnt) {
-                       ubifs_err("dirty pnodes %d exceed max %d",
+                       ubifs_err(c, "dirty pnodes %d exceed max %d",
                                  c->dirty_pn_cnt, c->pnode_cnt);
                        err = -EINVAL;
                }
                if (c->dirty_nn_cnt > c->nnode_cnt) {
-                       ubifs_err("dirty nnodes %d exceed max %d",
+                       ubifs_err(c, "dirty nnodes %d exceed max %d",
                                  c->dirty_nn_cnt, c->nnode_cnt);
                        err = -EINVAL;
                }
@@ -1827,22 +1824,22 @@ int dbg_chk_lpt_sz(struct ubifs_info *c, int action, int len)
                chk_lpt_sz *= d->chk_lpt_lebs;
                chk_lpt_sz += len - c->nhead_offs;
                if (d->chk_lpt_sz != chk_lpt_sz) {
-                       ubifs_err("LPT wrote %lld but space used was %lld",
+                       ubifs_err(c, "LPT wrote %lld but space used was %lld",
                                  d->chk_lpt_sz, chk_lpt_sz);
                        err = -EINVAL;
                }
                if (d->chk_lpt_sz > c->lpt_sz) {
-                       ubifs_err("LPT wrote %lld but lpt_sz is %lld",
+                       ubifs_err(c, "LPT wrote %lld but lpt_sz is %lld",
                                  d->chk_lpt_sz, c->lpt_sz);
                        err = -EINVAL;
                }
                if (d->chk_lpt_sz2 && d->chk_lpt_sz != d->chk_lpt_sz2) {
-                       ubifs_err("LPT layout size %lld but wrote %lld",
+                       ubifs_err(c, "LPT layout size %lld but wrote %lld",
                                  d->chk_lpt_sz, d->chk_lpt_sz2);
                        err = -EINVAL;
                }
                if (d->chk_lpt_sz2 && d->new_nhead_offs != len) {
-                       ubifs_err("LPT new nhead offs: expected %d was %d",
+                       ubifs_err(c, "LPT new nhead offs: expected %d was %d",
                                  d->new_nhead_offs, len);
                        err = -EINVAL;
                }
@@ -1852,7 +1849,7 @@ int dbg_chk_lpt_sz(struct ubifs_info *c, int action, int len)
                if (c->big_lpt)
                        lpt_sz += c->lsave_sz;
                if (d->chk_lpt_sz - d->chk_lpt_wastage > lpt_sz) {
-                       ubifs_err("LPT chk_lpt_sz %lld + waste %lld exceeds %lld",
+                       ubifs_err(c, "LPT chk_lpt_sz %lld + waste %lld exceeds %lld",
                                  d->chk_lpt_sz, d->chk_lpt_wastage, lpt_sz);
                        err = -EINVAL;
                }
@@ -1894,7 +1891,7 @@ static void dump_lpt_leb(const struct ubifs_info *c, int lnum)
        pr_err("(pid %d) start dumping LEB %d\n", current->pid, lnum);
        buf = p = __vmalloc(c->leb_size, GFP_NOFS, PAGE_KERNEL);
        if (!buf) {
-               ubifs_err("cannot allocate memory to dump LPT");
+               ubifs_err(c, "cannot allocate memory to dump LPT");
                return;
        }
 
@@ -1946,6 +1943,11 @@ static void dump_lpt_leb(const struct ubifs_info *c, int lnum)
                                pr_err("LEB %d:%d, nnode, ",
                                       lnum, offs);
                        err = ubifs_unpack_nnode(c, p, &nnode);
+                       if (err) {
+                               pr_err("failed to unpack_node, error %d\n",
+                                      err);
+                               break;
+                       }
                        for (i = 0; i < UBIFS_LPT_FANOUT; i++) {
                                pr_cont("%d:%d", nnode.nbranch[i].lnum,
                                       nnode.nbranch[i].offs);
@@ -1964,7 +1966,7 @@ static void dump_lpt_leb(const struct ubifs_info *c, int lnum)
                        pr_err("LEB %d:%d, lsave len\n", lnum, offs);
                        break;
                default:
-                       ubifs_err("LPT node type %d not recognized", node_type);
+                       ubifs_err(c, "LPT node type %d not recognized", node_type);
                        goto out;
                }