fs: fat: treat invalid FAT clusters as errors
[oweals/u-boot.git] / fs / ubifs / recovery.c
index 763770738b7c9eb7b91c001ca9b6349691f4481b..621804c6fd2ae180541a0b2a3ca7e1856b458d6f 100644 (file)
@@ -1,10 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * This file is part of UBIFS.
  *
  * Copyright (C) 2006-2008 Nokia Corporation
  *
- * SPDX-License-Identifier:    GPL-2.0+
- *
  * Authors: Adrian Hunter
  *          Artem Bityutskiy (Битюцкий Артём)
  */
@@ -298,7 +297,7 @@ int ubifs_recover_master_node(struct ubifs_info *c)
                mst = mst2;
        }
 
-       ubifs_msg("recovered master node from LEB %d",
+       ubifs_msg(c, "recovered master node from LEB %d",
                  (mst == mst1 ? UBIFS_MST_LNUM : UBIFS_MST_LNUM + 1));
 
        memcpy(c->mst_node, mst, UBIFS_MST_NODE_SZ);
@@ -355,13 +354,13 @@ int ubifs_recover_master_node(struct ubifs_info *c)
 out_err:
        err = -EINVAL;
 out_free:
-       ubifs_err("failed to recover master node");
+       ubifs_err(c, "failed to recover master node");
        if (mst1) {
-               ubifs_err("dumping first master node");
+               ubifs_err(c, "dumping first master node");
                ubifs_dump_node(c, mst1);
        }
        if (mst2) {
-               ubifs_err("dumping second master node");
+               ubifs_err(c, "dumping second master node");
                ubifs_dump_node(c, mst2);
        }
        vfree(buf2);
@@ -593,7 +592,6 @@ static void drop_last_group(struct ubifs_scan_leb *sleb, int *offs)
  * drop_last_node - drop the last node.
  * @sleb: scanned LEB information
  * @offs: offset of dropped nodes is returned here
- * @grouped: non-zero if whole group of nodes have to be dropped
  *
  * This is a helper function for 'ubifs_recover_leb()' which drops the last
  * node of the scanned LEB.
@@ -626,8 +624,8 @@ static void drop_last_node(struct ubifs_scan_leb *sleb, int *offs)
  *
  * This function does a scan of a LEB, but caters for errors that might have
  * been caused by the unclean unmount from which we are attempting to recover.
- * Returns %0 in case of success, %-EUCLEAN if an unrecoverable corruption is
- * found, and a negative error code in case of failure.
+ * Returns the scanned information on success and a negative error code on
+ * failure.
  */
 struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum,
                                         int offs, void *sbuf, int jhead)
@@ -680,7 +678,7 @@ struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum,
                                  ret, lnum, offs);
                        break;
                } else {
-                       ubifs_err("unexpected return value %d", ret);
+                       ubifs_err(c, "unexpected return value %d", ret);
                        err = -EINVAL;
                        goto error;
                }
@@ -700,7 +698,7 @@ struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum,
                         * See header comment for this file for more
                         * explanations about the reasons we have this check.
                         */
-                       ubifs_err("corrupt empty space LEB %d:%d, corruption starts at %d",
+                       ubifs_err(c, "corrupt empty space LEB %d:%d, corruption starts at %d",
                                  lnum, offs, corruption);
                        /* Make sure we dump interesting non-0xFF data */
                        offs += corruption;
@@ -786,13 +784,13 @@ struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum,
 
 corrupted_rescan:
        /* Re-scan the corrupted data with verbose messages */
-       ubifs_err("corruption %d", ret);
+       ubifs_err(c, "corruption %d", ret);
        ubifs_scan_a_node(c, buf, len, lnum, offs, 1);
 corrupted:
        ubifs_scanned_corruption(c, lnum, offs, buf);
        err = -EUCLEAN;
 error:
-       ubifs_err("LEB %d scanning failed", lnum);
+       ubifs_err(c, "LEB %d scanning failed", lnum);
        ubifs_scan_destroy(sleb);
        return ERR_PTR(err);
 }
@@ -824,15 +822,15 @@ static int get_cs_sqnum(struct ubifs_info *c, int lnum, int offs,
                goto out_free;
        ret = ubifs_scan_a_node(c, cs_node, UBIFS_CS_NODE_SZ, lnum, offs, 0);
        if (ret != SCANNED_A_NODE) {
-               ubifs_err("Not a valid node");
+               ubifs_err(c, "Not a valid node");
                goto out_err;
        }
        if (cs_node->ch.node_type != UBIFS_CS_NODE) {
-               ubifs_err("Node a CS node, type is %d", cs_node->ch.node_type);
+               ubifs_err(c, "Node a CS node, type is %d", cs_node->ch.node_type);
                goto out_err;
        }
        if (le64_to_cpu(cs_node->cmt_no) != c->cmt_no) {
-               ubifs_err("CS node cmt_no %llu != current cmt_no %llu",
+               ubifs_err(c, "CS node cmt_no %llu != current cmt_no %llu",
                          (unsigned long long)le64_to_cpu(cs_node->cmt_no),
                          c->cmt_no);
                goto out_err;
@@ -845,7 +843,7 @@ static int get_cs_sqnum(struct ubifs_info *c, int lnum, int offs,
 out_err:
        err = -EINVAL;
 out_free:
-       ubifs_err("failed to get CS sqnum");
+       ubifs_err(c, "failed to get CS sqnum");
        kfree(cs_node);
        return err;
 }
@@ -897,7 +895,7 @@ struct ubifs_scan_leb *ubifs_recover_log_leb(struct ubifs_info *c, int lnum,
                                }
                        }
                        if (snod->sqnum > cs_sqnum) {
-                               ubifs_err("unrecoverable log corruption in LEB %d",
+                               ubifs_err(c, "unrecoverable log corruption in LEB %d",
                                          lnum);
                                ubifs_scan_destroy(sleb);
                                return ERR_PTR(-EUCLEAN);
@@ -973,11 +971,8 @@ int ubifs_recover_inl_heads(struct ubifs_info *c, void *sbuf)
                return err;
 
        dbg_rcvry("checking LPT head at %d:%d", c->nhead_lnum, c->nhead_offs);
-       err = recover_head(c, c->nhead_lnum, c->nhead_offs, sbuf);
-       if (err)
-               return err;
 
-       return 0;
+       return recover_head(c, c->nhead_lnum, c->nhead_offs, sbuf);
 }
 
 /**
@@ -1002,10 +997,7 @@ static int clean_an_unclean_leb(struct ubifs_info *c,
 
        if (len == 0) {
                /* Nothing to read, just unmap it */
-               err = ubifs_leb_unmap(c, lnum);
-               if (err)
-                       return err;
-               return 0;
+               return ubifs_leb_unmap(c, lnum);
        }
 
        err = ubifs_leb_read(c, lnum, buf, offs, len, 0);
@@ -1041,7 +1033,7 @@ static int clean_an_unclean_leb(struct ubifs_info *c,
                }
 
                if (ret == SCANNED_EMPTY_SPACE) {
-                       ubifs_err("unexpected empty space at %d:%d",
+                       ubifs_err(c, "unexpected empty space at %d:%d",
                                  lnum, offs);
                        return -EUCLEAN;
                }
@@ -1136,7 +1128,7 @@ static int grab_empty_leb(struct ubifs_info *c)
         */
        lnum = ubifs_find_free_leb_for_idx(c);
        if (lnum < 0) {
-               ubifs_err("could not find an empty LEB");
+               ubifs_err(c, "could not find an empty LEB");
                ubifs_dump_lprops(c);
                ubifs_dump_budg(c, &c->bi);
                return lnum;
@@ -1216,7 +1208,7 @@ int ubifs_rcvry_gc_commit(struct ubifs_info *c)
        }
        mutex_unlock(&wbuf->io_mutex);
        if (err < 0) {
-               ubifs_err("GC failed, error %d", err);
+               ubifs_err(c, "GC failed, error %d", err);
                if (err == -EAGAIN)
                        err = -EINVAL;
                return err;
@@ -1470,7 +1462,7 @@ static int fix_size_in_place(struct ubifs_info *c, struct size_entry *e)
        return 0;
 
 out:
-       ubifs_warn("inode %lu failed to fix size %lld -> %lld error %d",
+       ubifs_warn(c, "inode %lu failed to fix size %lld -> %lld error %d",
                   (unsigned long)e->inum, e->i_size, e->d_size, err);
        return err;
 }