Ocassionally we got EBUSY but it is a bit over used, so it is not clear what it means.
Add more logging to catch the source of the error. https://jira.vzint.dev/browse/PSBM-146836 Signed-off-by: Alexander Atanasov <alexander.atana...@virtuozzo.com> --- drivers/block/ploop/dev.c | 9 ++++++++- drivers/block/ploop/fmt_ploop1.c | 4 +++- drivers/block/ploop/io_kaio.c | 13 ++++++++++--- drivers/block/ploop/io_kaio_map.c | 6 ++++-- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/drivers/block/ploop/dev.c b/drivers/block/ploop/dev.c index 6eb22168b5fe..75e427927713 100644 --- a/drivers/block/ploop/dev.c +++ b/drivers/block/ploop/dev.c @@ -3572,8 +3572,11 @@ static int ploop_replace_delta(struct ploop_device * plo, unsigned long arg) sizeof(struct ploop_ctl_chunk))) return -EFAULT; - if (plo->maintenance_type != PLOOP_MNTN_OFF) + if (plo->maintenance_type != PLOOP_MNTN_OFF) { + if (printk_ratelimit()) + PL_WARN(plo, "Attempt to replace while in maintenance mode\n"); return -EBUSY; + } old_delta = find_delta(plo, ctl.pctl_level); if (old_delta == NULL) @@ -3586,6 +3589,10 @@ static int ploop_replace_delta(struct ploop_device * plo, unsigned long arg) if (IS_ERR(delta)) return PTR_ERR(delta); + WARN_ONCE(delta->ops != old_delta->ops, + "New delta uses different io %p vs %p\n", + delta->ops, old_delta->ops); + err = delta->ops->compose(delta, 1, &chunk); if (err) goto out_destroy; diff --git a/drivers/block/ploop/fmt_ploop1.c b/drivers/block/ploop/fmt_ploop1.c index e59a9eb50ac2..a89804561e57 100644 --- a/drivers/block/ploop/fmt_ploop1.c +++ b/drivers/block/ploop/fmt_ploop1.c @@ -314,8 +314,10 @@ ploop1_open(struct ploop_delta * delta) if (!(delta->flags & PLOOP_FMT_RDONLY)) { pvd_header_set_disk_in_use(vh); err = delta->io.ops->sync_write(&delta->io, ph->dyn_page, 4096, 0, 0); - if (err) + if (err) { + PL_ERR(delta->plo, "write failed updating in use\n"); goto out_err; + } } delta->io.alloc_head = ph->alloc_head; diff --git a/drivers/block/ploop/io_kaio.c b/drivers/block/ploop/io_kaio.c index ab93d2c70bc5..b7258252deb2 100644 --- a/drivers/block/ploop/io_kaio.c +++ b/drivers/block/ploop/io_kaio.c @@ -997,17 +997,23 @@ static int kaio_open(struct ploop_io * io) io->files.bdev = io->files.inode->i_sb->s_bdev; err = io->ops->sync(io); - if (err) + if (err) { + PL_WARN(delta->plo, "open failed to sync err=%d\n", err); return err; + } mutex_lock(&io->files.inode->i_mutex); err = kaio_invalidate_cache(io); - if (!err) + if (err) + PL_WARN(delta->plo, "invaldiate_cache failed err=%d\n", err); + else err = ploop_kaio_open(file, delta->flags & PLOOP_FMT_RDONLY); mutex_unlock(&io->files.inode->i_mutex); - if (err) + if (err) { + PL_WARN(delta->plo, "open failed err=%d\n", err); return err; + } io->files.em_tree = &dummy_em_tree; @@ -1019,6 +1025,7 @@ static int kaio_open(struct ploop_io * io) err = PTR_ERR(io->fsync_thread); io->fsync_thread = NULL; ploop_kaio_close(io->files.mapping, 0); + PL_WARN(delta->plo, "fsync thread start failed=%d\n", err); return err; } diff --git a/drivers/block/ploop/io_kaio_map.c b/drivers/block/ploop/io_kaio_map.c index d4ff39d95e74..5a3d11e0f4a9 100644 --- a/drivers/block/ploop/io_kaio_map.c +++ b/drivers/block/ploop/io_kaio_map.c @@ -35,9 +35,11 @@ int ploop_kaio_open(struct file * file, int rdonly) else m->readers++; } else { - if (m->readers) + if (m->readers) { + pr_warn("File is already active:%d\n", + m->readers); err = -EBUSY; - else + } else m->readers = -1; } goto kaio_open_done; -- 2.39.1 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel