UBI: always dump the stack on error
authorArtem Bityutskiy <Artem.Bityutskiy@linux.intel.com>
Tue, 24 Apr 2012 03:59:49 +0000 (06:59 +0300)
committerArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Sun, 20 May 2012 17:25:58 +0000 (20:25 +0300)
UBI (and UBIFS) are a bit over-engineered WRT debugging. The idea was to
link as few as possible when debugging is disabled, but the downside is
that most people produce bug reports which are difficult to understand.

This patch weeds out the 'ubi_dbg_dump_stack()' function and turns it
into 'dump_stack()' - it is always useful to have stack dump in case of
an error.

Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@linux.intel.com>
drivers/mtd/ubi/debug.h
drivers/mtd/ubi/io.c
drivers/mtd/ubi/scan.c
drivers/mtd/ubi/ubi.h
drivers/mtd/ubi/wl.c

index ead2cd16ba7588f7e1ea21866df9da6795ce3d5e..aff6499cde47f52bdd2f37bbb65e76b5e000ef25 100644 (file)
        if (unlikely(!(expr))) {                                             \
                printk(KERN_CRIT "UBI assert failed in %s at %u (pid %d)\n", \
                       __func__, __LINE__, current->pid);                    \
-               ubi_dbg_dump_stack();                                        \
+               dump_stack();                                                \
        }                                                                    \
 } while (0)
 
 #define dbg_err(fmt, ...) ubi_err(fmt, ##__VA_ARGS__)
 
-#define ubi_dbg_dump_stack() dump_stack()
-
 #define ubi_dbg_print_hex_dump(l, ps, pt, r, g, b, len, a)  \
                print_hex_dump(l, ps, pt, r, g, b, len, a)
 
@@ -194,7 +192,6 @@ static inline int ubi_dbg_is_erase_failure(const struct ubi_device *ubi)
 #define dbg_io(fmt, ...)   ubi_dbg_msg(fmt, ##__VA_ARGS__)
 #define dbg_bld(fmt, ...)  ubi_dbg_msg(fmt, ##__VA_ARGS__)
 
-static inline void ubi_dbg_dump_stack(void)                          { return; }
 static inline void
 ubi_dbg_dump_ec_hdr(const struct ubi_ec_hdr *ec_hdr)                 { return; }
 static inline void
index 43f1a0011a55cad9a9d876cff0241ecda9876ba3..507e0c6113c31e89f1ec53ed9a5adec4128f460c 100644 (file)
@@ -198,7 +198,7 @@ retry:
 
                ubi_err("error %d%s while reading %d bytes from PEB %d:%d, "
                        "read %zd bytes", err, errstr, len, pnum, offset, read);
-               ubi_dbg_dump_stack();
+               dump_stack();
 
                /*
                 * The driver should never return -EBADMSG if it failed to read
@@ -284,7 +284,7 @@ int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset,
        if (ubi_dbg_is_write_failure(ubi)) {
                dbg_err("cannot write %d bytes to PEB %d:%d "
                        "(emulated)", len, pnum, offset);
-               ubi_dbg_dump_stack();
+               dump_stack();
                return -EIO;
        }
 
@@ -293,7 +293,7 @@ int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset,
        if (err) {
                ubi_err("error %d while writing %d bytes to PEB %d:%d, written "
                        "%zd bytes", err, len, pnum, offset, written);
-               ubi_dbg_dump_stack();
+               dump_stack();
                ubi_dbg_dump_flash(ubi, pnum, offset, len);
        } else
                ubi_assert(written == len);
@@ -370,7 +370,7 @@ retry:
                        goto retry;
                }
                ubi_err("cannot erase PEB %d, error %d", pnum, err);
-               ubi_dbg_dump_stack();
+               dump_stack();
                return err;
        }
 
@@ -388,7 +388,7 @@ retry:
                        goto retry;
                }
                ubi_err("cannot erase PEB %d", pnum);
-               ubi_dbg_dump_stack();
+               dump_stack();
                return -EIO;
        }
 
@@ -722,7 +722,7 @@ static int validate_ec_hdr(const struct ubi_device *ubi,
 bad:
        ubi_err("bad EC header");
        ubi_dbg_dump_ec_hdr(ec_hdr);
-       ubi_dbg_dump_stack();
+       dump_stack();
        return 1;
 }
 
@@ -998,7 +998,7 @@ static int validate_vid_hdr(const struct ubi_device *ubi,
 bad:
        ubi_err("bad VID header");
        ubi_dbg_dump_vid_hdr(vid_hdr);
-       ubi_dbg_dump_stack();
+       dump_stack();
        return 1;
 }
 
@@ -1153,7 +1153,7 @@ static int paranoid_check_not_bad(const struct ubi_device *ubi, int pnum)
                return err;
 
        ubi_err("paranoid check failed for PEB %d", pnum);
-       ubi_dbg_dump_stack();
+       dump_stack();
        return err > 0 ? -EINVAL : err;
 }
 
@@ -1192,7 +1192,7 @@ static int paranoid_check_ec_hdr(const struct ubi_device *ubi, int pnum,
 
 fail:
        ubi_dbg_dump_ec_hdr(ec_hdr);
-       ubi_dbg_dump_stack();
+       dump_stack();
        return -EINVAL;
 }
 
@@ -1227,7 +1227,7 @@ static int paranoid_check_peb_ec_hdr(const struct ubi_device *ubi, int pnum)
                ubi_err("bad CRC, calculated %#08x, read %#08x", crc, hdr_crc);
                ubi_err("paranoid check failed for PEB %d", pnum);
                ubi_dbg_dump_ec_hdr(ec_hdr);
-               ubi_dbg_dump_stack();
+               dump_stack();
                err = -EINVAL;
                goto exit;
        }
@@ -1275,7 +1275,7 @@ static int paranoid_check_vid_hdr(const struct ubi_device *ubi, int pnum,
 fail:
        ubi_err("paranoid check failed for PEB %d", pnum);
        ubi_dbg_dump_vid_hdr(vid_hdr);
-       ubi_dbg_dump_stack();
+       dump_stack();
        return -EINVAL;
 
 }
@@ -1315,7 +1315,7 @@ static int paranoid_check_peb_vid_hdr(const struct ubi_device *ubi, int pnum)
                        "read %#08x", pnum, crc, hdr_crc);
                ubi_err("paranoid check failed for PEB %d", pnum);
                ubi_dbg_dump_vid_hdr(vid_hdr);
-               ubi_dbg_dump_stack();
+               dump_stack();
                err = -EINVAL;
                goto exit;
        }
@@ -1380,7 +1380,7 @@ int ubi_dbg_check_write(struct ubi_device *ubi, const void *buf, int pnum,
                        i, i + dump_len);
                print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,
                               buf1 + i, dump_len, 1);
-               ubi_dbg_dump_stack();
+               dump_stack();
                err = -EINVAL;
                goto out_free;
        }
@@ -1443,7 +1443,7 @@ fail:
        print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, buf, len, 1);
        err = -EINVAL;
 error:
-       ubi_dbg_dump_stack();
+       dump_stack();
        vfree(buf);
        return err;
 }
index 12c43b44f81578a4b78369e5140b66d34d26a188..75c23a9bb6c3429e62ed6f7a411e64741c87818d 100644 (file)
@@ -1598,7 +1598,7 @@ bad_vid_hdr:
        ubi_dbg_dump_vid_hdr(vidh);
 
 out:
-       ubi_dbg_dump_stack();
+       dump_stack();
        return -EINVAL;
 }
 
index b162790790a99d58f5abe69a1eb4ea4030c7cf6a..4f5c9f1365199d658616203605f2b99648d2cac1 100644 (file)
@@ -667,7 +667,7 @@ static inline void ubi_ro_mode(struct ubi_device *ubi)
        if (!ubi->ro_mode) {
                ubi->ro_mode = 1;
                ubi_warn("switch to read-only mode");
-               ubi_dbg_dump_stack();
+               dump_stack();
        }
 }
 
index 7c1a9bf8ac869592e2697b1217bc9261197dc11b..b0a6d53ef047e0e7b153443c951dd34c76e87941 100644 (file)
@@ -1603,7 +1603,7 @@ static int paranoid_check_ec(struct ubi_device *ubi, int pnum, int ec)
        if (ec != read_ec) {
                ubi_err("paranoid check failed for PEB %d", pnum);
                ubi_err("read EC is %lld, should be %d", read_ec, ec);
-               ubi_dbg_dump_stack();
+               dump_stack();
                err = 1;
        } else
                err = 0;
@@ -1634,7 +1634,7 @@ static int paranoid_check_in_wl_tree(const struct ubi_device *ubi,
 
        ubi_err("paranoid check failed for PEB %d, EC %d, RB-tree %p ",
                e->pnum, e->ec, root);
-       ubi_dbg_dump_stack();
+       dump_stack();
        return -EINVAL;
 }
 
@@ -1662,7 +1662,7 @@ static int paranoid_check_in_pq(const struct ubi_device *ubi,
 
        ubi_err("paranoid check failed for PEB %d, EC %d, Protect queue",
                e->pnum, e->ec);
-       ubi_dbg_dump_stack();
+       dump_stack();
        return -EINVAL;
 }