diff options
author | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2008-07-16 10:40:22 -0400 |
---|---|---|
committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2008-07-24 06:34:45 -0400 |
commit | c8566350a3229ca505b84313c65d1403b4d0cbfc (patch) | |
tree | 156309b71de9779948fdab03a2831b41fe6ca159 | |
parent | 85c6e6e28259e9b58b8984db536c45bc3161f40c (diff) |
UBI: fix and re-work debugging stuff
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
-rw-r--r-- | drivers/mtd/ubi/build.c | 2 | ||||
-rw-r--r-- | drivers/mtd/ubi/cdev.c | 26 | ||||
-rw-r--r-- | drivers/mtd/ubi/debug.c | 160 | ||||
-rw-r--r-- | drivers/mtd/ubi/debug.h | 68 | ||||
-rw-r--r-- | drivers/mtd/ubi/gluebi.c | 10 | ||||
-rw-r--r-- | drivers/mtd/ubi/io.c | 4 | ||||
-rw-r--r-- | drivers/mtd/ubi/kapi.c | 20 | ||||
-rw-r--r-- | drivers/mtd/ubi/scan.c | 2 | ||||
-rw-r--r-- | drivers/mtd/ubi/upd.c | 16 | ||||
-rw-r--r-- | drivers/mtd/ubi/vmt.c | 73 | ||||
-rw-r--r-- | drivers/mtd/ubi/vtbl.c | 2 |
11 files changed, 206 insertions, 177 deletions
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c index 27271fe32e02..7210e1da1fcb 100644 --- a/drivers/mtd/ubi/build.c +++ b/drivers/mtd/ubi/build.c | |||
@@ -403,7 +403,7 @@ static int uif_init(struct ubi_device *ubi) | |||
403 | 403 | ||
404 | ubi_assert(MINOR(dev) == 0); | 404 | ubi_assert(MINOR(dev) == 0); |
405 | cdev_init(&ubi->cdev, &ubi_cdev_operations); | 405 | cdev_init(&ubi->cdev, &ubi_cdev_operations); |
406 | dbg_msg("%s major is %u", ubi->ubi_name, MAJOR(dev)); | 406 | dbg_gen("%s major is %u", ubi->ubi_name, MAJOR(dev)); |
407 | ubi->cdev.owner = THIS_MODULE; | 407 | ubi->cdev.owner = THIS_MODULE; |
408 | 408 | ||
409 | err = cdev_add(&ubi->cdev, dev, 1); | 409 | err = cdev_add(&ubi->cdev, dev, 1); |
diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c index 4fb84e3e6502..7c19918cc914 100644 --- a/drivers/mtd/ubi/cdev.c +++ b/drivers/mtd/ubi/cdev.c | |||
@@ -116,7 +116,7 @@ static int vol_cdev_open(struct inode *inode, struct file *file) | |||
116 | else | 116 | else |
117 | mode = UBI_READONLY; | 117 | mode = UBI_READONLY; |
118 | 118 | ||
119 | dbg_msg("open volume %d, mode %d", vol_id, mode); | 119 | dbg_gen("open volume %d, mode %d", vol_id, mode); |
120 | 120 | ||
121 | desc = ubi_open_volume(ubi_num, vol_id, mode); | 121 | desc = ubi_open_volume(ubi_num, vol_id, mode); |
122 | unlock_kernel(); | 122 | unlock_kernel(); |
@@ -132,7 +132,7 @@ static int vol_cdev_release(struct inode *inode, struct file *file) | |||
132 | struct ubi_volume_desc *desc = file->private_data; | 132 | struct ubi_volume_desc *desc = file->private_data; |
133 | struct ubi_volume *vol = desc->vol; | 133 | struct ubi_volume *vol = desc->vol; |
134 | 134 | ||
135 | dbg_msg("release volume %d, mode %d", vol->vol_id, desc->mode); | 135 | dbg_gen("release volume %d, mode %d", vol->vol_id, desc->mode); |
136 | 136 | ||
137 | if (vol->updating) { | 137 | if (vol->updating) { |
138 | ubi_warn("update of volume %d not finished, volume is damaged", | 138 | ubi_warn("update of volume %d not finished, volume is damaged", |
@@ -141,7 +141,7 @@ static int vol_cdev_release(struct inode *inode, struct file *file) | |||
141 | vol->updating = 0; | 141 | vol->updating = 0; |
142 | vfree(vol->upd_buf); | 142 | vfree(vol->upd_buf); |
143 | } else if (vol->changing_leb) { | 143 | } else if (vol->changing_leb) { |
144 | dbg_msg("only %lld of %lld bytes received for atomic LEB change" | 144 | dbg_gen("only %lld of %lld bytes received for atomic LEB change" |
145 | " for volume %d:%d, cancel", vol->upd_received, | 145 | " for volume %d:%d, cancel", vol->upd_received, |
146 | vol->upd_bytes, vol->ubi->ubi_num, vol->vol_id); | 146 | vol->upd_bytes, vol->ubi->ubi_num, vol->vol_id); |
147 | vol->changing_leb = 0; | 147 | vol->changing_leb = 0; |
@@ -183,7 +183,7 @@ static loff_t vol_cdev_llseek(struct file *file, loff_t offset, int origin) | |||
183 | return -EINVAL; | 183 | return -EINVAL; |
184 | } | 184 | } |
185 | 185 | ||
186 | dbg_msg("seek volume %d, offset %lld, origin %d, new offset %lld", | 186 | dbg_gen("seek volume %d, offset %lld, origin %d, new offset %lld", |
187 | vol->vol_id, offset, origin, new_offset); | 187 | vol->vol_id, offset, origin, new_offset); |
188 | 188 | ||
189 | file->f_pos = new_offset; | 189 | file->f_pos = new_offset; |
@@ -201,7 +201,7 @@ static ssize_t vol_cdev_read(struct file *file, __user char *buf, size_t count, | |||
201 | void *tbuf; | 201 | void *tbuf; |
202 | uint64_t tmp; | 202 | uint64_t tmp; |
203 | 203 | ||
204 | dbg_msg("read %zd bytes from offset %lld of volume %d", | 204 | dbg_gen("read %zd bytes from offset %lld of volume %d", |
205 | count, *offp, vol->vol_id); | 205 | count, *offp, vol->vol_id); |
206 | 206 | ||
207 | if (vol->updating) { | 207 | if (vol->updating) { |
@@ -216,7 +216,7 @@ static ssize_t vol_cdev_read(struct file *file, __user char *buf, size_t count, | |||
216 | return 0; | 216 | return 0; |
217 | 217 | ||
218 | if (vol->corrupted) | 218 | if (vol->corrupted) |
219 | dbg_msg("read from corrupted volume %d", vol->vol_id); | 219 | dbg_gen("read from corrupted volume %d", vol->vol_id); |
220 | 220 | ||
221 | if (*offp + count > vol->used_bytes) | 221 | if (*offp + count > vol->used_bytes) |
222 | count_save = count = vol->used_bytes - *offp; | 222 | count_save = count = vol->used_bytes - *offp; |
@@ -285,7 +285,7 @@ static ssize_t vol_cdev_direct_write(struct file *file, const char __user *buf, | |||
285 | char *tbuf; | 285 | char *tbuf; |
286 | uint64_t tmp; | 286 | uint64_t tmp; |
287 | 287 | ||
288 | dbg_msg("requested: write %zd bytes to offset %lld of volume %u", | 288 | dbg_gen("requested: write %zd bytes to offset %lld of volume %u", |
289 | count, *offp, vol->vol_id); | 289 | count, *offp, vol->vol_id); |
290 | 290 | ||
291 | if (vol->vol_type == UBI_STATIC_VOLUME) | 291 | if (vol->vol_type == UBI_STATIC_VOLUME) |
@@ -514,7 +514,7 @@ static int vol_cdev_ioctl(struct inode *inode, struct file *file, | |||
514 | break; | 514 | break; |
515 | } | 515 | } |
516 | 516 | ||
517 | dbg_msg("erase LEB %d:%d", vol->vol_id, lnum); | 517 | dbg_gen("erase LEB %d:%d", vol->vol_id, lnum); |
518 | err = ubi_eba_unmap_leb(ubi, vol, lnum); | 518 | err = ubi_eba_unmap_leb(ubi, vol, lnum); |
519 | if (err) | 519 | if (err) |
520 | break; | 520 | break; |
@@ -626,7 +626,7 @@ static int ubi_cdev_ioctl(struct inode *inode, struct file *file, | |||
626 | { | 626 | { |
627 | struct ubi_mkvol_req req; | 627 | struct ubi_mkvol_req req; |
628 | 628 | ||
629 | dbg_msg("create volume"); | 629 | dbg_gen("create volume"); |
630 | err = copy_from_user(&req, argp, sizeof(struct ubi_mkvol_req)); | 630 | err = copy_from_user(&req, argp, sizeof(struct ubi_mkvol_req)); |
631 | if (err) { | 631 | if (err) { |
632 | err = -EFAULT; | 632 | err = -EFAULT; |
@@ -656,7 +656,7 @@ static int ubi_cdev_ioctl(struct inode *inode, struct file *file, | |||
656 | { | 656 | { |
657 | int vol_id; | 657 | int vol_id; |
658 | 658 | ||
659 | dbg_msg("remove volume"); | 659 | dbg_gen("remove volume"); |
660 | err = get_user(vol_id, (__user int32_t *)argp); | 660 | err = get_user(vol_id, (__user int32_t *)argp); |
661 | if (err) { | 661 | if (err) { |
662 | err = -EFAULT; | 662 | err = -EFAULT; |
@@ -689,7 +689,7 @@ static int ubi_cdev_ioctl(struct inode *inode, struct file *file, | |||
689 | uint64_t tmp; | 689 | uint64_t tmp; |
690 | struct ubi_rsvol_req req; | 690 | struct ubi_rsvol_req req; |
691 | 691 | ||
692 | dbg_msg("re-size volume"); | 692 | dbg_gen("re-size volume"); |
693 | err = copy_from_user(&req, argp, sizeof(struct ubi_rsvol_req)); | 693 | err = copy_from_user(&req, argp, sizeof(struct ubi_rsvol_req)); |
694 | if (err) { | 694 | if (err) { |
695 | err = -EFAULT; | 695 | err = -EFAULT; |
@@ -742,7 +742,7 @@ static int ctrl_cdev_ioctl(struct inode *inode, struct file *file, | |||
742 | struct ubi_attach_req req; | 742 | struct ubi_attach_req req; |
743 | struct mtd_info *mtd; | 743 | struct mtd_info *mtd; |
744 | 744 | ||
745 | dbg_msg("attach MTD device"); | 745 | dbg_gen("attach MTD device"); |
746 | err = copy_from_user(&req, argp, sizeof(struct ubi_attach_req)); | 746 | err = copy_from_user(&req, argp, sizeof(struct ubi_attach_req)); |
747 | if (err) { | 747 | if (err) { |
748 | err = -EFAULT; | 748 | err = -EFAULT; |
@@ -782,7 +782,7 @@ static int ctrl_cdev_ioctl(struct inode *inode, struct file *file, | |||
782 | { | 782 | { |
783 | int ubi_num; | 783 | int ubi_num; |
784 | 784 | ||
785 | dbg_msg("dettach MTD device"); | 785 | dbg_gen("dettach MTD device"); |
786 | err = get_user(ubi_num, (__user int32_t *)argp); | 786 | err = get_user(ubi_num, (__user int32_t *)argp); |
787 | if (err) { | 787 | if (err) { |
788 | err = -EFAULT; | 788 | err = -EFAULT; |
diff --git a/drivers/mtd/ubi/debug.c b/drivers/mtd/ubi/debug.c index 56956ec2845f..21e0d7d76a44 100644 --- a/drivers/mtd/ubi/debug.c +++ b/drivers/mtd/ubi/debug.c | |||
@@ -24,7 +24,7 @@ | |||
24 | * changes. | 24 | * changes. |
25 | */ | 25 | */ |
26 | 26 | ||
27 | #ifdef CONFIG_MTD_UBI_DEBUG_MSG | 27 | #ifdef CONFIG_MTD_UBI_DEBUG |
28 | 28 | ||
29 | #include "ubi.h" | 29 | #include "ubi.h" |
30 | 30 | ||
@@ -34,14 +34,19 @@ | |||
34 | */ | 34 | */ |
35 | void ubi_dbg_dump_ec_hdr(const struct ubi_ec_hdr *ec_hdr) | 35 | void ubi_dbg_dump_ec_hdr(const struct ubi_ec_hdr *ec_hdr) |
36 | { | 36 | { |
37 | dbg_msg("erase counter header dump:"); | 37 | printk(KERN_DEBUG "Erase counter header dump:\n"); |
38 | dbg_msg("magic %#08x", be32_to_cpu(ec_hdr->magic)); | 38 | printk(KERN_DEBUG "\tmagic %#08x\n", |
39 | dbg_msg("version %d", (int)ec_hdr->version); | 39 | be32_to_cpu(ec_hdr->magic)); |
40 | dbg_msg("ec %llu", (long long)be64_to_cpu(ec_hdr->ec)); | 40 | printk(KERN_DEBUG "\tversion %d\n", (int)ec_hdr->version); |
41 | dbg_msg("vid_hdr_offset %d", be32_to_cpu(ec_hdr->vid_hdr_offset)); | 41 | printk(KERN_DEBUG "\tec %llu\n", |
42 | dbg_msg("data_offset %d", be32_to_cpu(ec_hdr->data_offset)); | 42 | (long long)be64_to_cpu(ec_hdr->ec)); |
43 | dbg_msg("hdr_crc %#08x", be32_to_cpu(ec_hdr->hdr_crc)); | 43 | printk(KERN_DEBUG "\tvid_hdr_offset %d\n", |
44 | dbg_msg("erase counter header hexdump:"); | 44 | be32_to_cpu(ec_hdr->vid_hdr_offset)); |
45 | printk(KERN_DEBUG "\tdata_offset %d\n", | ||
46 | be32_to_cpu(ec_hdr->data_offset)); | ||
47 | printk(KERN_DEBUG "\thdr_crc %#08x\n", | ||
48 | be32_to_cpu(ec_hdr->hdr_crc)); | ||
49 | printk(KERN_DEBUG "erase counter header hexdump:\n"); | ||
45 | print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, | 50 | print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, |
46 | ec_hdr, UBI_EC_HDR_SIZE, 1); | 51 | ec_hdr, UBI_EC_HDR_SIZE, 1); |
47 | } | 52 | } |
@@ -52,22 +57,24 @@ void ubi_dbg_dump_ec_hdr(const struct ubi_ec_hdr *ec_hdr) | |||
52 | */ | 57 | */ |
53 | void ubi_dbg_dump_vid_hdr(const struct ubi_vid_hdr *vid_hdr) | 58 | void ubi_dbg_dump_vid_hdr(const struct ubi_vid_hdr *vid_hdr) |
54 | { | 59 | { |
55 | dbg_msg("volume identifier header dump:"); | 60 | printk(KERN_DEBUG "Volume identifier header dump:\n"); |
56 | dbg_msg("magic %08x", be32_to_cpu(vid_hdr->magic)); | 61 | printk(KERN_DEBUG "\tmagic %08x\n", be32_to_cpu(vid_hdr->magic)); |
57 | dbg_msg("version %d", (int)vid_hdr->version); | 62 | printk(KERN_DEBUG "\tversion %d\n", (int)vid_hdr->version); |
58 | dbg_msg("vol_type %d", (int)vid_hdr->vol_type); | 63 | printk(KERN_DEBUG "\tvol_type %d\n", (int)vid_hdr->vol_type); |
59 | dbg_msg("copy_flag %d", (int)vid_hdr->copy_flag); | 64 | printk(KERN_DEBUG "\tcopy_flag %d\n", (int)vid_hdr->copy_flag); |
60 | dbg_msg("compat %d", (int)vid_hdr->compat); | 65 | printk(KERN_DEBUG "\tcompat %d\n", (int)vid_hdr->compat); |
61 | dbg_msg("vol_id %d", be32_to_cpu(vid_hdr->vol_id)); | 66 | printk(KERN_DEBUG "\tvol_id %d\n", be32_to_cpu(vid_hdr->vol_id)); |
62 | dbg_msg("lnum %d", be32_to_cpu(vid_hdr->lnum)); | 67 | printk(KERN_DEBUG "\tlnum %d\n", be32_to_cpu(vid_hdr->lnum)); |
63 | dbg_msg("leb_ver %u", be32_to_cpu(vid_hdr->leb_ver)); | 68 | printk(KERN_DEBUG "\tleb_ver %u\n", be32_to_cpu(vid_hdr->leb_ver)); |
64 | dbg_msg("data_size %d", be32_to_cpu(vid_hdr->data_size)); | 69 | printk(KERN_DEBUG "\tdata_size %d\n", be32_to_cpu(vid_hdr->data_size)); |
65 | dbg_msg("used_ebs %d", be32_to_cpu(vid_hdr->used_ebs)); | 70 | printk(KERN_DEBUG "\tused_ebs %d\n", be32_to_cpu(vid_hdr->used_ebs)); |
66 | dbg_msg("data_pad %d", be32_to_cpu(vid_hdr->data_pad)); | 71 | printk(KERN_DEBUG "\tdata_pad %d\n", be32_to_cpu(vid_hdr->data_pad)); |
67 | dbg_msg("sqnum %llu", | 72 | printk(KERN_DEBUG "\tsqnum %llu\n", |
68 | (unsigned long long)be64_to_cpu(vid_hdr->sqnum)); | 73 | (unsigned long long)be64_to_cpu(vid_hdr->sqnum)); |
69 | dbg_msg("hdr_crc %08x", be32_to_cpu(vid_hdr->hdr_crc)); | 74 | printk(KERN_DEBUG "\thdr_crc %08x\n", be32_to_cpu(vid_hdr->hdr_crc)); |
70 | dbg_msg("volume identifier header hexdump:"); | 75 | printk(KERN_DEBUG "Volume identifier header hexdump:\n"); |
76 | print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, | ||
77 | vid_hdr, UBI_VID_HDR_SIZE, 1); | ||
71 | } | 78 | } |
72 | 79 | ||
73 | /** | 80 | /** |
@@ -76,27 +83,27 @@ void ubi_dbg_dump_vid_hdr(const struct ubi_vid_hdr *vid_hdr) | |||
76 | */ | 83 | */ |
77 | void ubi_dbg_dump_vol_info(const struct ubi_volume *vol) | 84 | void ubi_dbg_dump_vol_info(const struct ubi_volume *vol) |
78 | { | 85 | { |
79 | dbg_msg("volume information dump:"); | 86 | printk(KERN_DEBUG "Volume information dump:\n"); |
80 | dbg_msg("vol_id %d", vol->vol_id); | 87 | printk(KERN_DEBUG "\tvol_id %d\n", vol->vol_id); |
81 | dbg_msg("reserved_pebs %d", vol->reserved_pebs); | 88 | printk(KERN_DEBUG "\treserved_pebs %d\n", vol->reserved_pebs); |
82 | dbg_msg("alignment %d", vol->alignment); | 89 | printk(KERN_DEBUG "\talignment %d\n", vol->alignment); |
83 | dbg_msg("data_pad %d", vol->data_pad); | 90 | printk(KERN_DEBUG "\tdata_pad %d\n", vol->data_pad); |
84 | dbg_msg("vol_type %d", vol->vol_type); | 91 | printk(KERN_DEBUG "\tvol_type %d\n", vol->vol_type); |
85 | dbg_msg("name_len %d", vol->name_len); | 92 | printk(KERN_DEBUG "\tname_len %d\n", vol->name_len); |
86 | dbg_msg("usable_leb_size %d", vol->usable_leb_size); | 93 | printk(KERN_DEBUG "\tusable_leb_size %d\n", vol->usable_leb_size); |
87 | dbg_msg("used_ebs %d", vol->used_ebs); | 94 | printk(KERN_DEBUG "\tused_ebs %d\n", vol->used_ebs); |
88 | dbg_msg("used_bytes %lld", vol->used_bytes); | 95 | printk(KERN_DEBUG "\tused_bytes %lld\n", vol->used_bytes); |
89 | dbg_msg("last_eb_bytes %d", vol->last_eb_bytes); | 96 | printk(KERN_DEBUG "\tlast_eb_bytes %d\n", vol->last_eb_bytes); |
90 | dbg_msg("corrupted %d", vol->corrupted); | 97 | printk(KERN_DEBUG "\tcorrupted %d\n", vol->corrupted); |
91 | dbg_msg("upd_marker %d", vol->upd_marker); | 98 | printk(KERN_DEBUG "\tupd_marker %d\n", vol->upd_marker); |
92 | 99 | ||
93 | if (vol->name_len <= UBI_VOL_NAME_MAX && | 100 | if (vol->name_len <= UBI_VOL_NAME_MAX && |
94 | strnlen(vol->name, vol->name_len + 1) == vol->name_len) { | 101 | strnlen(vol->name, vol->name_len + 1) == vol->name_len) { |
95 | dbg_msg("name %s", vol->name); | 102 | printk(KERN_DEBUG "\tname %s\n", vol->name); |
96 | } else { | 103 | } else { |
97 | dbg_msg("the 1st 5 characters of the name: %c%c%c%c%c", | 104 | printk(KERN_DEBUG "\t1st 5 characters of name: %c%c%c%c%c\n", |
98 | vol->name[0], vol->name[1], vol->name[2], | 105 | vol->name[0], vol->name[1], vol->name[2], |
99 | vol->name[3], vol->name[4]); | 106 | vol->name[3], vol->name[4]); |
100 | } | 107 | } |
101 | } | 108 | } |
102 | 109 | ||
@@ -109,28 +116,29 @@ void ubi_dbg_dump_vtbl_record(const struct ubi_vtbl_record *r, int idx) | |||
109 | { | 116 | { |
110 | int name_len = be16_to_cpu(r->name_len); | 117 | int name_len = be16_to_cpu(r->name_len); |
111 | 118 | ||
112 | dbg_msg("volume table record %d dump:", idx); | 119 | printk(KERN_DEBUG "Volume table record %d dump:\n", idx); |
113 | dbg_msg("reserved_pebs %d", be32_to_cpu(r->reserved_pebs)); | 120 | printk(KERN_DEBUG "\treserved_pebs %d\n", |
114 | dbg_msg("alignment %d", be32_to_cpu(r->alignment)); | 121 | be32_to_cpu(r->reserved_pebs)); |
115 | dbg_msg("data_pad %d", be32_to_cpu(r->data_pad)); | 122 | printk(KERN_DEBUG "\talignment %d\n", be32_to_cpu(r->alignment)); |
116 | dbg_msg("vol_type %d", (int)r->vol_type); | 123 | printk(KERN_DEBUG "\tdata_pad %d\n", be32_to_cpu(r->data_pad)); |
117 | dbg_msg("upd_marker %d", (int)r->upd_marker); | 124 | printk(KERN_DEBUG "\tvol_type %d\n", (int)r->vol_type); |
118 | dbg_msg("name_len %d", name_len); | 125 | printk(KERN_DEBUG "\tupd_marker %d\n", (int)r->upd_marker); |
126 | printk(KERN_DEBUG "\tname_len %d\n", name_len); | ||
119 | 127 | ||
120 | if (r->name[0] == '\0') { | 128 | if (r->name[0] == '\0') { |
121 | dbg_msg("name NULL"); | 129 | printk(KERN_DEBUG "\tname NULL\n"); |
122 | return; | 130 | return; |
123 | } | 131 | } |
124 | 132 | ||
125 | if (name_len <= UBI_VOL_NAME_MAX && | 133 | if (name_len <= UBI_VOL_NAME_MAX && |
126 | strnlen(&r->name[0], name_len + 1) == name_len) { | 134 | strnlen(&r->name[0], name_len + 1) == name_len) { |
127 | dbg_msg("name %s", &r->name[0]); | 135 | printk(KERN_DEBUG "\tname %s\n", &r->name[0]); |
128 | } else { | 136 | } else { |
129 | dbg_msg("1st 5 characters of the name: %c%c%c%c%c", | 137 | printk(KERN_DEBUG "\t1st 5 characters of name: %c%c%c%c%c\n", |
130 | r->name[0], r->name[1], r->name[2], r->name[3], | 138 | r->name[0], r->name[1], r->name[2], r->name[3], |
131 | r->name[4]); | 139 | r->name[4]); |
132 | } | 140 | } |
133 | dbg_msg("crc %#08x", be32_to_cpu(r->crc)); | 141 | printk(KERN_DEBUG "\tcrc %#08x\n", be32_to_cpu(r->crc)); |
134 | } | 142 | } |
135 | 143 | ||
136 | /** | 144 | /** |
@@ -139,15 +147,15 @@ void ubi_dbg_dump_vtbl_record(const struct ubi_vtbl_record *r, int idx) | |||
139 | */ | 147 | */ |
140 | void ubi_dbg_dump_sv(const struct ubi_scan_volume *sv) | 148 | void ubi_dbg_dump_sv(const struct ubi_scan_volume *sv) |
141 | { | 149 | { |
142 | dbg_msg("volume scanning information dump:"); | 150 | printk(KERN_DEBUG "Volume scanning information dump:\n"); |
143 | dbg_msg("vol_id %d", sv->vol_id); | 151 | printk(KERN_DEBUG "\tvol_id %d\n", sv->vol_id); |
144 | dbg_msg("highest_lnum %d", sv->highest_lnum); | 152 | printk(KERN_DEBUG "\thighest_lnum %d\n", sv->highest_lnum); |
145 | dbg_msg("leb_count %d", sv->leb_count); | 153 | printk(KERN_DEBUG "\tleb_count %d\n", sv->leb_count); |
146 | dbg_msg("compat %d", sv->compat); | 154 | printk(KERN_DEBUG "\tcompat %d\n", sv->compat); |
147 | dbg_msg("vol_type %d", sv->vol_type); | 155 | printk(KERN_DEBUG "\tvol_type %d\n", sv->vol_type); |
148 | dbg_msg("used_ebs %d", sv->used_ebs); | 156 | printk(KERN_DEBUG "\tused_ebs %d\n", sv->used_ebs); |
149 | dbg_msg("last_data_size %d", sv->last_data_size); | 157 | printk(KERN_DEBUG "\tlast_data_size %d\n", sv->last_data_size); |
150 | dbg_msg("data_pad %d", sv->data_pad); | 158 | printk(KERN_DEBUG "\tdata_pad %d\n", sv->data_pad); |
151 | } | 159 | } |
152 | 160 | ||
153 | /** | 161 | /** |
@@ -157,14 +165,14 @@ void ubi_dbg_dump_sv(const struct ubi_scan_volume *sv) | |||
157 | */ | 165 | */ |
158 | void ubi_dbg_dump_seb(const struct ubi_scan_leb *seb, int type) | 166 | void ubi_dbg_dump_seb(const struct ubi_scan_leb *seb, int type) |
159 | { | 167 | { |
160 | dbg_msg("eraseblock scanning information dump:"); | 168 | printk(KERN_DEBUG "eraseblock scanning information dump:\n"); |
161 | dbg_msg("ec %d", seb->ec); | 169 | printk(KERN_DEBUG "\tec %d\n", seb->ec); |
162 | dbg_msg("pnum %d", seb->pnum); | 170 | printk(KERN_DEBUG "\tpnum %d\n", seb->pnum); |
163 | if (type == 0) { | 171 | if (type == 0) { |
164 | dbg_msg("lnum %d", seb->lnum); | 172 | printk(KERN_DEBUG "\tlnum %d\n", seb->lnum); |
165 | dbg_msg("scrub %d", seb->scrub); | 173 | printk(KERN_DEBUG "\tscrub %d\n", seb->scrub); |
166 | dbg_msg("sqnum %llu", seb->sqnum); | 174 | printk(KERN_DEBUG "\tsqnum %llu\n", seb->sqnum); |
167 | dbg_msg("leb_ver %u", seb->leb_ver); | 175 | printk(KERN_DEBUG "\tleb_ver %u\n", seb->leb_ver); |
168 | } | 176 | } |
169 | } | 177 | } |
170 | 178 | ||
@@ -176,16 +184,16 @@ void ubi_dbg_dump_mkvol_req(const struct ubi_mkvol_req *req) | |||
176 | { | 184 | { |
177 | char nm[17]; | 185 | char nm[17]; |
178 | 186 | ||
179 | dbg_msg("volume creation request dump:"); | 187 | printk(KERN_DEBUG "Volume creation request dump:\n"); |
180 | dbg_msg("vol_id %d", req->vol_id); | 188 | printk(KERN_DEBUG "\tvol_id %d\n", req->vol_id); |
181 | dbg_msg("alignment %d", req->alignment); | 189 | printk(KERN_DEBUG "\talignment %d\n", req->alignment); |
182 | dbg_msg("bytes %lld", (long long)req->bytes); | 190 | printk(KERN_DEBUG "\tbytes %lld\n", (long long)req->bytes); |
183 | dbg_msg("vol_type %d", req->vol_type); | 191 | printk(KERN_DEBUG "\tvol_type %d\n", req->vol_type); |
184 | dbg_msg("name_len %d", req->name_len); | 192 | printk(KERN_DEBUG "\tname_len %d\n", req->name_len); |
185 | 193 | ||
186 | memcpy(nm, req->name, 16); | 194 | memcpy(nm, req->name, 16); |
187 | nm[16] = 0; | 195 | nm[16] = 0; |
188 | dbg_msg("the 1st 16 characters of the name: %s", nm); | 196 | printk(KERN_DEBUG "\t1st 16 characters of name: %s\n", nm); |
189 | } | 197 | } |
190 | 198 | ||
191 | #endif /* CONFIG_MTD_UBI_DEBUG_MSG */ | 199 | #endif /* CONFIG_MTD_UBI_DEBUG */ |
diff --git a/drivers/mtd/ubi/debug.h b/drivers/mtd/ubi/debug.h index 7d8d77c31dfe..78e914d23ece 100644 --- a/drivers/mtd/ubi/debug.h +++ b/drivers/mtd/ubi/debug.h | |||
@@ -24,21 +24,16 @@ | |||
24 | #ifdef CONFIG_MTD_UBI_DEBUG | 24 | #ifdef CONFIG_MTD_UBI_DEBUG |
25 | #include <linux/random.h> | 25 | #include <linux/random.h> |
26 | 26 | ||
27 | #define ubi_assert(expr) BUG_ON(!(expr)) | ||
28 | #define dbg_err(fmt, ...) ubi_err(fmt, ##__VA_ARGS__) | 27 | #define dbg_err(fmt, ...) ubi_err(fmt, ##__VA_ARGS__) |
29 | #else | ||
30 | #define ubi_assert(expr) ({}) | ||
31 | #define dbg_err(fmt, ...) ({}) | ||
32 | #endif | ||
33 | 28 | ||
34 | #ifdef CONFIG_MTD_UBI_DEBUG_DISABLE_BGT | 29 | #define ubi_assert(expr) do { \ |
35 | #define DBG_DISABLE_BGT 1 | 30 | if (unlikely(!(expr))) { \ |
36 | #else | 31 | printk(KERN_CRIT "UBI assert failed in %s at %u (pid %d)\n", \ |
37 | #define DBG_DISABLE_BGT 0 | 32 | __func__, __LINE__, current->pid); \ |
38 | #endif | 33 | ubi_dbg_dump_stack(); \ |
34 | } \ | ||
35 | } while (0) | ||
39 | 36 | ||
40 | #ifdef CONFIG_MTD_UBI_DEBUG_MSG | ||
41 | /* Generic debugging message */ | ||
42 | #define dbg_msg(fmt, ...) \ | 37 | #define dbg_msg(fmt, ...) \ |
43 | printk(KERN_DEBUG "UBI DBG (pid %d): %s: " fmt "\n", \ | 38 | printk(KERN_DEBUG "UBI DBG (pid %d): %s: " fmt "\n", \ |
44 | current->pid, __func__, ##__VA_ARGS__) | 39 | current->pid, __func__, ##__VA_ARGS__) |
@@ -61,19 +56,12 @@ void ubi_dbg_dump_sv(const struct ubi_scan_volume *sv); | |||
61 | void ubi_dbg_dump_seb(const struct ubi_scan_leb *seb, int type); | 56 | void ubi_dbg_dump_seb(const struct ubi_scan_leb *seb, int type); |
62 | void ubi_dbg_dump_mkvol_req(const struct ubi_mkvol_req *req); | 57 | void ubi_dbg_dump_mkvol_req(const struct ubi_mkvol_req *req); |
63 | 58 | ||
59 | #ifdef CONFIG_MTD_UBI_DEBUG_MSG | ||
60 | /* General debugging messages */ | ||
61 | #define dbg_gen(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | ||
64 | #else | 62 | #else |
65 | 63 | #define dbg_gen(fmt, ...) ({}) | |
66 | #define dbg_msg(fmt, ...) ({}) | 64 | #endif |
67 | #define ubi_dbg_dump_stack() ({}) | ||
68 | #define ubi_dbg_dump_ec_hdr(ec_hdr) ({}) | ||
69 | #define ubi_dbg_dump_vid_hdr(vid_hdr) ({}) | ||
70 | #define ubi_dbg_dump_vol_info(vol) ({}) | ||
71 | #define ubi_dbg_dump_vtbl_record(r, idx) ({}) | ||
72 | #define ubi_dbg_dump_sv(sv) ({}) | ||
73 | #define ubi_dbg_dump_seb(seb, type) ({}) | ||
74 | #define ubi_dbg_dump_mkvol_req(req) ({}) | ||
75 | |||
76 | #endif /* CONFIG_MTD_UBI_DEBUG_MSG */ | ||
77 | 65 | ||
78 | #ifdef CONFIG_MTD_UBI_DEBUG_MSG_EBA | 66 | #ifdef CONFIG_MTD_UBI_DEBUG_MSG_EBA |
79 | /* Messages from the eraseblock association sub-system */ | 67 | /* Messages from the eraseblock association sub-system */ |
@@ -105,6 +93,12 @@ void ubi_dbg_dump_mkvol_req(const struct ubi_mkvol_req *req); | |||
105 | #define UBI_IO_DEBUG 0 | 93 | #define UBI_IO_DEBUG 0 |
106 | #endif | 94 | #endif |
107 | 95 | ||
96 | #ifdef CONFIG_MTD_UBI_DEBUG_DISABLE_BGT | ||
97 | #define DBG_DISABLE_BGT 1 | ||
98 | #else | ||
99 | #define DBG_DISABLE_BGT 0 | ||
100 | #endif | ||
101 | |||
108 | #ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_BITFLIPS | 102 | #ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_BITFLIPS |
109 | /** | 103 | /** |
110 | * ubi_dbg_is_bitflip - if it is time to emulate a bit-flip. | 104 | * ubi_dbg_is_bitflip - if it is time to emulate a bit-flip. |
@@ -149,4 +143,30 @@ static inline int ubi_dbg_is_erase_failure(void) | |||
149 | #define ubi_dbg_is_erase_failure() 0 | 143 | #define ubi_dbg_is_erase_failure() 0 |
150 | #endif | 144 | #endif |
151 | 145 | ||
146 | #else | ||
147 | |||
148 | #define ubi_assert(expr) ({}) | ||
149 | #define dbg_err(fmt, ...) ({}) | ||
150 | #define dbg_msg(fmt, ...) ({}) | ||
151 | #define dbg_gen(fmt, ...) ({}) | ||
152 | #define dbg_eba(fmt, ...) ({}) | ||
153 | #define dbg_wl(fmt, ...) ({}) | ||
154 | #define dbg_io(fmt, ...) ({}) | ||
155 | #define dbg_bld(fmt, ...) ({}) | ||
156 | #define ubi_dbg_dump_stack() ({}) | ||
157 | #define ubi_dbg_dump_ec_hdr(ec_hdr) ({}) | ||
158 | #define ubi_dbg_dump_vid_hdr(vid_hdr) ({}) | ||
159 | #define ubi_dbg_dump_vol_info(vol) ({}) | ||
160 | #define ubi_dbg_dump_vtbl_record(r, idx) ({}) | ||
161 | #define ubi_dbg_dump_sv(sv) ({}) | ||
162 | #define ubi_dbg_dump_seb(seb, type) ({}) | ||
163 | #define ubi_dbg_dump_mkvol_req(req) ({}) | ||
164 | |||
165 | #define UBI_IO_DEBUG 0 | ||
166 | #define DBG_DISABLE_BGT 0 | ||
167 | #define ubi_dbg_is_bitflip() 0 | ||
168 | #define ubi_dbg_is_write_failure() 0 | ||
169 | #define ubi_dbg_is_erase_failure() 0 | ||
170 | |||
171 | #endif /* !CONFIG_MTD_UBI_DEBUG */ | ||
152 | #endif /* !__UBI_DEBUG_H__ */ | 172 | #endif /* !__UBI_DEBUG_H__ */ |
diff --git a/drivers/mtd/ubi/gluebi.c b/drivers/mtd/ubi/gluebi.c index ae76ab638b2f..49f52dceea93 100644 --- a/drivers/mtd/ubi/gluebi.c +++ b/drivers/mtd/ubi/gluebi.c | |||
@@ -111,7 +111,7 @@ static int gluebi_read(struct mtd_info *mtd, loff_t from, size_t len, | |||
111 | struct ubi_device *ubi; | 111 | struct ubi_device *ubi; |
112 | uint64_t tmp = from; | 112 | uint64_t tmp = from; |
113 | 113 | ||
114 | dbg_msg("read %zd bytes from offset %lld", len, from); | 114 | dbg_gen("read %zd bytes from offset %lld", len, from); |
115 | 115 | ||
116 | if (len < 0 || from < 0 || from + len > mtd->size) | 116 | if (len < 0 || from < 0 || from + len > mtd->size) |
117 | return -EINVAL; | 117 | return -EINVAL; |
@@ -162,7 +162,7 @@ static int gluebi_write(struct mtd_info *mtd, loff_t to, size_t len, | |||
162 | struct ubi_device *ubi; | 162 | struct ubi_device *ubi; |
163 | uint64_t tmp = to; | 163 | uint64_t tmp = to; |
164 | 164 | ||
165 | dbg_msg("write %zd bytes to offset %lld", len, to); | 165 | dbg_gen("write %zd bytes to offset %lld", len, to); |
166 | 166 | ||
167 | if (len < 0 || to < 0 || len + to > mtd->size) | 167 | if (len < 0 || to < 0 || len + to > mtd->size) |
168 | return -EINVAL; | 168 | return -EINVAL; |
@@ -215,7 +215,7 @@ static int gluebi_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
215 | struct ubi_volume *vol; | 215 | struct ubi_volume *vol; |
216 | struct ubi_device *ubi; | 216 | struct ubi_device *ubi; |
217 | 217 | ||
218 | dbg_msg("erase %u bytes at offset %u", instr->len, instr->addr); | 218 | dbg_gen("erase %u bytes at offset %u", instr->len, instr->addr); |
219 | 219 | ||
220 | if (instr->addr < 0 || instr->addr > mtd->size - mtd->erasesize) | 220 | if (instr->addr < 0 || instr->addr > mtd->size - mtd->erasesize) |
221 | return -EINVAL; | 221 | return -EINVAL; |
@@ -304,7 +304,7 @@ int ubi_create_gluebi(struct ubi_device *ubi, struct ubi_volume *vol) | |||
304 | return -ENFILE; | 304 | return -ENFILE; |
305 | } | 305 | } |
306 | 306 | ||
307 | dbg_msg("added mtd%d (\"%s\"), size %u, EB size %u", | 307 | dbg_gen("added mtd%d (\"%s\"), size %u, EB size %u", |
308 | mtd->index, mtd->name, mtd->size, mtd->erasesize); | 308 | mtd->index, mtd->name, mtd->size, mtd->erasesize); |
309 | return 0; | 309 | return 0; |
310 | } | 310 | } |
@@ -322,7 +322,7 @@ int ubi_destroy_gluebi(struct ubi_volume *vol) | |||
322 | int err; | 322 | int err; |
323 | struct mtd_info *mtd = &vol->gluebi_mtd; | 323 | struct mtd_info *mtd = &vol->gluebi_mtd; |
324 | 324 | ||
325 | dbg_msg("remove mtd%d", mtd->index); | 325 | dbg_gen("remove mtd%d", mtd->index); |
326 | err = del_mtd_device(mtd); | 326 | err = del_mtd_device(mtd); |
327 | if (err) | 327 | if (err) |
328 | return err; | 328 | return err; |
diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c index 561e7b2f96cb..27b9c2c2fc60 100644 --- a/drivers/mtd/ubi/io.c +++ b/drivers/mtd/ubi/io.c | |||
@@ -187,7 +187,7 @@ retry: | |||
187 | ubi_assert(len == read); | 187 | ubi_assert(len == read); |
188 | 188 | ||
189 | if (ubi_dbg_is_bitflip()) { | 189 | if (ubi_dbg_is_bitflip()) { |
190 | dbg_msg("bit-flip (emulated)"); | 190 | dbg_gen("bit-flip (emulated)"); |
191 | err = UBI_IO_BITFLIPS; | 191 | err = UBI_IO_BITFLIPS; |
192 | } | 192 | } |
193 | } | 193 | } |
@@ -1256,7 +1256,7 @@ static int paranoid_check_all_ff(struct ubi_device *ubi, int pnum, int offset, | |||
1256 | 1256 | ||
1257 | fail: | 1257 | fail: |
1258 | ubi_err("paranoid check failed for PEB %d", pnum); | 1258 | ubi_err("paranoid check failed for PEB %d", pnum); |
1259 | dbg_msg("hex dump of the %d-%d region", offset, offset + len); | 1259 | ubi_msg("hex dump of the %d-%d region", offset, offset + len); |
1260 | print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, | 1260 | print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, |
1261 | ubi->dbg_peb_buf, len, 1); | 1261 | ubi->dbg_peb_buf, len, 1); |
1262 | err = 1; | 1262 | err = 1; |
diff --git a/drivers/mtd/ubi/kapi.c b/drivers/mtd/ubi/kapi.c index e65c8e0bcd5d..5d9bcf109c13 100644 --- a/drivers/mtd/ubi/kapi.c +++ b/drivers/mtd/ubi/kapi.c | |||
@@ -106,7 +106,7 @@ struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode) | |||
106 | struct ubi_device *ubi; | 106 | struct ubi_device *ubi; |
107 | struct ubi_volume *vol; | 107 | struct ubi_volume *vol; |
108 | 108 | ||
109 | dbg_msg("open device %d volume %d, mode %d", ubi_num, vol_id, mode); | 109 | dbg_gen("open device %d volume %d, mode %d", ubi_num, vol_id, mode); |
110 | 110 | ||
111 | if (ubi_num < 0 || ubi_num >= UBI_MAX_DEVICES) | 111 | if (ubi_num < 0 || ubi_num >= UBI_MAX_DEVICES) |
112 | return ERR_PTR(-EINVAL); | 112 | return ERR_PTR(-EINVAL); |
@@ -215,7 +215,7 @@ struct ubi_volume_desc *ubi_open_volume_nm(int ubi_num, const char *name, | |||
215 | struct ubi_device *ubi; | 215 | struct ubi_device *ubi; |
216 | struct ubi_volume_desc *ret; | 216 | struct ubi_volume_desc *ret; |
217 | 217 | ||
218 | dbg_msg("open volume %s, mode %d", name, mode); | 218 | dbg_gen("open volume %s, mode %d", name, mode); |
219 | 219 | ||
220 | if (!name) | 220 | if (!name) |
221 | return ERR_PTR(-EINVAL); | 221 | return ERR_PTR(-EINVAL); |
@@ -266,7 +266,7 @@ void ubi_close_volume(struct ubi_volume_desc *desc) | |||
266 | struct ubi_volume *vol = desc->vol; | 266 | struct ubi_volume *vol = desc->vol; |
267 | struct ubi_device *ubi = vol->ubi; | 267 | struct ubi_device *ubi = vol->ubi; |
268 | 268 | ||
269 | dbg_msg("close volume %d, mode %d", vol->vol_id, desc->mode); | 269 | dbg_gen("close volume %d, mode %d", vol->vol_id, desc->mode); |
270 | 270 | ||
271 | spin_lock(&ubi->volumes_lock); | 271 | spin_lock(&ubi->volumes_lock); |
272 | switch (desc->mode) { | 272 | switch (desc->mode) { |
@@ -323,7 +323,7 @@ int ubi_leb_read(struct ubi_volume_desc *desc, int lnum, char *buf, int offset, | |||
323 | struct ubi_device *ubi = vol->ubi; | 323 | struct ubi_device *ubi = vol->ubi; |
324 | int err, vol_id = vol->vol_id; | 324 | int err, vol_id = vol->vol_id; |
325 | 325 | ||
326 | dbg_msg("read %d bytes from LEB %d:%d:%d", len, vol_id, lnum, offset); | 326 | dbg_gen("read %d bytes from LEB %d:%d:%d", len, vol_id, lnum, offset); |
327 | 327 | ||
328 | if (vol_id < 0 || vol_id >= ubi->vtbl_slots || lnum < 0 || | 328 | if (vol_id < 0 || vol_id >= ubi->vtbl_slots || lnum < 0 || |
329 | lnum >= vol->used_ebs || offset < 0 || len < 0 || | 329 | lnum >= vol->used_ebs || offset < 0 || len < 0 || |
@@ -388,7 +388,7 @@ int ubi_leb_write(struct ubi_volume_desc *desc, int lnum, const void *buf, | |||
388 | struct ubi_device *ubi = vol->ubi; | 388 | struct ubi_device *ubi = vol->ubi; |
389 | int vol_id = vol->vol_id; | 389 | int vol_id = vol->vol_id; |
390 | 390 | ||
391 | dbg_msg("write %d bytes to LEB %d:%d:%d", len, vol_id, lnum, offset); | 391 | dbg_gen("write %d bytes to LEB %d:%d:%d", len, vol_id, lnum, offset); |
392 | 392 | ||
393 | if (vol_id < 0 || vol_id >= ubi->vtbl_slots) | 393 | if (vol_id < 0 || vol_id >= ubi->vtbl_slots) |
394 | return -EINVAL; | 394 | return -EINVAL; |
@@ -438,7 +438,7 @@ int ubi_leb_change(struct ubi_volume_desc *desc, int lnum, const void *buf, | |||
438 | struct ubi_device *ubi = vol->ubi; | 438 | struct ubi_device *ubi = vol->ubi; |
439 | int vol_id = vol->vol_id; | 439 | int vol_id = vol->vol_id; |
440 | 440 | ||
441 | dbg_msg("atomically write %d bytes to LEB %d:%d", len, vol_id, lnum); | 441 | dbg_gen("atomically write %d bytes to LEB %d:%d", len, vol_id, lnum); |
442 | 442 | ||
443 | if (vol_id < 0 || vol_id >= ubi->vtbl_slots) | 443 | if (vol_id < 0 || vol_id >= ubi->vtbl_slots) |
444 | return -EINVAL; | 444 | return -EINVAL; |
@@ -482,7 +482,7 @@ int ubi_leb_erase(struct ubi_volume_desc *desc, int lnum) | |||
482 | struct ubi_device *ubi = vol->ubi; | 482 | struct ubi_device *ubi = vol->ubi; |
483 | int err; | 483 | int err; |
484 | 484 | ||
485 | dbg_msg("erase LEB %d:%d", vol->vol_id, lnum); | 485 | dbg_gen("erase LEB %d:%d", vol->vol_id, lnum); |
486 | 486 | ||
487 | if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME) | 487 | if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME) |
488 | return -EROFS; | 488 | return -EROFS; |
@@ -542,7 +542,7 @@ int ubi_leb_unmap(struct ubi_volume_desc *desc, int lnum) | |||
542 | struct ubi_volume *vol = desc->vol; | 542 | struct ubi_volume *vol = desc->vol; |
543 | struct ubi_device *ubi = vol->ubi; | 543 | struct ubi_device *ubi = vol->ubi; |
544 | 544 | ||
545 | dbg_msg("unmap LEB %d:%d", vol->vol_id, lnum); | 545 | dbg_gen("unmap LEB %d:%d", vol->vol_id, lnum); |
546 | 546 | ||
547 | if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME) | 547 | if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME) |
548 | return -EROFS; | 548 | return -EROFS; |
@@ -579,7 +579,7 @@ int ubi_leb_map(struct ubi_volume_desc *desc, int lnum, int dtype) | |||
579 | struct ubi_volume *vol = desc->vol; | 579 | struct ubi_volume *vol = desc->vol; |
580 | struct ubi_device *ubi = vol->ubi; | 580 | struct ubi_device *ubi = vol->ubi; |
581 | 581 | ||
582 | dbg_msg("unmap LEB %d:%d", vol->vol_id, lnum); | 582 | dbg_gen("unmap LEB %d:%d", vol->vol_id, lnum); |
583 | 583 | ||
584 | if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME) | 584 | if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME) |
585 | return -EROFS; | 585 | return -EROFS; |
@@ -621,7 +621,7 @@ int ubi_is_mapped(struct ubi_volume_desc *desc, int lnum) | |||
621 | { | 621 | { |
622 | struct ubi_volume *vol = desc->vol; | 622 | struct ubi_volume *vol = desc->vol; |
623 | 623 | ||
624 | dbg_msg("test LEB %d:%d", vol->vol_id, lnum); | 624 | dbg_gen("test LEB %d:%d", vol->vol_id, lnum); |
625 | 625 | ||
626 | if (lnum < 0 || lnum >= vol->reserved_pebs) | 626 | if (lnum < 0 || lnum >= vol->reserved_pebs) |
627 | return -EINVAL; | 627 | return -EINVAL; |
diff --git a/drivers/mtd/ubi/scan.c b/drivers/mtd/ubi/scan.c index 892c2ba49777..40eca9ce5fab 100644 --- a/drivers/mtd/ubi/scan.c +++ b/drivers/mtd/ubi/scan.c | |||
@@ -932,7 +932,7 @@ struct ubi_scan_info *ubi_scan(struct ubi_device *ubi) | |||
932 | for (pnum = 0; pnum < ubi->peb_count; pnum++) { | 932 | for (pnum = 0; pnum < ubi->peb_count; pnum++) { |
933 | cond_resched(); | 933 | cond_resched(); |
934 | 934 | ||
935 | dbg_msg("process PEB %d", pnum); | 935 | dbg_gen("process PEB %d", pnum); |
936 | err = process_eb(ubi, si, pnum); | 936 | err = process_eb(ubi, si, pnum); |
937 | if (err < 0) | 937 | if (err < 0) |
938 | goto out_vidh; | 938 | goto out_vidh; |
diff --git a/drivers/mtd/ubi/upd.c b/drivers/mtd/ubi/upd.c index 6fa1ab3f2a70..1230a5e1b530 100644 --- a/drivers/mtd/ubi/upd.c +++ b/drivers/mtd/ubi/upd.c | |||
@@ -56,11 +56,11 @@ static int set_update_marker(struct ubi_device *ubi, struct ubi_volume *vol) | |||
56 | int err; | 56 | int err; |
57 | struct ubi_vtbl_record vtbl_rec; | 57 | struct ubi_vtbl_record vtbl_rec; |
58 | 58 | ||
59 | dbg_msg("set update marker for volume %d", vol->vol_id); | 59 | dbg_gen("set update marker for volume %d", vol->vol_id); |
60 | 60 | ||
61 | if (vol->upd_marker) { | 61 | if (vol->upd_marker) { |
62 | ubi_assert(ubi->vtbl[vol->vol_id].upd_marker); | 62 | ubi_assert(ubi->vtbl[vol->vol_id].upd_marker); |
63 | dbg_msg("already set"); | 63 | dbg_gen("already set"); |
64 | return 0; | 64 | return 0; |
65 | } | 65 | } |
66 | 66 | ||
@@ -92,7 +92,7 @@ static int clear_update_marker(struct ubi_device *ubi, struct ubi_volume *vol, | |||
92 | uint64_t tmp; | 92 | uint64_t tmp; |
93 | struct ubi_vtbl_record vtbl_rec; | 93 | struct ubi_vtbl_record vtbl_rec; |
94 | 94 | ||
95 | dbg_msg("clear update marker for volume %d", vol->vol_id); | 95 | dbg_gen("clear update marker for volume %d", vol->vol_id); |
96 | 96 | ||
97 | memcpy(&vtbl_rec, &ubi->vtbl[vol->vol_id], | 97 | memcpy(&vtbl_rec, &ubi->vtbl[vol->vol_id], |
98 | sizeof(struct ubi_vtbl_record)); | 98 | sizeof(struct ubi_vtbl_record)); |
@@ -133,7 +133,7 @@ int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol, | |||
133 | int i, err; | 133 | int i, err; |
134 | uint64_t tmp; | 134 | uint64_t tmp; |
135 | 135 | ||
136 | dbg_msg("start update of volume %d, %llu bytes", vol->vol_id, bytes); | 136 | dbg_gen("start update of volume %d, %llu bytes", vol->vol_id, bytes); |
137 | ubi_assert(!vol->updating && !vol->changing_leb); | 137 | ubi_assert(!vol->updating && !vol->changing_leb); |
138 | vol->updating = 1; | 138 | vol->updating = 1; |
139 | 139 | ||
@@ -183,7 +183,7 @@ int ubi_start_leb_change(struct ubi_device *ubi, struct ubi_volume *vol, | |||
183 | { | 183 | { |
184 | ubi_assert(!vol->updating && !vol->changing_leb); | 184 | ubi_assert(!vol->updating && !vol->changing_leb); |
185 | 185 | ||
186 | dbg_msg("start changing LEB %d:%d, %u bytes", | 186 | dbg_gen("start changing LEB %d:%d, %u bytes", |
187 | vol->vol_id, req->lnum, req->bytes); | 187 | vol->vol_id, req->lnum, req->bytes); |
188 | if (req->bytes == 0) | 188 | if (req->bytes == 0) |
189 | return ubi_eba_atomic_leb_change(ubi, vol, req->lnum, NULL, 0, | 189 | return ubi_eba_atomic_leb_change(ubi, vol, req->lnum, NULL, 0, |
@@ -242,7 +242,7 @@ static int write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum, | |||
242 | memset(buf + len, 0xFF, l - len); | 242 | memset(buf + len, 0xFF, l - len); |
243 | len = ubi_calc_data_len(ubi, buf, l); | 243 | len = ubi_calc_data_len(ubi, buf, l); |
244 | if (len == 0) { | 244 | if (len == 0) { |
245 | dbg_msg("all %d bytes contain 0xFF - skip", len); | 245 | dbg_gen("all %d bytes contain 0xFF - skip", len); |
246 | return 0; | 246 | return 0; |
247 | } | 247 | } |
248 | 248 | ||
@@ -283,7 +283,7 @@ int ubi_more_update_data(struct ubi_device *ubi, struct ubi_volume *vol, | |||
283 | uint64_t tmp; | 283 | uint64_t tmp; |
284 | int lnum, offs, err = 0, len, to_write = count; | 284 | int lnum, offs, err = 0, len, to_write = count; |
285 | 285 | ||
286 | dbg_msg("write %d of %lld bytes, %lld already passed", | 286 | dbg_gen("write %d of %lld bytes, %lld already passed", |
287 | count, vol->upd_bytes, vol->upd_received); | 287 | count, vol->upd_bytes, vol->upd_received); |
288 | 288 | ||
289 | if (ubi->ro_mode) | 289 | if (ubi->ro_mode) |
@@ -400,7 +400,7 @@ int ubi_more_leb_change_data(struct ubi_device *ubi, struct ubi_volume *vol, | |||
400 | { | 400 | { |
401 | int err; | 401 | int err; |
402 | 402 | ||
403 | dbg_msg("write %d of %lld bytes, %lld already passed", | 403 | dbg_gen("write %d of %lld bytes, %lld already passed", |
404 | count, vol->upd_bytes, vol->upd_received); | 404 | count, vol->upd_bytes, vol->upd_received); |
405 | 405 | ||
406 | if (ubi->ro_mode) | 406 | if (ubi->ro_mode) |
diff --git a/drivers/mtd/ubi/vmt.c b/drivers/mtd/ubi/vmt.c index bfa7c5d2e064..2cd886a5adac 100644 --- a/drivers/mtd/ubi/vmt.c +++ b/drivers/mtd/ubi/vmt.c | |||
@@ -28,9 +28,9 @@ | |||
28 | #include "ubi.h" | 28 | #include "ubi.h" |
29 | 29 | ||
30 | #ifdef CONFIG_MTD_UBI_DEBUG_PARANOID | 30 | #ifdef CONFIG_MTD_UBI_DEBUG_PARANOID |
31 | static void paranoid_check_volumes(struct ubi_device *ubi); | 31 | static int paranoid_check_volumes(struct ubi_device *ubi); |
32 | #else | 32 | #else |
33 | #define paranoid_check_volumes(ubi) | 33 | #define paranoid_check_volumes(ubi) 0 |
34 | #endif | 34 | #endif |
35 | 35 | ||
36 | static ssize_t vol_attribute_show(struct device *dev, | 36 | static ssize_t vol_attribute_show(struct device *dev, |
@@ -218,7 +218,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) | |||
218 | spin_lock(&ubi->volumes_lock); | 218 | spin_lock(&ubi->volumes_lock); |
219 | if (vol_id == UBI_VOL_NUM_AUTO) { | 219 | if (vol_id == UBI_VOL_NUM_AUTO) { |
220 | /* Find unused volume ID */ | 220 | /* Find unused volume ID */ |
221 | dbg_msg("search for vacant volume ID"); | 221 | dbg_gen("search for vacant volume ID"); |
222 | for (i = 0; i < ubi->vtbl_slots; i++) | 222 | for (i = 0; i < ubi->vtbl_slots; i++) |
223 | if (!ubi->volumes[i]) { | 223 | if (!ubi->volumes[i]) { |
224 | vol_id = i; | 224 | vol_id = i; |
@@ -233,7 +233,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) | |||
233 | req->vol_id = vol_id; | 233 | req->vol_id = vol_id; |
234 | } | 234 | } |
235 | 235 | ||
236 | dbg_msg("volume ID %d, %llu bytes, type %d, name %s", | 236 | dbg_gen("volume ID %d, %llu bytes, type %d, name %s", |
237 | vol_id, (unsigned long long)req->bytes, | 237 | vol_id, (unsigned long long)req->bytes, |
238 | (int)req->vol_type, req->name); | 238 | (int)req->vol_type, req->name); |
239 | 239 | ||
@@ -361,8 +361,8 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) | |||
361 | ubi->vol_count += 1; | 361 | ubi->vol_count += 1; |
362 | spin_unlock(&ubi->volumes_lock); | 362 | spin_unlock(&ubi->volumes_lock); |
363 | 363 | ||
364 | paranoid_check_volumes(ubi); | 364 | err = paranoid_check_volumes(ubi); |
365 | return 0; | 365 | return err; |
366 | 366 | ||
367 | out_sysfs: | 367 | out_sysfs: |
368 | /* | 368 | /* |
@@ -414,7 +414,7 @@ int ubi_remove_volume(struct ubi_volume_desc *desc) | |||
414 | struct ubi_device *ubi = vol->ubi; | 414 | struct ubi_device *ubi = vol->ubi; |
415 | int i, err, vol_id = vol->vol_id, reserved_pebs = vol->reserved_pebs; | 415 | int i, err, vol_id = vol->vol_id, reserved_pebs = vol->reserved_pebs; |
416 | 416 | ||
417 | dbg_msg("remove UBI volume %d", vol_id); | 417 | dbg_gen("remove UBI volume %d", vol_id); |
418 | ubi_assert(desc->mode == UBI_EXCLUSIVE); | 418 | ubi_assert(desc->mode == UBI_EXCLUSIVE); |
419 | ubi_assert(vol == ubi->volumes[vol_id]); | 419 | ubi_assert(vol == ubi->volumes[vol_id]); |
420 | 420 | ||
@@ -465,8 +465,8 @@ int ubi_remove_volume(struct ubi_volume_desc *desc) | |||
465 | ubi->vol_count -= 1; | 465 | ubi->vol_count -= 1; |
466 | spin_unlock(&ubi->volumes_lock); | 466 | spin_unlock(&ubi->volumes_lock); |
467 | 467 | ||
468 | paranoid_check_volumes(ubi); | 468 | err = paranoid_check_volumes(ubi); |
469 | return 0; | 469 | return err; |
470 | 470 | ||
471 | out_err: | 471 | out_err: |
472 | ubi_err("cannot remove volume %d, error %d", vol_id, err); | 472 | ubi_err("cannot remove volume %d, error %d", vol_id, err); |
@@ -497,7 +497,7 @@ int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs) | |||
497 | if (ubi->ro_mode) | 497 | if (ubi->ro_mode) |
498 | return -EROFS; | 498 | return -EROFS; |
499 | 499 | ||
500 | dbg_msg("re-size volume %d to from %d to %d PEBs", | 500 | dbg_gen("re-size volume %d to from %d to %d PEBs", |
501 | vol_id, vol->reserved_pebs, reserved_pebs); | 501 | vol_id, vol->reserved_pebs, reserved_pebs); |
502 | 502 | ||
503 | if (vol->vol_type == UBI_STATIC_VOLUME && | 503 | if (vol->vol_type == UBI_STATIC_VOLUME && |
@@ -586,8 +586,8 @@ int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs) | |||
586 | (long long)vol->used_ebs * vol->usable_leb_size; | 586 | (long long)vol->used_ebs * vol->usable_leb_size; |
587 | } | 587 | } |
588 | 588 | ||
589 | paranoid_check_volumes(ubi); | 589 | err = paranoid_check_volumes(ubi); |
590 | return 0; | 590 | return err; |
591 | 591 | ||
592 | out_acc: | 592 | out_acc: |
593 | if (pebs > 0) { | 593 | if (pebs > 0) { |
@@ -615,8 +615,7 @@ int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol) | |||
615 | int err, vol_id = vol->vol_id; | 615 | int err, vol_id = vol->vol_id; |
616 | dev_t dev; | 616 | dev_t dev; |
617 | 617 | ||
618 | dbg_msg("add volume %d", vol_id); | 618 | dbg_gen("add volume %d", vol_id); |
619 | ubi_dbg_dump_vol_info(vol); | ||
620 | 619 | ||
621 | /* Register character device for the volume */ | 620 | /* Register character device for the volume */ |
622 | cdev_init(&vol->cdev, &ubi_vol_cdev_operations); | 621 | cdev_init(&vol->cdev, &ubi_vol_cdev_operations); |
@@ -650,8 +649,8 @@ int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol) | |||
650 | return err; | 649 | return err; |
651 | } | 650 | } |
652 | 651 | ||
653 | paranoid_check_volumes(ubi); | 652 | err = paranoid_check_volumes(ubi); |
654 | return 0; | 653 | return err; |
655 | 654 | ||
656 | out_gluebi: | 655 | out_gluebi: |
657 | err = ubi_destroy_gluebi(vol); | 656 | err = ubi_destroy_gluebi(vol); |
@@ -672,7 +671,7 @@ void ubi_free_volume(struct ubi_device *ubi, struct ubi_volume *vol) | |||
672 | { | 671 | { |
673 | int err; | 672 | int err; |
674 | 673 | ||
675 | dbg_msg("free volume %d", vol->vol_id); | 674 | dbg_gen("free volume %d", vol->vol_id); |
676 | 675 | ||
677 | ubi->volumes[vol->vol_id] = NULL; | 676 | ubi->volumes[vol->vol_id] = NULL; |
678 | err = ubi_destroy_gluebi(vol); | 677 | err = ubi_destroy_gluebi(vol); |
@@ -686,8 +685,10 @@ void ubi_free_volume(struct ubi_device *ubi, struct ubi_volume *vol) | |||
686 | * paranoid_check_volume - check volume information. | 685 | * paranoid_check_volume - check volume information. |
687 | * @ubi: UBI device description object | 686 | * @ubi: UBI device description object |
688 | * @vol_id: volume ID | 687 | * @vol_id: volume ID |
688 | * | ||
689 | * Returns zero if volume is all right and a a negative error code if not. | ||
689 | */ | 690 | */ |
690 | static void paranoid_check_volume(struct ubi_device *ubi, int vol_id) | 691 | static int paranoid_check_volume(struct ubi_device *ubi, int vol_id) |
691 | { | 692 | { |
692 | int idx = vol_id2idx(ubi, vol_id); | 693 | int idx = vol_id2idx(ubi, vol_id); |
693 | int reserved_pebs, alignment, data_pad, vol_type, name_len, upd_marker; | 694 | int reserved_pebs, alignment, data_pad, vol_type, name_len, upd_marker; |
@@ -705,16 +706,7 @@ static void paranoid_check_volume(struct ubi_device *ubi, int vol_id) | |||
705 | goto fail; | 706 | goto fail; |
706 | } | 707 | } |
707 | spin_unlock(&ubi->volumes_lock); | 708 | spin_unlock(&ubi->volumes_lock); |
708 | return; | 709 | return 0; |
709 | } | ||
710 | |||
711 | if (vol->exclusive) { | ||
712 | /* | ||
713 | * The volume may be being created at the moment, do not check | ||
714 | * it (e.g., it may be in the middle of ubi_create_volume(). | ||
715 | */ | ||
716 | spin_unlock(&ubi->volumes_lock); | ||
717 | return; | ||
718 | } | 710 | } |
719 | 711 | ||
720 | if (vol->reserved_pebs < 0 || vol->alignment < 0 || vol->data_pad < 0 || | 712 | if (vol->reserved_pebs < 0 || vol->alignment < 0 || vol->data_pad < 0 || |
@@ -830,25 +822,34 @@ static void paranoid_check_volume(struct ubi_device *ubi, int vol_id) | |||
830 | } | 822 | } |
831 | 823 | ||
832 | spin_unlock(&ubi->volumes_lock); | 824 | spin_unlock(&ubi->volumes_lock); |
833 | return; | 825 | return 0; |
834 | 826 | ||
835 | fail: | 827 | fail: |
836 | ubi_err("paranoid check failed for volume %d", vol_id); | 828 | ubi_err("paranoid check failed for volume %d", vol_id); |
837 | ubi_dbg_dump_vol_info(vol); | 829 | if (vol) { |
838 | ubi_dbg_dump_vtbl_record(&ubi->vtbl[vol_id], vol_id); | 830 | ubi_dbg_dump_vol_info(vol); |
831 | ubi_dbg_dump_vtbl_record(&ubi->vtbl[vol_id], vol_id); | ||
832 | } | ||
839 | spin_unlock(&ubi->volumes_lock); | 833 | spin_unlock(&ubi->volumes_lock); |
840 | BUG(); | 834 | return -EINVAL; |
841 | } | 835 | } |
842 | 836 | ||
843 | /** | 837 | /** |
844 | * paranoid_check_volumes - check information about all volumes. | 838 | * paranoid_check_volumes - check information about all volumes. |
845 | * @ubi: UBI device description object | 839 | * @ubi: UBI device description object |
840 | * | ||
841 | * Returns zero if volumes are all right and a a negative error code if not. | ||
846 | */ | 842 | */ |
847 | static void paranoid_check_volumes(struct ubi_device *ubi) | 843 | static int paranoid_check_volumes(struct ubi_device *ubi) |
848 | { | 844 | { |
849 | int i; | 845 | int i, err = 0; |
850 | 846 | ||
851 | for (i = 0; i < ubi->vtbl_slots; i++) | 847 | for (i = 0; i < ubi->vtbl_slots; i++) { |
852 | paranoid_check_volume(ubi, i); | 848 | err = paranoid_check_volume(ubi, i); |
849 | if (err) | ||
850 | break; | ||
851 | } | ||
852 | |||
853 | return err; | ||
853 | } | 854 | } |
854 | #endif | 855 | #endif |
diff --git a/drivers/mtd/ubi/vtbl.c b/drivers/mtd/ubi/vtbl.c index d9af11a8682b..05fb72fd268f 100644 --- a/drivers/mtd/ubi/vtbl.c +++ b/drivers/mtd/ubi/vtbl.c | |||
@@ -371,7 +371,7 @@ static struct ubi_vtbl_record *process_lvol(struct ubi_device *ubi, | |||
371 | * to LEB 0. | 371 | * to LEB 0. |
372 | */ | 372 | */ |
373 | 373 | ||
374 | dbg_msg("check layout volume"); | 374 | dbg_gen("check layout volume"); |
375 | 375 | ||
376 | /* Read both LEB 0 and LEB 1 into memory */ | 376 | /* Read both LEB 0 and LEB 1 into memory */ |
377 | ubi_rb_for_each_entry(rb, seb, &sv->root, u.rb) { | 377 | ubi_rb_for_each_entry(rb, seb, &sv->root, u.rb) { |