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 | 7 +++++-- 4 files changed, 26 insertions(+), 7 deletions(-) v1->v2: addressing review comments - print the error value and fix coding style diff --git a/drivers/block/ploop/dev.c b/drivers/block/ploop/dev.c index 2833865b087f..8e238eafd9f2 100644 --- a/drivers/block/ploop/dev.c +++ b/drivers/block/ploop/dev.c @@ -3582,8 +3582,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) @@ -3596,6 +3599,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..a0369db35c83 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, "failed to update in use err=%d\n", err); 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 35c0fad43baf..098f6c7b5f2d 100644 --- a/drivers/block/ploop/io_kaio.c +++ b/drivers/block/ploop/io_kaio.c @@ -966,17 +966,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; @@ -988,6 +994,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..59e35c562ef9 100644 --- a/drivers/block/ploop/io_kaio_map.c +++ b/drivers/block/ploop/io_kaio_map.c @@ -35,10 +35,13 @@ 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