Commit 32608703 authored by Tanya Brokhman's avatar Tanya Brokhman Committed by Artem Bityutskiy

UBI: Extend UBI layer debug/messaging capabilities

If there is more then one UBI device mounted, there is no way to
distinguish between messages from different UBI devices.
Add device number to all ubi layer message types.

The R/O block driver messages were replaced by pr_* since
ubi_device structure is not used by it.

Amended a bit by Artem.
Signed-off-by: default avatarTanya Brokhman <tlinder@codeaurora.org>
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
parent 789c8993
This diff is collapsed.
...@@ -111,13 +111,13 @@ static int __init ubiblock_set_param(const char *val, ...@@ -111,13 +111,13 @@ static int __init ubiblock_set_param(const char *val,
len = strnlen(val, UBIBLOCK_PARAM_LEN); len = strnlen(val, UBIBLOCK_PARAM_LEN);
if (len == 0) { if (len == 0) {
ubi_warn("block: empty 'block=' parameter - ignored\n"); pr_warn("UBI: block: empty 'block=' parameter - ignored\n");
return 0; return 0;
} }
if (len == UBIBLOCK_PARAM_LEN) { if (len == UBIBLOCK_PARAM_LEN) {
ubi_err("block: parameter \"%s\" is too long, max. is %d\n", pr_err("UBI: block: parameter \"%s\" is too long, max. is %d\n",
val, UBIBLOCK_PARAM_LEN); val, UBIBLOCK_PARAM_LEN);
return -EINVAL; return -EINVAL;
} }
...@@ -188,9 +188,8 @@ static int ubiblock_read_to_buf(struct ubiblock *dev, char *buffer, ...@@ -188,9 +188,8 @@ static int ubiblock_read_to_buf(struct ubiblock *dev, char *buffer,
ret = ubi_read(dev->desc, leb, buffer, offset, len); ret = ubi_read(dev->desc, leb, buffer, offset, len);
if (ret) { if (ret) {
ubi_err("%s: error %d while reading from LEB %d (offset %d, " dev_err(disk_to_dev(dev->gd), "%d while reading from LEB %d (offset %d, length %d)",
"length %d)", dev->gd->disk_name, ret, leb, offset, ret, leb, offset, len);
len);
return ret; return ret;
} }
return 0; return 0;
...@@ -328,8 +327,8 @@ static int ubiblock_open(struct block_device *bdev, fmode_t mode) ...@@ -328,8 +327,8 @@ static int ubiblock_open(struct block_device *bdev, fmode_t mode)
dev->desc = ubi_open_volume(dev->ubi_num, dev->vol_id, UBI_READONLY); dev->desc = ubi_open_volume(dev->ubi_num, dev->vol_id, UBI_READONLY);
if (IS_ERR(dev->desc)) { if (IS_ERR(dev->desc)) {
ubi_err("%s failed to open ubi volume %d_%d", dev_err(disk_to_dev(dev->gd), "failed to open ubi volume %d_%d",
dev->gd->disk_name, dev->ubi_num, dev->vol_id); dev->ubi_num, dev->vol_id);
ret = PTR_ERR(dev->desc); ret = PTR_ERR(dev->desc);
dev->desc = NULL; dev->desc = NULL;
goto out_unlock; goto out_unlock;
...@@ -405,7 +404,7 @@ int ubiblock_create(struct ubi_volume_info *vi) ...@@ -405,7 +404,7 @@ int ubiblock_create(struct ubi_volume_info *vi)
/* Initialize the gendisk of this ubiblock device */ /* Initialize the gendisk of this ubiblock device */
gd = alloc_disk(1); gd = alloc_disk(1);
if (!gd) { if (!gd) {
ubi_err("block: alloc_disk failed"); pr_err("UBI: block: alloc_disk failed");
ret = -ENODEV; ret = -ENODEV;
goto out_free_dev; goto out_free_dev;
} }
...@@ -421,7 +420,7 @@ int ubiblock_create(struct ubi_volume_info *vi) ...@@ -421,7 +420,7 @@ int ubiblock_create(struct ubi_volume_info *vi)
spin_lock_init(&dev->queue_lock); spin_lock_init(&dev->queue_lock);
dev->rq = blk_init_queue(ubiblock_request, &dev->queue_lock); dev->rq = blk_init_queue(ubiblock_request, &dev->queue_lock);
if (!dev->rq) { if (!dev->rq) {
ubi_err("block: blk_init_queue failed"); dev_err(disk_to_dev(gd), "blk_init_queue failed");
ret = -ENODEV; ret = -ENODEV;
goto out_put_disk; goto out_put_disk;
} }
...@@ -446,8 +445,8 @@ int ubiblock_create(struct ubi_volume_info *vi) ...@@ -446,8 +445,8 @@ int ubiblock_create(struct ubi_volume_info *vi)
/* Must be the last step: anyone can call file ops from now on */ /* Must be the last step: anyone can call file ops from now on */
add_disk(dev->gd); add_disk(dev->gd);
ubi_msg("%s created from ubi%d:%d(%s)", dev_info(disk_to_dev(dev->gd), "created from ubi%d:%d(%s)",
dev->gd->disk_name, dev->ubi_num, dev->vol_id, vi->name); dev->ubi_num, dev->vol_id, vi->name);
return 0; return 0;
out_free_queue: out_free_queue:
...@@ -464,7 +463,7 @@ static void ubiblock_cleanup(struct ubiblock *dev) ...@@ -464,7 +463,7 @@ static void ubiblock_cleanup(struct ubiblock *dev)
{ {
del_gendisk(dev->gd); del_gendisk(dev->gd);
blk_cleanup_queue(dev->rq); blk_cleanup_queue(dev->rq);
ubi_msg("%s released", dev->gd->disk_name); dev_info(disk_to_dev(dev->gd), "released");
put_disk(dev->gd); put_disk(dev->gd);
} }
...@@ -518,8 +517,8 @@ static int ubiblock_resize(struct ubi_volume_info *vi) ...@@ -518,8 +517,8 @@ static int ubiblock_resize(struct ubi_volume_info *vi)
} }
if ((sector_t)disk_capacity != disk_capacity) { if ((sector_t)disk_capacity != disk_capacity) {
mutex_unlock(&devices_mutex); mutex_unlock(&devices_mutex);
ubi_warn("%s: the volume is too big (%d LEBs), cannot resize", dev_warn(disk_to_dev(dev->gd), "the volume is too big (%d LEBs), cannot resize",
dev->gd->disk_name, vi->size); vi->size);
return -EFBIG; return -EFBIG;
} }
...@@ -527,8 +526,8 @@ static int ubiblock_resize(struct ubi_volume_info *vi) ...@@ -527,8 +526,8 @@ static int ubiblock_resize(struct ubi_volume_info *vi)
if (get_capacity(dev->gd) != disk_capacity) { if (get_capacity(dev->gd) != disk_capacity) {
set_capacity(dev->gd, disk_capacity); set_capacity(dev->gd, disk_capacity);
ubi_msg("%s resized to %lld bytes", dev->gd->disk_name, dev_info(disk_to_dev(dev->gd), "resized to %lld bytes",
vi->used_bytes); vi->used_bytes);
} }
mutex_unlock(&dev->dev_mutex); mutex_unlock(&dev->dev_mutex);
mutex_unlock(&devices_mutex); mutex_unlock(&devices_mutex);
...@@ -596,8 +595,8 @@ static int __init ubiblock_create_from_param(void) ...@@ -596,8 +595,8 @@ static int __init ubiblock_create_from_param(void)
desc = open_volume_desc(p->name, p->ubi_num, p->vol_id); desc = open_volume_desc(p->name, p->ubi_num, p->vol_id);
if (IS_ERR(desc)) { if (IS_ERR(desc)) {
ubi_err("block: can't open volume, err=%ld\n", pr_err("UBI: block: can't open volume, err=%ld\n",
PTR_ERR(desc)); PTR_ERR(desc));
ret = PTR_ERR(desc); ret = PTR_ERR(desc);
break; break;
} }
...@@ -607,8 +606,8 @@ static int __init ubiblock_create_from_param(void) ...@@ -607,8 +606,8 @@ static int __init ubiblock_create_from_param(void)
ret = ubiblock_create(&vi); ret = ubiblock_create(&vi);
if (ret) { if (ret) {
ubi_err("block: can't add '%s' volume, err=%d\n", pr_err("UBI: block: can't add '%s' volume, err=%d\n",
vi.name, ret); vi.name, ret);
break; break;
} }
} }
......
This diff is collapsed.
...@@ -48,13 +48,14 @@ ...@@ -48,13 +48,14 @@
/** /**
* get_exclusive - get exclusive access to an UBI volume. * get_exclusive - get exclusive access to an UBI volume.
* @ubi: UBI device description object
* @desc: volume descriptor * @desc: volume descriptor
* *
* This function changes UBI volume open mode to "exclusive". Returns previous * This function changes UBI volume open mode to "exclusive". Returns previous
* mode value (positive integer) in case of success and a negative error code * mode value (positive integer) in case of success and a negative error code
* in case of failure. * in case of failure.
*/ */
static int get_exclusive(struct ubi_volume_desc *desc) static int get_exclusive(struct ubi_device *ubi, struct ubi_volume_desc *desc)
{ {
int users, err; int users, err;
struct ubi_volume *vol = desc->vol; struct ubi_volume *vol = desc->vol;
...@@ -63,7 +64,7 @@ static int get_exclusive(struct ubi_volume_desc *desc) ...@@ -63,7 +64,7 @@ static int get_exclusive(struct ubi_volume_desc *desc)
users = vol->readers + vol->writers + vol->exclusive; users = vol->readers + vol->writers + vol->exclusive;
ubi_assert(users > 0); ubi_assert(users > 0);
if (users > 1) { if (users > 1) {
ubi_err("%d users for volume %d", users, vol->vol_id); ubi_err(ubi, "%d users for volume %d", users, vol->vol_id);
err = -EBUSY; err = -EBUSY;
} else { } else {
vol->readers = vol->writers = 0; vol->readers = vol->writers = 0;
...@@ -134,7 +135,7 @@ static int vol_cdev_release(struct inode *inode, struct file *file) ...@@ -134,7 +135,7 @@ static int vol_cdev_release(struct inode *inode, struct file *file)
vol->ubi->ubi_num, vol->vol_id, desc->mode); vol->ubi->ubi_num, vol->vol_id, desc->mode);
if (vol->updating) { if (vol->updating) {
ubi_warn("update of volume %d not finished, volume is damaged", ubi_warn(vol->ubi, "update of volume %d not finished, volume is damaged",
vol->vol_id); vol->vol_id);
ubi_assert(!vol->changing_leb); ubi_assert(!vol->changing_leb);
vol->updating = 0; vol->updating = 0;
...@@ -158,7 +159,7 @@ static loff_t vol_cdev_llseek(struct file *file, loff_t offset, int origin) ...@@ -158,7 +159,7 @@ static loff_t vol_cdev_llseek(struct file *file, loff_t offset, int origin)
if (vol->updating) { if (vol->updating) {
/* Update is in progress, seeking is prohibited */ /* Update is in progress, seeking is prohibited */
ubi_err("updating"); ubi_err(vol->ubi, "updating");
return -EBUSY; return -EBUSY;
} }
...@@ -193,11 +194,11 @@ static ssize_t vol_cdev_read(struct file *file, __user char *buf, size_t count, ...@@ -193,11 +194,11 @@ static ssize_t vol_cdev_read(struct file *file, __user char *buf, size_t count,
count, *offp, vol->vol_id); count, *offp, vol->vol_id);
if (vol->updating) { if (vol->updating) {
ubi_err("updating"); ubi_err(vol->ubi, "updating");
return -EBUSY; return -EBUSY;
} }
if (vol->upd_marker) { if (vol->upd_marker) {
ubi_err("damaged volume, update marker is set"); ubi_err(vol->ubi, "damaged volume, update marker is set");
return -EBADF; return -EBADF;
} }
if (*offp == vol->used_bytes || count == 0) if (*offp == vol->used_bytes || count == 0)
...@@ -277,7 +278,7 @@ static ssize_t vol_cdev_direct_write(struct file *file, const char __user *buf, ...@@ -277,7 +278,7 @@ static ssize_t vol_cdev_direct_write(struct file *file, const char __user *buf,
lnum = div_u64_rem(*offp, vol->usable_leb_size, &off); lnum = div_u64_rem(*offp, vol->usable_leb_size, &off);
if (off & (ubi->min_io_size - 1)) { if (off & (ubi->min_io_size - 1)) {
ubi_err("unaligned position"); ubi_err(ubi, "unaligned position");
return -EINVAL; return -EINVAL;
} }
...@@ -286,7 +287,7 @@ static ssize_t vol_cdev_direct_write(struct file *file, const char __user *buf, ...@@ -286,7 +287,7 @@ static ssize_t vol_cdev_direct_write(struct file *file, const char __user *buf,
/* We can write only in fractions of the minimum I/O unit */ /* We can write only in fractions of the minimum I/O unit */
if (count & (ubi->min_io_size - 1)) { if (count & (ubi->min_io_size - 1)) {
ubi_err("unaligned write length"); ubi_err(ubi, "unaligned write length");
return -EINVAL; return -EINVAL;
} }
...@@ -348,7 +349,7 @@ static ssize_t vol_cdev_write(struct file *file, const char __user *buf, ...@@ -348,7 +349,7 @@ static ssize_t vol_cdev_write(struct file *file, const char __user *buf,
err = ubi_more_leb_change_data(ubi, vol, buf, count); err = ubi_more_leb_change_data(ubi, vol, buf, count);
if (err < 0) { if (err < 0) {
ubi_err("cannot accept more %zd bytes of data, error %d", ubi_err(ubi, "cannot accept more %zd bytes of data, error %d",
count, err); count, err);
return err; return err;
} }
...@@ -370,7 +371,7 @@ static ssize_t vol_cdev_write(struct file *file, const char __user *buf, ...@@ -370,7 +371,7 @@ static ssize_t vol_cdev_write(struct file *file, const char __user *buf,
return err; return err;
if (err) { if (err) {
ubi_warn("volume %d on UBI device %d is corrupted", ubi_warn(ubi, "volume %d on UBI device %d is corrupted",
vol->vol_id, ubi->ubi_num); vol->vol_id, ubi->ubi_num);
vol->corrupted = 1; vol->corrupted = 1;
} }
...@@ -420,7 +421,7 @@ static long vol_cdev_ioctl(struct file *file, unsigned int cmd, ...@@ -420,7 +421,7 @@ static long vol_cdev_ioctl(struct file *file, unsigned int cmd,
break; break;
} }
err = get_exclusive(desc); err = get_exclusive(ubi, desc);
if (err < 0) if (err < 0)
break; break;
...@@ -456,7 +457,7 @@ static long vol_cdev_ioctl(struct file *file, unsigned int cmd, ...@@ -456,7 +457,7 @@ static long vol_cdev_ioctl(struct file *file, unsigned int cmd,
req.bytes < 0 || req.lnum >= vol->usable_leb_size) req.bytes < 0 || req.lnum >= vol->usable_leb_size)
break; break;
err = get_exclusive(desc); err = get_exclusive(ubi, desc);
if (err < 0) if (err < 0)
break; break;
...@@ -642,7 +643,7 @@ static int verify_mkvol_req(const struct ubi_device *ubi, ...@@ -642,7 +643,7 @@ static int verify_mkvol_req(const struct ubi_device *ubi,
return 0; return 0;
bad: bad:
ubi_err("bad volume creation request"); ubi_err(ubi, "bad volume creation request");
ubi_dump_mkvol_req(req); ubi_dump_mkvol_req(req);
return err; return err;
} }
...@@ -708,12 +709,12 @@ static int rename_volumes(struct ubi_device *ubi, ...@@ -708,12 +709,12 @@ static int rename_volumes(struct ubi_device *ubi,
for (i = 0; i < req->count - 1; i++) { for (i = 0; i < req->count - 1; i++) {
for (n = i + 1; n < req->count; n++) { for (n = i + 1; n < req->count; n++) {
if (req->ents[i].vol_id == req->ents[n].vol_id) { if (req->ents[i].vol_id == req->ents[n].vol_id) {
ubi_err("duplicated volume id %d", ubi_err(ubi, "duplicated volume id %d",
req->ents[i].vol_id); req->ents[i].vol_id);
return -EINVAL; return -EINVAL;
} }
if (!strcmp(req->ents[i].name, req->ents[n].name)) { if (!strcmp(req->ents[i].name, req->ents[n].name)) {
ubi_err("duplicated volume name \"%s\"", ubi_err(ubi, "duplicated volume name \"%s\"",
req->ents[i].name); req->ents[i].name);
return -EINVAL; return -EINVAL;
} }
...@@ -736,7 +737,8 @@ static int rename_volumes(struct ubi_device *ubi, ...@@ -736,7 +737,8 @@ static int rename_volumes(struct ubi_device *ubi,
re->desc = ubi_open_volume(ubi->ubi_num, vol_id, UBI_READWRITE); re->desc = ubi_open_volume(ubi->ubi_num, vol_id, UBI_READWRITE);
if (IS_ERR(re->desc)) { if (IS_ERR(re->desc)) {
err = PTR_ERR(re->desc); err = PTR_ERR(re->desc);
ubi_err("cannot open volume %d, error %d", vol_id, err); ubi_err(ubi, "cannot open volume %d, error %d",
vol_id, err);
kfree(re); kfree(re);
goto out_free; goto out_free;
} }
...@@ -795,7 +797,7 @@ static int rename_volumes(struct ubi_device *ubi, ...@@ -795,7 +797,7 @@ static int rename_volumes(struct ubi_device *ubi,
continue; continue;
/* The volume exists but busy, or an error occurred */ /* The volume exists but busy, or an error occurred */
ubi_err("cannot open volume \"%s\", error %d", ubi_err(ubi, "cannot open volume \"%s\", error %d",
re->new_name, err); re->new_name, err);
goto out_free; goto out_free;
} }
......
...@@ -43,12 +43,12 @@ void ubi_dump_flash(struct ubi_device *ubi, int pnum, int offset, int len) ...@@ -43,12 +43,12 @@ void ubi_dump_flash(struct ubi_device *ubi, int pnum, int offset, int len)
return; return;
err = mtd_read(ubi->mtd, addr, len, &read, buf); err = mtd_read(ubi->mtd, addr, len, &read, buf);
if (err && err != -EUCLEAN) { if (err && err != -EUCLEAN) {
ubi_err("error %d while reading %d bytes from PEB %d:%d, read %zd bytes", ubi_err(ubi, "err %d while reading %d bytes from PEB %d:%d, read %zd bytes",
err, len, pnum, offset, read); err, len, pnum, offset, read);
goto out; goto out;
} }
ubi_msg("dumping %d bytes of data from PEB %d, offset %d", ubi_msg(ubi, "dumping %d bytes of data from PEB %d, offset %d",
len, pnum, offset); len, pnum, offset);
print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, buf, len, 1); print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, buf, len, 1);
out: out:
...@@ -238,8 +238,8 @@ int ubi_debugfs_init(void) ...@@ -238,8 +238,8 @@ int ubi_debugfs_init(void)
if (IS_ERR_OR_NULL(dfs_rootdir)) { if (IS_ERR_OR_NULL(dfs_rootdir)) {
int err = dfs_rootdir ? -ENODEV : PTR_ERR(dfs_rootdir); int err = dfs_rootdir ? -ENODEV : PTR_ERR(dfs_rootdir);
ubi_err("cannot create \"ubi\" debugfs directory, error %d\n", pr_err("UBI error: cannot create \"ubi\" debugfs directory, error %d\n",
err); err);
return err; return err;
} }
...@@ -433,7 +433,7 @@ int ubi_debugfs_init_dev(struct ubi_device *ubi) ...@@ -433,7 +433,7 @@ int ubi_debugfs_init_dev(struct ubi_device *ubi)
debugfs_remove_recursive(d->dfs_dir); debugfs_remove_recursive(d->dfs_dir);
out: out:
err = dent ? PTR_ERR(dent) : -ENODEV; err = dent ? PTR_ERR(dent) : -ENODEV;
ubi_err("cannot create \"%s\" debugfs file or directory, error %d\n", ubi_err(ubi, "cannot create \"%s\" debugfs file or directory, error %d\n",
fname, err); fname, err);
return err; return err;
} }
......
...@@ -422,7 +422,7 @@ int ubi_eba_read_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum, ...@@ -422,7 +422,7 @@ int ubi_eba_read_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
*/ */
if (err == UBI_IO_BAD_HDR_EBADMSG || if (err == UBI_IO_BAD_HDR_EBADMSG ||
err == UBI_IO_BAD_HDR) { err == UBI_IO_BAD_HDR) {
ubi_warn("corrupted VID header at PEB %d, LEB %d:%d", ubi_warn(ubi, "corrupted VID header at PEB %d, LEB %d:%d",
pnum, vol_id, lnum); pnum, vol_id, lnum);
err = -EBADMSG; err = -EBADMSG;
} else } else
...@@ -448,7 +448,7 @@ int ubi_eba_read_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum, ...@@ -448,7 +448,7 @@ int ubi_eba_read_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
goto out_unlock; goto out_unlock;
scrub = 1; scrub = 1;
if (!check) { if (!check) {
ubi_msg("force data checking"); ubi_msg(ubi, "force data checking");
check = 1; check = 1;
goto retry; goto retry;
} }
...@@ -459,7 +459,7 @@ int ubi_eba_read_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum, ...@@ -459,7 +459,7 @@ int ubi_eba_read_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
if (check) { if (check) {
uint32_t crc1 = crc32(UBI_CRC32_INIT, buf, len); uint32_t crc1 = crc32(UBI_CRC32_INIT, buf, len);
if (crc1 != crc) { if (crc1 != crc) {
ubi_warn("CRC error: calculated %#08x, must be %#08x", ubi_warn(ubi, "CRC error: calculated %#08x, must be %#08x",
crc1, crc); crc1, crc);
err = -EBADMSG; err = -EBADMSG;
goto out_unlock; goto out_unlock;
...@@ -513,7 +513,8 @@ static int recover_peb(struct ubi_device *ubi, int pnum, int vol_id, int lnum, ...@@ -513,7 +513,8 @@ static int recover_peb(struct ubi_device *ubi, int pnum, int vol_id, int lnum,
return new_pnum; return new_pnum;
} }
ubi_msg("recover PEB %d, move data to PEB %d", pnum, new_pnum); ubi_msg(ubi, "recover PEB %d, move data to PEB %d",
pnum, new_pnum);
err = ubi_io_read_vid_hdr(ubi, pnum, vid_hdr, 1); err = ubi_io_read_vid_hdr(ubi, pnum, vid_hdr, 1);
if (err && err != UBI_IO_BITFLIPS) { if (err && err != UBI_IO_BITFLIPS) {
...@@ -554,7 +555,7 @@ static int recover_peb(struct ubi_device *ubi, int pnum, int vol_id, int lnum, ...@@ -554,7 +555,7 @@ static int recover_peb(struct ubi_device *ubi, int pnum, int vol_id, int lnum,
up_read(&ubi->fm_sem); up_read(&ubi->fm_sem);
ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 1); ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 1);
ubi_msg("data was successfully recovered"); ubi_msg(ubi, "data was successfully recovered");
return 0; return 0;
out_unlock: out_unlock:
...@@ -569,13 +570,13 @@ static int recover_peb(struct ubi_device *ubi, int pnum, int vol_id, int lnum, ...@@ -569,13 +570,13 @@ static int recover_peb(struct ubi_device *ubi, int pnum, int vol_id, int lnum,
* Bad luck? This physical eraseblock is bad too? Crud. Let's try to * Bad luck? This physical eraseblock is bad too? Crud. Let's try to
* get another one. * get another one.
*/ */
ubi_warn("failed to write to PEB %d", new_pnum); ubi_warn(ubi, "failed to write to PEB %d", new_pnum);
ubi_wl_put_peb(ubi, vol_id, lnum, new_pnum, 1); ubi_wl_put_peb(ubi, vol_id, lnum, new_pnum, 1);
if (++tries > UBI_IO_RETRIES) { if (++tries > UBI_IO_RETRIES) {
ubi_free_vid_hdr(ubi, vid_hdr); ubi_free_vid_hdr(ubi, vid_hdr);
return err; return err;
} }
ubi_msg("try again"); ubi_msg(ubi, "try again");
goto retry; goto retry;
} }
...@@ -613,7 +614,7 @@ int ubi_eba_write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum, ...@@ -613,7 +614,7 @@ int ubi_eba_write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
err = ubi_io_write_data(ubi, buf, pnum, offset, len); err = ubi_io_write_data(ubi, buf, pnum, offset, len);
if (err) { if (err) {
ubi_warn("failed to write data to PEB %d", pnum); ubi_warn(ubi, "failed to write data to PEB %d", pnum);
if (err == -EIO && ubi->bad_allowed) if (err == -EIO && ubi->bad_allowed)
err = recover_peb(ubi, pnum, vol_id, lnum, buf, err = recover_peb(ubi, pnum, vol_id, lnum, buf,
offset, len); offset, len);
...@@ -654,7 +655,7 @@ int ubi_eba_write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum, ...@@ -654,7 +655,7 @@ int ubi_eba_write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
err = ubi_io_write_vid_hdr(ubi, pnum, vid_hdr); err = ubi_io_write_vid_hdr(ubi, pnum, vid_hdr);
if (err) { if (err) {
ubi_warn("failed to write VID header to LEB %d:%d, PEB %d", ubi_warn(ubi, "failed to write VID header to LEB %d:%d, PEB %d",
vol_id, lnum, pnum); vol_id, lnum, pnum);
goto write_error; goto write_error;
} }
...@@ -662,7 +663,7 @@ int ubi_eba_write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum, ...@@ -662,7 +663,7 @@ int ubi_eba_write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
if (len) { if (len) {
err = ubi_io_write_data(ubi, buf, pnum, offset, len); err = ubi_io_write_data(ubi, buf, pnum, offset, len);
if (err) { if (err) {
ubi_warn("failed to write %d bytes at offset %d of LEB %d:%d, PEB %d", ubi_warn(ubi, "failed to write %d bytes at offset %d of LEB %d:%d, PEB %d",
len, offset, vol_id, lnum, pnum); len, offset, vol_id, lnum, pnum);
goto write_error; goto write_error;
} }
...@@ -698,7 +699,7 @@ int ubi_eba_write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum, ...@@ -698,7 +699,7 @@ int ubi_eba_write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
} }
vid_hdr->sqnum = cpu_to_be64(ubi_next_sqnum(ubi)); vid_hdr->sqnum = cpu_to_be64(ubi_next_sqnum(ubi));
ubi_msg("try another PEB"); ubi_msg(ubi, "try another PEB");
goto retry; goto retry;
} }
...@@ -775,14 +776,14 @@ int ubi_eba_write_leb_st(struct ubi_device *ubi, struct ubi_volume *vol, ...@@ -775,14 +776,14 @@ int ubi_eba_write_leb_st(struct ubi_device *ubi, struct ubi_volume *vol,
err = ubi_io_write_vid_hdr(ubi, pnum, vid_hdr); err = ubi_io_write_vid_hdr(ubi, pnum, vid_hdr);
if (err) { if (err) {
ubi_warn("failed to write VID header to LEB %d:%d, PEB %d", ubi_warn(ubi, "failed to write VID header to LEB %d:%d, PEB %d",
vol_id, lnum, pnum); vol_id, lnum, pnum);
goto write_error; goto write_error;
} }
err = ubi_io_write_data(ubi, buf, pnum, 0, len); err = ubi_io_write_data(ubi, buf, pnum, 0, len);
if (err) { if (err) {
ubi_warn("failed to write %d bytes of data to PEB %d", ubi_warn(ubi, "failed to write %d bytes of data to PEB %d",
len, pnum); len, pnum);
goto write_error; goto write_error;
} }
...@@ -818,7 +819,7 @@ int ubi_eba_write_leb_st(struct ubi_device *ubi, struct ubi_volume *vol, ...@@ -818,7 +819,7 @@ int ubi_eba_write_leb_st(struct ubi_device *ubi, struct ubi_volume *vol,
} }
vid_hdr->sqnum = cpu_to_be64(ubi_next_sqnum(ubi)); vid_hdr->sqnum = cpu_to_be64(ubi_next_sqnum(ubi));
ubi_msg("try another PEB"); ubi_msg(ubi, "try another PEB");
goto retry; goto retry;
} }
...@@ -893,14 +894,14 @@ int ubi_eba_atomic_leb_change(struct ubi_device *ubi, struct ubi_volume *vol, ...@@ -893,14 +894,14 @@ int ubi_eba_atomic_leb_change(struct ubi_device *ubi, struct ubi_volume *vol,
err = ubi_io_write_vid_hdr(ubi, pnum, vid_hdr); err = ubi_io_write_vid_hdr(ubi, pnum, vid_hdr);
if (err) { if (err) {
ubi_warn("failed to write VID header to LEB %d:%d, PEB %d", ubi_warn(ubi, "failed to write VID header to LEB %d:%d, PEB %d",
vol_id, lnum, pnum); vol_id, lnum, pnum);
goto write_error; goto write_error;
} }
err = ubi_io_write_data(ubi, buf, pnum, 0, len); err = ubi_io_write_data(ubi, buf, pnum, 0, len);
if (err) { if (err) {
ubi_warn("failed to write %d bytes of data to PEB %d", ubi_warn(ubi, "failed to write %d bytes of data to PEB %d",
len, pnum); len, pnum);
goto write_error; goto write_error;
} }
...@@ -940,7 +941,7 @@ int ubi_eba_atomic_leb_change(struct ubi_device *ubi, struct ubi_volume *vol, ...@@ -940,7 +941,7 @@ int ubi_eba_atomic_leb_change(struct ubi_device *ubi, struct ubi_volume *vol,
} }
vid_hdr->sqnum = cpu_to_be64(ubi_next_sqnum(ubi)); vid_hdr->sqnum = cpu_to_be64(ubi_next_sqnum(ubi));
ubi_msg("try another PEB"); ubi_msg(ubi, "try another PEB");
goto retry; goto retry;
} }
...@@ -1063,7 +1064,7 @@ int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to, ...@@ -1063,7 +1064,7 @@ int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to,
dbg_wl("read %d bytes of data", aldata_size); dbg_wl("read %d bytes of data", aldata_size);
err = ubi_io_read_data(ubi, ubi->peb_buf, from, 0, aldata_size); err = ubi_io_read_data(ubi, ubi->peb_buf, from, 0, aldata_size);
if (err && err != UBI_IO_BITFLIPS) { if (err && err != UBI_IO_BITFLIPS) {
ubi_warn("error %d while reading data from PEB %d", ubi_warn(ubi, "error %d while reading data from PEB %d",
err, from); err, from);
err = MOVE_SOURCE_RD_ERR; err = MOVE_SOURCE_RD_ERR;
goto out_unlock_buf; goto out_unlock_buf;
...@@ -1113,7 +1114,7 @@ int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to, ...@@ -1113,7 +1114,7 @@ int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to,
err = ubi_io_read_vid_hdr(ubi, to, vid_hdr, 1); err = ubi_io_read_vid_hdr(ubi, to, vid_hdr, 1);
if (err) { if (err) {
if (err != UBI_IO_BITFLIPS) { if (err != UBI_IO_BITFLIPS) {
ubi_warn("error %d while reading VID header back from PEB %d", ubi_warn(ubi, "error %d while reading VID header back from PEB %d",
err, to); err, to);
if (is_error_sane(err)) if (is_error_sane(err))
err = MOVE_TARGET_RD_ERR; err = MOVE_TARGET_RD_ERR;
...@@ -1140,7 +1141,7 @@ int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to, ...@@ -1140,7 +1141,7 @@ int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to,
err = ubi_io_read_data(ubi, ubi->peb_buf, to, 0, aldata_size); err = ubi_io_read_data(ubi, ubi->peb_buf, to, 0, aldata_size);
if (err) { if (err) {
if (err != UBI_IO_BITFLIPS) { if (err != UBI_IO_BITFLIPS) {
ubi_warn("error %d while reading data back from PEB %d", ubi_warn(ubi, "error %d while reading data back from PEB %d",
err, to); err, to);
if (is_error_sane(err)) if (is_error_sane(err))
err = MOVE_TARGET_RD_ERR; err = MOVE_TARGET_RD_ERR;
...@@ -1152,7 +1153,7 @@ int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to, ...@@ -1152,7 +1153,7 @@ int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to,
cond_resched(); cond_resched();
if (crc != crc32(UBI_CRC32_INIT, ubi->peb_buf, data_size)) { if (crc != crc32(UBI_CRC32_INIT, ubi->peb_buf, data_size)) {
ubi_warn("read data back from PEB %d and it is different", ubi_warn(ubi, "read data back from PEB %d and it is different",
to); to);
err = -EINVAL; err = -EINVAL;
goto out_unlock_buf; goto out_unlock_buf;
...@@ -1205,10 +1206,10 @@ static void print_rsvd_warning(struct ubi_device *ubi, ...@@ -1205,10 +1206,10 @@ static void print_rsvd_warning(struct ubi_device *ubi,
return; return;
} }
ubi_warn("cannot reserve enough PEBs for bad PEB handling, reserved %d, need %d", ubi_warn(ubi, "cannot reserve enough PEBs for bad PEB handling, reserved %d, need %d",
ubi->beb_rsvd_pebs, ubi->beb_rsvd_level); ubi->beb_rsvd_pebs, ubi->beb_rsvd_level);
if (ubi->corr_peb_count) if (ubi->corr_peb_count)
ubi_warn("%d PEBs are corrupted and not used", ubi_warn(ubi, "%d PEBs are corrupted and not used",
ubi->corr_peb_count); ubi->corr_peb_count);
} }
...@@ -1286,7 +1287,7 @@ int self_check_eba(struct ubi_device *ubi, struct ubi_attach_info *ai_fastmap, ...@@ -1286,7 +1287,7 @@ int self_check_eba(struct ubi_device *ubi, struct ubi_attach_info *ai_fastmap,
fm_eba[i][j] == UBI_LEB_UNMAPPED) fm_eba[i][j] == UBI_LEB_UNMAPPED)
continue; continue;
ubi_err("LEB:%i:%i is PEB:%i instead of %i!", ubi_err(ubi, "LEB:%i:%i is PEB:%i instead of %i!",
vol->vol_id, i, fm_eba[i][j], vol->vol_id, i, fm_eba[i][j],
scan_eba[i][j]); scan_eba[i][j]);
ubi_assert(0); ubi_assert(0);
...@@ -1366,10 +1367,10 @@ int ubi_eba_init(struct ubi_device *ubi, struct ubi_attach_info *ai) ...@@ -1366,10 +1367,10 @@ int ubi_eba_init(struct ubi_device *ubi, struct ubi_attach_info *ai)
} }
if (ubi->avail_pebs < EBA_RESERVED_PEBS) { if (ubi->avail_pebs < EBA_RESERVED_PEBS) {
ubi_err("no enough physical eraseblocks (%d, need %d)", ubi_err(ubi, "no enough physical eraseblocks (%d, need %d)",
ubi->avail_pebs, EBA_RESERVED_PEBS); ubi->avail_pebs, EBA_RESERVED_PEBS);
if (ubi->corr_peb_count) if (ubi->corr_peb_count)
ubi_err("%d PEBs are corrupted and not used", ubi_err(ubi, "%d PEBs are corrupted and not used",
ubi->corr_peb_count); ubi->corr_peb_count);
err = -ENOSPC; err = -ENOSPC;
goto out_free; goto out_free;
......
This diff is collapsed.
This diff is collapsed.
...@@ -204,7 +204,7 @@ struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode) ...@@ -204,7 +204,7 @@ struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode)
return ERR_PTR(err); return ERR_PTR(err);
} }
if (err == 1) { if (err == 1) {
ubi_warn("volume %d on UBI device %d is corrupted", ubi_warn(ubi, "volume %d on UBI device %d is corrupted",
vol_id, ubi->ubi_num); vol_id, ubi->ubi_num);
vol->corrupted = 1; vol->corrupted = 1;
} }
...@@ -221,7 +221,7 @@ struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode) ...@@ -221,7 +221,7 @@ struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode)
kfree(desc); kfree(desc);
out_put_ubi: out_put_ubi:
ubi_put_device(ubi); ubi_put_device(ubi);
ubi_err("cannot open device %d, volume %d, error %d", ubi_err(ubi, "cannot open device %d, volume %d, error %d",
ubi_num, vol_id, err); ubi_num, vol_id, err);
return ERR_PTR(err); return ERR_PTR(err);
} }
...@@ -411,7 +411,7 @@ int ubi_leb_read(struct ubi_volume_desc *desc, int lnum, char *buf, int offset, ...@@ -411,7 +411,7 @@ int ubi_leb_read(struct ubi_volume_desc *desc, int lnum, char *buf, int offset,
err = ubi_eba_read_leb(ubi, vol, lnum, buf, offset, len, check); err = ubi_eba_read_leb(ubi, vol, lnum, buf, offset, len, check);
if (err && mtd_is_eccerr(err) && vol->vol_type == UBI_STATIC_VOLUME) { if (err && mtd_is_eccerr(err) && vol->vol_type == UBI_STATIC_VOLUME) {
ubi_warn("mark volume %d as corrupted", vol_id); ubi_warn(ubi, "mark volume %d as corrupted", vol_id);
vol->corrupted = 1; vol->corrupted = 1;
} }
......
...@@ -111,7 +111,7 @@ void ubi_update_reserved(struct ubi_device *ubi) ...@@ -111,7 +111,7 @@ void ubi_update_reserved(struct ubi_device *ubi)
ubi->avail_pebs -= need; ubi->avail_pebs -= need;
ubi->rsvd_pebs += need; ubi->rsvd_pebs += need;
ubi->beb_rsvd_pebs += need; ubi->beb_rsvd_pebs += need;
ubi_msg("reserved more %d PEBs for bad PEB handling", need); ubi_msg(ubi, "reserved more %d PEBs for bad PEB handling", need);
} }
/** /**
...@@ -128,7 +128,7 @@ void ubi_calculate_reserved(struct ubi_device *ubi) ...@@ -128,7 +128,7 @@ void ubi_calculate_reserved(struct ubi_device *ubi)
ubi->beb_rsvd_level = ubi->bad_peb_limit - ubi->bad_peb_count; ubi->beb_rsvd_level = ubi->bad_peb_limit - ubi->bad_peb_count;
if (ubi->beb_rsvd_level < 0) { if (ubi->beb_rsvd_level < 0) {
ubi->beb_rsvd_level = 0; ubi->beb_rsvd_level = 0;
ubi_warn("number of bad PEBs (%d) is above the expected limit (%d), not reserving any PEBs for bad PEB handling, will use available PEBs (if any)", ubi_warn(ubi, "number of bad PEBs (%d) is above the expected limit (%d), not reserving any PEBs for bad PEB handling, will use available PEBs (if any)",
ubi->bad_peb_count, ubi->bad_peb_limit); ubi->bad_peb_count, ubi->bad_peb_limit);
} }
} }
......
...@@ -50,13 +50,14 @@ ...@@ -50,13 +50,14 @@
#define UBI_NAME_STR "ubi" #define UBI_NAME_STR "ubi"
/* Normal UBI messages */ /* Normal UBI messages */
#define ubi_msg(fmt, ...) pr_notice("UBI: " fmt "\n", ##__VA_ARGS__) #define ubi_msg(ubi, fmt, ...) pr_notice("UBI-%d: %s:" fmt "\n", \
ubi->ubi_num, __func__, ##__VA_ARGS__)
/* UBI warning messages */ /* UBI warning messages */
#define ubi_warn(fmt, ...) pr_warn("UBI warning: %s: " fmt "\n", \ #define ubi_warn(ubi, fmt, ...) pr_warn("UBI-%d warning: %s: " fmt "\n", \
__func__, ##__VA_ARGS__) ubi->ubi_num, __func__, ##__VA_ARGS__)
/* UBI error messages */ /* UBI error messages */
#define ubi_err(fmt, ...) pr_err("UBI error: %s: " fmt "\n", \ #define ubi_err(ubi, fmt, ...) pr_err("UBI-%d error: %s: " fmt "\n", \
__func__, ##__VA_ARGS__) ubi->ubi_num, __func__, ##__VA_ARGS__)
/* Background thread name pattern */ /* Background thread name pattern */
#define UBI_BGT_NAME_PATTERN "ubi_bgt%dd" #define UBI_BGT_NAME_PATTERN "ubi_bgt%dd"
...@@ -987,7 +988,7 @@ static inline void ubi_ro_mode(struct ubi_device *ubi) ...@@ -987,7 +988,7 @@ static inline void ubi_ro_mode(struct ubi_device *ubi)
{ {
if (!ubi->ro_mode) { if (!ubi->ro_mode) {
ubi->ro_mode = 1; ubi->ro_mode = 1;
ubi_warn("switch to read-only mode"); ubi_warn(ubi, "switch to read-only mode");
dump_stack(); dump_stack();
} }
} }
......
...@@ -223,7 +223,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) ...@@ -223,7 +223,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
} }
if (vol_id == UBI_VOL_NUM_AUTO) { if (vol_id == UBI_VOL_NUM_AUTO) {
ubi_err("out of volume IDs"); ubi_err(ubi, "out of volume IDs");
err = -ENFILE; err = -ENFILE;
goto out_unlock; goto out_unlock;
} }
...@@ -237,7 +237,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) ...@@ -237,7 +237,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
/* Ensure that this volume does not exist */ /* Ensure that this volume does not exist */
err = -EEXIST; err = -EEXIST;
if (ubi->volumes[vol_id]) { if (ubi->volumes[vol_id]) {
ubi_err("volume %d already exists", vol_id); ubi_err(ubi, "volume %d already exists", vol_id);
goto out_unlock; goto out_unlock;
} }
...@@ -246,7 +246,8 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) ...@@ -246,7 +246,8 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
if (ubi->volumes[i] && if (ubi->volumes[i] &&
ubi->volumes[i]->name_len == req->name_len && ubi->volumes[i]->name_len == req->name_len &&
!strcmp(ubi->volumes[i]->name, req->name)) { !strcmp(ubi->volumes[i]->name, req->name)) {
ubi_err("volume \"%s\" exists (ID %d)", req->name, i); ubi_err(ubi, "volume \"%s\" exists (ID %d)",
req->name, i);
goto out_unlock; goto out_unlock;
} }
...@@ -257,9 +258,10 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) ...@@ -257,9 +258,10 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
/* Reserve physical eraseblocks */ /* Reserve physical eraseblocks */
if (vol->reserved_pebs > ubi->avail_pebs) { if (vol->reserved_pebs > ubi->avail_pebs) {
ubi_err("not enough PEBs, only %d available", ubi->avail_pebs); ubi_err(ubi, "not enough PEBs, only %d available",
ubi->avail_pebs);
if (ubi->corr_peb_count) if (ubi->corr_peb_count)
ubi_err("%d PEBs are corrupted and not used", ubi_err(ubi, "%d PEBs are corrupted and not used",
ubi->corr_peb_count); ubi->corr_peb_count);
err = -ENOSPC; err = -ENOSPC;
goto out_unlock; goto out_unlock;
...@@ -314,7 +316,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) ...@@ -314,7 +316,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
dev = MKDEV(MAJOR(ubi->cdev.dev), vol_id + 1); dev = MKDEV(MAJOR(ubi->cdev.dev), vol_id + 1);
err = cdev_add(&vol->cdev, dev, 1); err = cdev_add(&vol->cdev, dev, 1);
if (err) { if (err) {
ubi_err("cannot add character device"); ubi_err(ubi, "cannot add character device");
goto out_mapping; goto out_mapping;
} }
...@@ -326,7 +328,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) ...@@ -326,7 +328,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
dev_set_name(&vol->dev, "%s_%d", ubi->ubi_name, vol->vol_id); dev_set_name(&vol->dev, "%s_%d", ubi->ubi_name, vol->vol_id);
err = device_register(&vol->dev); err = device_register(&vol->dev);
if (err) { if (err) {
ubi_err("cannot register device"); ubi_err(ubi, "cannot register device");
goto out_cdev; goto out_cdev;
} }
...@@ -386,7 +388,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) ...@@ -386,7 +388,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
kfree(vol); kfree(vol);
else else
put_device(&vol->dev); put_device(&vol->dev);
ubi_err("cannot create volume %d, error %d", vol_id, err); ubi_err(ubi, "cannot create volume %d, error %d", vol_id, err);
return err; return err;
} }
...@@ -454,7 +456,7 @@ int ubi_remove_volume(struct ubi_volume_desc *desc, int no_vtbl) ...@@ -454,7 +456,7 @@ int ubi_remove_volume(struct ubi_volume_desc *desc, int no_vtbl)
return err; return err;
out_err: out_err:
ubi_err("cannot remove volume %d, error %d", vol_id, err); ubi_err(ubi, "cannot remove volume %d, error %d", vol_id, err);
spin_lock(&ubi->volumes_lock); spin_lock(&ubi->volumes_lock);
ubi->volumes[vol_id] = vol; ubi->volumes[vol_id] = vol;
out_unlock: out_unlock:
...@@ -487,7 +489,7 @@ int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs) ...@@ -487,7 +489,7 @@ int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs)
if (vol->vol_type == UBI_STATIC_VOLUME && if (vol->vol_type == UBI_STATIC_VOLUME &&
reserved_pebs < vol->used_ebs) { reserved_pebs < vol->used_ebs) {
ubi_err("too small size %d, %d LEBs contain data", ubi_err(ubi, "too small size %d, %d LEBs contain data",
reserved_pebs, vol->used_ebs); reserved_pebs, vol->used_ebs);
return -EINVAL; return -EINVAL;
} }
...@@ -516,10 +518,10 @@ int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs) ...@@ -516,10 +518,10 @@ int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs)
if (pebs > 0) { if (pebs > 0) {
spin_lock(&ubi->volumes_lock); spin_lock(&ubi->volumes_lock);
if (pebs > ubi->avail_pebs) { if (pebs > ubi->avail_pebs) {
ubi_err("not enough PEBs: requested %d, available %d", ubi_err(ubi, "not enough PEBs: requested %d, available %d",
pebs, ubi->avail_pebs); pebs, ubi->avail_pebs);
if (ubi->corr_peb_count) if (ubi->corr_peb_count)
ubi_err("%d PEBs are corrupted and not used", ubi_err(ubi, "%d PEBs are corrupted and not used",
ubi->corr_peb_count); ubi->corr_peb_count);
spin_unlock(&ubi->volumes_lock); spin_unlock(&ubi->volumes_lock);
err = -ENOSPC; err = -ENOSPC;
...@@ -643,7 +645,7 @@ int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol) ...@@ -643,7 +645,7 @@ int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol)
dev = MKDEV(MAJOR(ubi->cdev.dev), vol->vol_id + 1); dev = MKDEV(MAJOR(ubi->cdev.dev), vol->vol_id + 1);
err = cdev_add(&vol->cdev, dev, 1); err = cdev_add(&vol->cdev, dev, 1);
if (err) { if (err) {
ubi_err("cannot add character device for volume %d, error %d", ubi_err(ubi, "cannot add character device for volume %d, error %d",
vol_id, err); vol_id, err);
return err; return err;
} }
...@@ -710,7 +712,7 @@ static int self_check_volume(struct ubi_device *ubi, int vol_id) ...@@ -710,7 +712,7 @@ static int self_check_volume(struct ubi_device *ubi, int vol_id)
if (!vol) { if (!vol) {
if (reserved_pebs) { if (reserved_pebs) {
ubi_err("no volume info, but volume exists"); ubi_err(ubi, "no volume info, but volume exists");
goto fail; goto fail;
} }
spin_unlock(&ubi->volumes_lock); spin_unlock(&ubi->volumes_lock);
...@@ -719,90 +721,91 @@ static int self_check_volume(struct ubi_device *ubi, int vol_id) ...@@ -719,90 +721,91 @@ static int self_check_volume(struct ubi_device *ubi, int vol_id)
if (vol->reserved_pebs < 0 || vol->alignment < 0 || vol->data_pad < 0 || if (vol->reserved_pebs < 0 || vol->alignment < 0 || vol->data_pad < 0 ||
vol->name_len < 0) { vol->name_len < 0) {
ubi_err("negative values"); ubi_err(ubi, "negative values");
goto fail; goto fail;
} }
if (vol->alignment > ubi->leb_size || vol->alignment == 0) { if (vol->alignment > ubi->leb_size || vol->alignment == 0) {
ubi_err("bad alignment"); ubi_err(ubi, "bad alignment");
goto fail; goto fail;
} }
n = vol->alignment & (ubi->min_io_size - 1); n = vol->alignment & (ubi->min_io_size - 1);
if (vol->alignment != 1 && n) { if (vol->alignment != 1 && n) {
ubi_err("alignment is not multiple of min I/O unit"); ubi_err(ubi, "alignment is not multiple of min I/O unit");
goto fail; goto fail;
} }
n = ubi->leb_size % vol->alignment; n = ubi->leb_size % vol->alignment;
if (vol->data_pad != n) { if (vol->data_pad != n) {
ubi_err("bad data_pad, has to be %lld", n); ubi_err(ubi, "bad data_pad, has to be %lld", n);
goto fail; goto fail;
} }
if (vol->vol_type != UBI_DYNAMIC_VOLUME && if (vol->vol_type != UBI_DYNAMIC_VOLUME &&
vol->vol_type != UBI_STATIC_VOLUME) { vol->vol_type != UBI_STATIC_VOLUME) {
ubi_err("bad vol_type"); ubi_err(ubi, "bad vol_type");
goto fail; goto fail;
} }
if (vol->upd_marker && vol->corrupted) { if (vol->upd_marker && vol->corrupted) {
ubi_err("update marker and corrupted simultaneously"); ubi_err(ubi, "update marker and corrupted simultaneously");
goto fail; goto fail;
} }
if (vol->reserved_pebs > ubi->good_peb_count) { if (vol->reserved_pebs > ubi->good_peb_count) {
ubi_err("too large reserved_pebs"); ubi_err(ubi, "too large reserved_pebs");
goto fail; goto fail;
} }
n = ubi->leb_size - vol->data_pad; n = ubi->leb_size - vol->data_pad;
if (vol->usable_leb_size != ubi->leb_size - vol->data_pad) { if (vol->usable_leb_size != ubi->leb_size - vol->data_pad) {
ubi_err("bad usable_leb_size, has to be %lld", n); ubi_err(ubi, "bad usable_leb_size, has to be %lld", n);
goto fail; goto fail;
} }
if (vol->name_len > UBI_VOL_NAME_MAX) { if (vol->name_len > UBI_VOL_NAME_MAX) {
ubi_err("too long volume name, max is %d", UBI_VOL_NAME_MAX); ubi_err(ubi, "too long volume name, max is %d",
UBI_VOL_NAME_MAX);
goto fail; goto fail;
} }
n = strnlen(vol->name, vol->name_len + 1); n = strnlen(vol->name, vol->name_len + 1);
if (n != vol->name_len) { if (n != vol->name_len) {
ubi_err("bad name_len %lld", n); ubi_err(ubi, "bad name_len %lld", n);
goto fail; goto fail;
} }
n = (long long)vol->used_ebs * vol->usable_leb_size; n = (long long)vol->used_ebs * vol->usable_leb_size;
if (vol->vol_type == UBI_DYNAMIC_VOLUME) { if (vol->vol_type == UBI_DYNAMIC_VOLUME) {
if (vol->corrupted) { if (vol->corrupted) {
ubi_err("corrupted dynamic volume"); ubi_err(ubi, "corrupted dynamic volume");
goto fail; goto fail;
} }
if (vol->used_ebs != vol->reserved_pebs) { if (vol->used_ebs != vol->reserved_pebs) {
ubi_err("bad used_ebs"); ubi_err(ubi, "bad used_ebs");
goto fail; goto fail;
} }
if (vol->last_eb_bytes != vol->usable_leb_size) { if (vol->last_eb_bytes != vol->usable_leb_size) {
ubi_err("bad last_eb_bytes"); ubi_err(ubi, "bad last_eb_bytes");
goto fail; goto fail;
} }
if (vol->used_bytes != n) { if (vol->used_bytes != n) {
ubi_err("bad used_bytes"); ubi_err(ubi, "bad used_bytes");
goto fail; goto fail;
} }
} else { } else {
if (vol->used_ebs < 0 || vol->used_ebs > vol->reserved_pebs) { if (vol->used_ebs < 0 || vol->used_ebs > vol->reserved_pebs) {
ubi_err("bad used_ebs"); ubi_err(ubi, "bad used_ebs");
goto fail; goto fail;
} }
if (vol->last_eb_bytes < 0 || if (vol->last_eb_bytes < 0 ||
vol->last_eb_bytes > vol->usable_leb_size) { vol->last_eb_bytes > vol->usable_leb_size) {
ubi_err("bad last_eb_bytes"); ubi_err(ubi, "bad last_eb_bytes");
goto fail; goto fail;
} }
if (vol->used_bytes < 0 || vol->used_bytes > n || if (vol->used_bytes < 0 || vol->used_bytes > n ||
vol->used_bytes < n - vol->usable_leb_size) { vol->used_bytes < n - vol->usable_leb_size) {
ubi_err("bad used_bytes"); ubi_err(ubi, "bad used_bytes");
goto fail; goto fail;
} }
} }
...@@ -820,7 +823,7 @@ static int self_check_volume(struct ubi_device *ubi, int vol_id) ...@@ -820,7 +823,7 @@ static int self_check_volume(struct ubi_device *ubi, int vol_id)
if (alignment != vol->alignment || data_pad != vol->data_pad || if (alignment != vol->alignment || data_pad != vol->data_pad ||
upd_marker != vol->upd_marker || vol_type != vol->vol_type || upd_marker != vol->upd_marker || vol_type != vol->vol_type ||
name_len != vol->name_len || strncmp(name, vol->name, name_len)) { name_len != vol->name_len || strncmp(name, vol->name, name_len)) {
ubi_err("volume info is different"); ubi_err(ubi, "volume info is different");
goto fail; goto fail;
} }
...@@ -828,7 +831,7 @@ static int self_check_volume(struct ubi_device *ubi, int vol_id) ...@@ -828,7 +831,7 @@ static int self_check_volume(struct ubi_device *ubi, int vol_id)
return 0; return 0;
fail: fail:
ubi_err("self-check failed for volume %d", vol_id); ubi_err(ubi, "self-check failed for volume %d", vol_id);
if (vol) if (vol)
ubi_dump_vol_info(vol); ubi_dump_vol_info(vol);
ubi_dump_vtbl_record(&ubi->vtbl[vol_id], vol_id); ubi_dump_vtbl_record(&ubi->vtbl[vol_id], vol_id);
......
...@@ -190,7 +190,7 @@ static int vtbl_check(const struct ubi_device *ubi, ...@@ -190,7 +190,7 @@ static int vtbl_check(const struct ubi_device *ubi,
crc = crc32(UBI_CRC32_INIT, &vtbl[i], UBI_VTBL_RECORD_SIZE_CRC); crc = crc32(UBI_CRC32_INIT, &vtbl[i], UBI_VTBL_RECORD_SIZE_CRC);
if (be32_to_cpu(vtbl[i].crc) != crc) { if (be32_to_cpu(vtbl[i].crc) != crc) {
ubi_err("bad CRC at record %u: %#08x, not %#08x", ubi_err(ubi, "bad CRC at record %u: %#08x, not %#08x",
i, crc, be32_to_cpu(vtbl[i].crc)); i, crc, be32_to_cpu(vtbl[i].crc));
ubi_dump_vtbl_record(&vtbl[i], i); ubi_dump_vtbl_record(&vtbl[i], i);
return 1; return 1;
...@@ -224,7 +224,7 @@ static int vtbl_check(const struct ubi_device *ubi, ...@@ -224,7 +224,7 @@ static int vtbl_check(const struct ubi_device *ubi,
n = ubi->leb_size % alignment; n = ubi->leb_size % alignment;
if (data_pad != n) { if (data_pad != n) {
ubi_err("bad data_pad, has to be %d", n); ubi_err(ubi, "bad data_pad, has to be %d", n);
err = 6; err = 6;
goto bad; goto bad;
} }
...@@ -240,7 +240,7 @@ static int vtbl_check(const struct ubi_device *ubi, ...@@ -240,7 +240,7 @@ static int vtbl_check(const struct ubi_device *ubi,
} }
if (reserved_pebs > ubi->good_peb_count) { if (reserved_pebs > ubi->good_peb_count) {
ubi_err("too large reserved_pebs %d, good PEBs %d", ubi_err(ubi, "too large reserved_pebs %d, good PEBs %d",
reserved_pebs, ubi->good_peb_count); reserved_pebs, ubi->good_peb_count);
err = 9; err = 9;
goto bad; goto bad;
...@@ -270,7 +270,7 @@ static int vtbl_check(const struct ubi_device *ubi, ...@@ -270,7 +270,7 @@ static int vtbl_check(const struct ubi_device *ubi,
if (len1 > 0 && len1 == len2 && if (len1 > 0 && len1 == len2 &&
!strncmp(vtbl[i].name, vtbl[n].name, len1)) { !strncmp(vtbl[i].name, vtbl[n].name, len1)) {
ubi_err("volumes %d and %d have the same name \"%s\"", ubi_err(ubi, "volumes %d and %d have the same name \"%s\"",
i, n, vtbl[i].name); i, n, vtbl[i].name);
ubi_dump_vtbl_record(&vtbl[i], i); ubi_dump_vtbl_record(&vtbl[i], i);
ubi_dump_vtbl_record(&vtbl[n], n); ubi_dump_vtbl_record(&vtbl[n], n);
...@@ -282,7 +282,7 @@ static int vtbl_check(const struct ubi_device *ubi, ...@@ -282,7 +282,7 @@ static int vtbl_check(const struct ubi_device *ubi,
return 0; return 0;
bad: bad:
ubi_err("volume table check failed: record %d, error %d", i, err); ubi_err(ubi, "volume table check failed: record %d, error %d", i, err);
ubi_dump_vtbl_record(&vtbl[i], i); ubi_dump_vtbl_record(&vtbl[i], i);
return -EINVAL; return -EINVAL;
} }
...@@ -446,11 +446,11 @@ static struct ubi_vtbl_record *process_lvol(struct ubi_device *ubi, ...@@ -446,11 +446,11 @@ static struct ubi_vtbl_record *process_lvol(struct ubi_device *ubi,
leb_corrupted[1] = memcmp(leb[0], leb[1], leb_corrupted[1] = memcmp(leb[0], leb[1],
ubi->vtbl_size); ubi->vtbl_size);
if (leb_corrupted[1]) { if (leb_corrupted[1]) {
ubi_warn("volume table copy #2 is corrupted"); ubi_warn(ubi, "volume table copy #2 is corrupted");
err = create_vtbl(ubi, ai, 1, leb[0]); err = create_vtbl(ubi, ai, 1, leb[0]);
if (err) if (err)
goto out_free; goto out_free;
ubi_msg("volume table was restored"); ubi_msg(ubi, "volume table was restored");
} }
/* Both LEB 1 and LEB 2 are OK and consistent */ /* Both LEB 1 and LEB 2 are OK and consistent */
...@@ -465,15 +465,15 @@ static struct ubi_vtbl_record *process_lvol(struct ubi_device *ubi, ...@@ -465,15 +465,15 @@ static struct ubi_vtbl_record *process_lvol(struct ubi_device *ubi,
} }
if (leb_corrupted[1]) { if (leb_corrupted[1]) {
/* Both LEB 0 and LEB 1 are corrupted */ /* Both LEB 0 and LEB 1 are corrupted */
ubi_err("both volume tables are corrupted"); ubi_err(ubi, "both volume tables are corrupted");
goto out_free; goto out_free;
} }
ubi_warn("volume table copy #1 is corrupted"); ubi_warn(ubi, "volume table copy #1 is corrupted");
err = create_vtbl(ubi, ai, 0, leb[1]); err = create_vtbl(ubi, ai, 0, leb[1]);
if (err) if (err)
goto out_free; goto out_free;
ubi_msg("volume table was restored"); ubi_msg(ubi, "volume table was restored");
vfree(leb[0]); vfree(leb[0]);
return leb[1]; return leb[1];
...@@ -562,7 +562,7 @@ static int init_volumes(struct ubi_device *ubi, ...@@ -562,7 +562,7 @@ static int init_volumes(struct ubi_device *ubi,
if (vtbl[i].flags & UBI_VTBL_AUTORESIZE_FLG) { if (vtbl[i].flags & UBI_VTBL_AUTORESIZE_FLG) {
/* Auto re-size flag may be set only for one volume */ /* Auto re-size flag may be set only for one volume */
if (ubi->autoresize_vol_id != -1) { if (ubi->autoresize_vol_id != -1) {
ubi_err("more than one auto-resize volume (%d and %d)", ubi_err(ubi, "more than one auto-resize volume (%d and %d)",
ubi->autoresize_vol_id, i); ubi->autoresize_vol_id, i);
kfree(vol); kfree(vol);
return -EINVAL; return -EINVAL;
...@@ -608,7 +608,7 @@ static int init_volumes(struct ubi_device *ubi, ...@@ -608,7 +608,7 @@ static int init_volumes(struct ubi_device *ubi,
* We found a static volume which misses several * We found a static volume which misses several
* eraseblocks. Treat it as corrupted. * eraseblocks. Treat it as corrupted.
*/ */
ubi_warn("static volume %d misses %d LEBs - corrupted", ubi_warn(ubi, "static volume %d misses %d LEBs - corrupted",
av->vol_id, av->used_ebs - av->leb_count); av->vol_id, av->used_ebs - av->leb_count);
vol->corrupted = 1; vol->corrupted = 1;
continue; continue;
...@@ -646,10 +646,10 @@ static int init_volumes(struct ubi_device *ubi, ...@@ -646,10 +646,10 @@ static int init_volumes(struct ubi_device *ubi,
vol->ubi = ubi; vol->ubi = ubi;
if (reserved_pebs > ubi->avail_pebs) { if (reserved_pebs > ubi->avail_pebs) {
ubi_err("not enough PEBs, required %d, available %d", ubi_err(ubi, "not enough PEBs, required %d, available %d",
reserved_pebs, ubi->avail_pebs); reserved_pebs, ubi->avail_pebs);
if (ubi->corr_peb_count) if (ubi->corr_peb_count)
ubi_err("%d PEBs are corrupted and not used", ubi_err(ubi, "%d PEBs are corrupted and not used",
ubi->corr_peb_count); ubi->corr_peb_count);
} }
ubi->rsvd_pebs += reserved_pebs; ubi->rsvd_pebs += reserved_pebs;
...@@ -660,13 +660,14 @@ static int init_volumes(struct ubi_device *ubi, ...@@ -660,13 +660,14 @@ static int init_volumes(struct ubi_device *ubi,
/** /**
* check_av - check volume attaching information. * check_av - check volume attaching information.
* @ubi: UBI device description object
* @vol: UBI volume description object * @vol: UBI volume description object
* @av: volume attaching information * @av: volume attaching information
* *
* This function returns zero if the volume attaching information is consistent * This function returns zero if the volume attaching information is consistent
* to the data read from the volume tabla, and %-EINVAL if not. * to the data read from the volume tabla, and %-EINVAL if not.
*/ */
static int check_av(const struct ubi_volume *vol, static int check_av(const struct ubi_device *ubi, const struct ubi_volume *vol,
const struct ubi_ainf_volume *av) const struct ubi_ainf_volume *av)
{ {
int err; int err;
...@@ -694,7 +695,7 @@ static int check_av(const struct ubi_volume *vol, ...@@ -694,7 +695,7 @@ static int check_av(const struct ubi_volume *vol,
return 0; return 0;
bad: bad:
ubi_err("bad attaching information, error %d", err); ubi_err(ubi, "bad attaching information, error %d", err);
ubi_dump_av(av); ubi_dump_av(av);
ubi_dump_vol_info(vol); ubi_dump_vol_info(vol);
return -EINVAL; return -EINVAL;
...@@ -718,14 +719,15 @@ static int check_attaching_info(const struct ubi_device *ubi, ...@@ -718,14 +719,15 @@ static int check_attaching_info(const struct ubi_device *ubi,
struct ubi_volume *vol; struct ubi_volume *vol;
if (ai->vols_found > UBI_INT_VOL_COUNT + ubi->vtbl_slots) { if (ai->vols_found > UBI_INT_VOL_COUNT + ubi->vtbl_slots) {
ubi_err("found %d volumes while attaching, maximum is %d + %d", ubi_err(ubi, "found %d volumes while attaching, maximum is %d + %d",
ai->vols_found, UBI_INT_VOL_COUNT, ubi->vtbl_slots); ai->vols_found, UBI_INT_VOL_COUNT, ubi->vtbl_slots);
return -EINVAL; return -EINVAL;
} }
if (ai->highest_vol_id >= ubi->vtbl_slots + UBI_INT_VOL_COUNT && if (ai->highest_vol_id >= ubi->vtbl_slots + UBI_INT_VOL_COUNT &&
ai->highest_vol_id < UBI_INTERNAL_VOL_START) { ai->highest_vol_id < UBI_INTERNAL_VOL_START) {
ubi_err("too large volume ID %d found", ai->highest_vol_id); ubi_err(ubi, "too large volume ID %d found",
ai->highest_vol_id);
return -EINVAL; return -EINVAL;
} }
...@@ -753,10 +755,10 @@ static int check_attaching_info(const struct ubi_device *ubi, ...@@ -753,10 +755,10 @@ static int check_attaching_info(const struct ubi_device *ubi,
* reboot while the volume was being removed. Discard * reboot while the volume was being removed. Discard
* these eraseblocks. * these eraseblocks.
*/ */
ubi_msg("finish volume %d removal", av->vol_id); ubi_msg(ubi, "finish volume %d removal", av->vol_id);
ubi_remove_av(ai, av); ubi_remove_av(ai, av);
} else if (av) { } else if (av) {
err = check_av(vol, av); err = check_av(ubi, vol, av);
if (err) if (err)
return err; return err;
} }
...@@ -807,13 +809,13 @@ int ubi_read_volume_table(struct ubi_device *ubi, struct ubi_attach_info *ai) ...@@ -807,13 +809,13 @@ int ubi_read_volume_table(struct ubi_device *ubi, struct ubi_attach_info *ai)
if (IS_ERR(ubi->vtbl)) if (IS_ERR(ubi->vtbl))
return PTR_ERR(ubi->vtbl); return PTR_ERR(ubi->vtbl);
} else { } else {
ubi_err("the layout volume was not found"); ubi_err(ubi, "the layout volume was not found");
return -EINVAL; return -EINVAL;
} }
} else { } else {
if (av->leb_count > UBI_LAYOUT_VOLUME_EBS) { if (av->leb_count > UBI_LAYOUT_VOLUME_EBS) {
/* This must not happen with proper UBI images */ /* This must not happen with proper UBI images */
ubi_err("too many LEBs (%d) in layout volume", ubi_err(ubi, "too many LEBs (%d) in layout volume",
av->leb_count); av->leb_count);
return -EINVAL; return -EINVAL;
} }
...@@ -862,7 +864,7 @@ static void self_vtbl_check(const struct ubi_device *ubi) ...@@ -862,7 +864,7 @@ static void self_vtbl_check(const struct ubi_device *ubi)
return; return;
if (vtbl_check(ubi, ubi->vtbl)) { if (vtbl_check(ubi, ubi->vtbl)) {
ubi_err("self-check failed"); ubi_err(ubi, "self-check failed");
BUG(); BUG();
} }
} }
...@@ -253,7 +253,7 @@ static int do_work(struct ubi_device *ubi) ...@@ -253,7 +253,7 @@ static int do_work(struct ubi_device *ubi)
*/ */
err = wrk->func(ubi, wrk, 0); err = wrk->func(ubi, wrk, 0);
if (err) if (err)
ubi_err("work failed with error code %d", err); ubi_err(ubi, "work failed with error code %d", err);
up_read(&ubi->work_sem); up_read(&ubi->work_sem);
return err; return err;
...@@ -470,8 +470,11 @@ struct ubi_wl_entry *ubi_wl_get_fm_peb(struct ubi_device *ubi, int anchor) ...@@ -470,8 +470,11 @@ struct ubi_wl_entry *ubi_wl_get_fm_peb(struct ubi_device *ubi, int anchor)
{ {
struct ubi_wl_entry *e = NULL; struct ubi_wl_entry *e = NULL;
if (!ubi->free.rb_node || (ubi->free_count - ubi->beb_rsvd_pebs < 1)) if (!ubi->free.rb_node || (ubi->free_count - ubi->beb_rsvd_pebs < 1)) {
ubi_warn(ubi, "Can't get peb for fastmap:anchor=%d, free_cnt=%d, reserved=%d",
anchor, ubi->free_count, ubi->beb_rsvd_pebs);
goto out; goto out;
}
if (anchor) if (anchor)
e = find_anchor_wl_entry(&ubi->free); e = find_anchor_wl_entry(&ubi->free);
...@@ -507,7 +510,7 @@ static int __wl_get_peb(struct ubi_device *ubi) ...@@ -507,7 +510,7 @@ static int __wl_get_peb(struct ubi_device *ubi)
retry: retry:
if (!ubi->free.rb_node) { if (!ubi->free.rb_node) {
if (ubi->works_count == 0) { if (ubi->works_count == 0) {
ubi_err("no free eraseblocks"); ubi_err(ubi, "no free eraseblocks");
ubi_assert(list_empty(&ubi->works)); ubi_assert(list_empty(&ubi->works));
return -ENOSPC; return -ENOSPC;
} }
...@@ -520,7 +523,7 @@ static int __wl_get_peb(struct ubi_device *ubi) ...@@ -520,7 +523,7 @@ static int __wl_get_peb(struct ubi_device *ubi)
e = find_mean_wl_entry(ubi, &ubi->free); e = find_mean_wl_entry(ubi, &ubi->free);
if (!e) { if (!e) {
ubi_err("no free eraseblocks"); ubi_err(ubi, "no free eraseblocks");
return -ENOSPC; return -ENOSPC;
} }
...@@ -692,7 +695,8 @@ int ubi_wl_get_peb(struct ubi_device *ubi) ...@@ -692,7 +695,8 @@ int ubi_wl_get_peb(struct ubi_device *ubi)
err = ubi_self_check_all_ff(ubi, peb, ubi->vid_hdr_aloffset, err = ubi_self_check_all_ff(ubi, peb, ubi->vid_hdr_aloffset,
ubi->peb_size - ubi->vid_hdr_aloffset); ubi->peb_size - ubi->vid_hdr_aloffset);
if (err) { if (err) {
ubi_err("new PEB %d does not contain all 0xFF bytes", peb); ubi_err(ubi, "new PEB %d does not contain all 0xFF bytes",
peb);
return err; return err;
} }
...@@ -760,7 +764,7 @@ static int sync_erase(struct ubi_device *ubi, struct ubi_wl_entry *e, ...@@ -760,7 +764,7 @@ static int sync_erase(struct ubi_device *ubi, struct ubi_wl_entry *e,
* Erase counter overflow. Upgrade UBI and use 64-bit * Erase counter overflow. Upgrade UBI and use 64-bit
* erase counters internally. * erase counters internally.
*/ */
ubi_err("erase counter overflow at PEB %d, EC %llu", ubi_err(ubi, "erase counter overflow at PEB %d, EC %llu",
e->pnum, ec); e->pnum, ec);
err = -EINVAL; err = -EINVAL;
goto out_free; goto out_free;
...@@ -1137,7 +1141,7 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk, ...@@ -1137,7 +1141,7 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,
goto out_not_moved; goto out_not_moved;
} }
ubi_err("error %d while reading VID header from PEB %d", ubi_err(ubi, "error %d while reading VID header from PEB %d",
err, e1->pnum); err, e1->pnum);
goto out_error; goto out_error;
} }
...@@ -1181,7 +1185,7 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk, ...@@ -1181,7 +1185,7 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,
* UBI from trying to move it over and over again. * UBI from trying to move it over and over again.
*/ */
if (ubi->erroneous_peb_count > ubi->max_erroneous) { if (ubi->erroneous_peb_count > ubi->max_erroneous) {
ubi_err("too many erroneous eraseblocks (%d)", ubi_err(ubi, "too many erroneous eraseblocks (%d)",
ubi->erroneous_peb_count); ubi->erroneous_peb_count);
goto out_error; goto out_error;
} }
...@@ -1197,7 +1201,7 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk, ...@@ -1197,7 +1201,7 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,
/* The PEB has been successfully moved */ /* The PEB has been successfully moved */
if (scrubbing) if (scrubbing)
ubi_msg("scrubbed PEB %d (LEB %d:%d), data moved to PEB %d", ubi_msg(ubi, "scrubbed PEB %d (LEB %d:%d), data moved to PEB %d",
e1->pnum, vol_id, lnum, e2->pnum); e1->pnum, vol_id, lnum, e2->pnum);
ubi_free_vid_hdr(ubi, vid_hdr); ubi_free_vid_hdr(ubi, vid_hdr);
...@@ -1274,10 +1278,10 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk, ...@@ -1274,10 +1278,10 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,
out_error: out_error:
if (vol_id != -1) if (vol_id != -1)
ubi_err("error %d while moving PEB %d to PEB %d", ubi_err(ubi, "error %d while moving PEB %d to PEB %d",
err, e1->pnum, e2->pnum); err, e1->pnum, e2->pnum);
else else
ubi_err("error %d while moving PEB %d (LEB %d:%d) to PEB %d", ubi_err(ubi, "error %d while moving PEB %d (LEB %d:%d) to PEB %d",
err, e1->pnum, vol_id, lnum, e2->pnum); err, e1->pnum, vol_id, lnum, e2->pnum);
spin_lock(&ubi->wl_lock); spin_lock(&ubi->wl_lock);
ubi->move_from = ubi->move_to = NULL; ubi->move_from = ubi->move_to = NULL;
...@@ -1458,7 +1462,7 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk, ...@@ -1458,7 +1462,7 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk,
return err; return err;
} }
ubi_err("failed to erase PEB %d, error %d", pnum, err); ubi_err(ubi, "failed to erase PEB %d, error %d", pnum, err);
kfree(wl_wrk); kfree(wl_wrk);
if (err == -EINTR || err == -ENOMEM || err == -EAGAIN || if (err == -EINTR || err == -ENOMEM || err == -EAGAIN ||
...@@ -1486,7 +1490,7 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk, ...@@ -1486,7 +1490,7 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk,
/* It is %-EIO, the PEB went bad */ /* It is %-EIO, the PEB went bad */
if (!ubi->bad_allowed) { if (!ubi->bad_allowed) {
ubi_err("bad physical eraseblock %d detected", pnum); ubi_err(ubi, "bad physical eraseblock %d detected", pnum);
goto out_ro; goto out_ro;
} }
...@@ -1494,7 +1498,7 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk, ...@@ -1494,7 +1498,7 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk,
if (ubi->beb_rsvd_pebs == 0) { if (ubi->beb_rsvd_pebs == 0) {
if (ubi->avail_pebs == 0) { if (ubi->avail_pebs == 0) {
spin_unlock(&ubi->volumes_lock); spin_unlock(&ubi->volumes_lock);
ubi_err("no reserved/available physical eraseblocks"); ubi_err(ubi, "no reserved/available physical eraseblocks");
goto out_ro; goto out_ro;
} }
ubi->avail_pebs -= 1; ubi->avail_pebs -= 1;
...@@ -1502,7 +1506,7 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk, ...@@ -1502,7 +1506,7 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk,
} }
spin_unlock(&ubi->volumes_lock); spin_unlock(&ubi->volumes_lock);
ubi_msg("mark PEB %d as bad", pnum); ubi_msg(ubi, "mark PEB %d as bad", pnum);
err = ubi_io_mark_bad(ubi, pnum); err = ubi_io_mark_bad(ubi, pnum);
if (err) if (err)
goto out_ro; goto out_ro;
...@@ -1523,11 +1527,12 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk, ...@@ -1523,11 +1527,12 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk,
ubi->good_peb_count -= 1; ubi->good_peb_count -= 1;
ubi_calculate_reserved(ubi); ubi_calculate_reserved(ubi);
if (available_consumed) if (available_consumed)
ubi_warn("no PEBs in the reserved pool, used an available PEB"); ubi_warn(ubi, "no PEBs in the reserved pool, used an available PEB");
else if (ubi->beb_rsvd_pebs) else if (ubi->beb_rsvd_pebs)
ubi_msg("%d PEBs left in the reserve", ubi->beb_rsvd_pebs); ubi_msg(ubi, "%d PEBs left in the reserve",
ubi->beb_rsvd_pebs);
else else
ubi_warn("last PEB from the reserve was used"); ubi_warn(ubi, "last PEB from the reserve was used");
spin_unlock(&ubi->volumes_lock); spin_unlock(&ubi->volumes_lock);
return err; return err;
...@@ -1613,7 +1618,7 @@ int ubi_wl_put_peb(struct ubi_device *ubi, int vol_id, int lnum, ...@@ -1613,7 +1618,7 @@ int ubi_wl_put_peb(struct ubi_device *ubi, int vol_id, int lnum,
} else { } else {
err = prot_queue_del(ubi, e->pnum); err = prot_queue_del(ubi, e->pnum);
if (err) { if (err) {
ubi_err("PEB %d not found", pnum); ubi_err(ubi, "PEB %d not found", pnum);
ubi_ro_mode(ubi); ubi_ro_mode(ubi);
spin_unlock(&ubi->wl_lock); spin_unlock(&ubi->wl_lock);
return err; return err;
...@@ -1646,7 +1651,7 @@ int ubi_wl_scrub_peb(struct ubi_device *ubi, int pnum) ...@@ -1646,7 +1651,7 @@ int ubi_wl_scrub_peb(struct ubi_device *ubi, int pnum)
{ {
struct ubi_wl_entry *e; struct ubi_wl_entry *e;
ubi_msg("schedule PEB %d for scrubbing", pnum); ubi_msg(ubi, "schedule PEB %d for scrubbing", pnum);
retry: retry:
spin_lock(&ubi->wl_lock); spin_lock(&ubi->wl_lock);
...@@ -1678,7 +1683,7 @@ int ubi_wl_scrub_peb(struct ubi_device *ubi, int pnum) ...@@ -1678,7 +1683,7 @@ int ubi_wl_scrub_peb(struct ubi_device *ubi, int pnum)
err = prot_queue_del(ubi, e->pnum); err = prot_queue_del(ubi, e->pnum);
if (err) { if (err) {
ubi_err("PEB %d not found", pnum); ubi_err(ubi, "PEB %d not found", pnum);
ubi_ro_mode(ubi); ubi_ro_mode(ubi);
spin_unlock(&ubi->wl_lock); spin_unlock(&ubi->wl_lock);
return err; return err;
...@@ -1798,15 +1803,18 @@ int ubi_thread(void *u) ...@@ -1798,15 +1803,18 @@ int ubi_thread(void *u)
int failures = 0; int failures = 0;
struct ubi_device *ubi = u; struct ubi_device *ubi = u;
ubi_msg("background thread \"%s\" started, PID %d", ubi_msg(ubi, "background thread \"%s\" started, PID %d",
ubi->bgt_name, task_pid_nr(current)); ubi->bgt_name, task_pid_nr(current));
set_freezable(); set_freezable();
for (;;) { for (;;) {
int err; int err;
if (kthread_should_stop()) if (kthread_should_stop()) {
ubi_msg(ubi, "background thread \"%s\" should stop, PID %d",
ubi->bgt_name, task_pid_nr(current));
break; break;
}
if (try_to_freeze()) if (try_to_freeze())
continue; continue;
...@@ -1823,14 +1831,14 @@ int ubi_thread(void *u) ...@@ -1823,14 +1831,14 @@ int ubi_thread(void *u)
err = do_work(ubi); err = do_work(ubi);
if (err) { if (err) {
ubi_err("%s: work failed with error code %d", ubi_err(ubi, "%s: work failed with error code %d",
ubi->bgt_name, err); ubi->bgt_name, err);
if (failures++ > WL_MAX_FAILURES) { if (failures++ > WL_MAX_FAILURES) {
/* /*
* Too many failures, disable the thread and * Too many failures, disable the thread and
* switch to read-only mode. * switch to read-only mode.
*/ */
ubi_msg("%s: %d consecutive failures", ubi_msg(ubi, "%s: %d consecutive failures",
ubi->bgt_name, WL_MAX_FAILURES); ubi->bgt_name, WL_MAX_FAILURES);
ubi_ro_mode(ubi); ubi_ro_mode(ubi);
ubi->thread_enabled = 0; ubi->thread_enabled = 0;
...@@ -1981,10 +1989,10 @@ int ubi_wl_init(struct ubi_device *ubi, struct ubi_attach_info *ai) ...@@ -1981,10 +1989,10 @@ int ubi_wl_init(struct ubi_device *ubi, struct ubi_attach_info *ai)
#endif #endif
if (ubi->avail_pebs < reserved_pebs) { if (ubi->avail_pebs < reserved_pebs) {
ubi_err("no enough physical eraseblocks (%d, need %d)", ubi_err(ubi, "no enough physical eraseblocks (%d, need %d)",
ubi->avail_pebs, reserved_pebs); ubi->avail_pebs, reserved_pebs);
if (ubi->corr_peb_count) if (ubi->corr_peb_count)
ubi_err("%d PEBs are corrupted and not used", ubi_err(ubi, "%d PEBs are corrupted and not used",
ubi->corr_peb_count); ubi->corr_peb_count);
goto out_free; goto out_free;
} }
...@@ -2072,8 +2080,8 @@ static int self_check_ec(struct ubi_device *ubi, int pnum, int ec) ...@@ -2072,8 +2080,8 @@ static int self_check_ec(struct ubi_device *ubi, int pnum, int ec)
read_ec = be64_to_cpu(ec_hdr->ec); read_ec = be64_to_cpu(ec_hdr->ec);
if (ec != read_ec && read_ec - ec > 1) { if (ec != read_ec && read_ec - ec > 1) {
ubi_err("self-check failed for PEB %d", pnum); ubi_err(ubi, "self-check failed for PEB %d", pnum);
ubi_err("read EC is %lld, should be %d", read_ec, ec); ubi_err(ubi, "read EC is %lld, should be %d", read_ec, ec);
dump_stack(); dump_stack();
err = 1; err = 1;
} else } else
...@@ -2102,7 +2110,7 @@ static int self_check_in_wl_tree(const struct ubi_device *ubi, ...@@ -2102,7 +2110,7 @@ static int self_check_in_wl_tree(const struct ubi_device *ubi,
if (in_wl_tree(e, root)) if (in_wl_tree(e, root))
return 0; return 0;
ubi_err("self-check failed for PEB %d, EC %d, RB-tree %p ", ubi_err(ubi, "self-check failed for PEB %d, EC %d, RB-tree %p ",
e->pnum, e->ec, root); e->pnum, e->ec, root);
dump_stack(); dump_stack();
return -EINVAL; return -EINVAL;
...@@ -2130,7 +2138,7 @@ static int self_check_in_pq(const struct ubi_device *ubi, ...@@ -2130,7 +2138,7 @@ static int self_check_in_pq(const struct ubi_device *ubi,
if (p == e) if (p == e)
return 0; return 0;
ubi_err("self-check failed for PEB %d, EC %d, Protect queue", ubi_err(ubi, "self-check failed for PEB %d, EC %d, Protect queue",
e->pnum, e->ec); e->pnum, e->ec);
dump_stack(); dump_stack();
return -EINVAL; return -EINVAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment