[Devel] [PATCH 07/10] ploop: Add .complete_merge method
Kirill Tkhai
ktkhai at virtuozzo.com
Tue Mar 26 18:19:13 MSK 2019
It will be used to reallocated holes bitmap
after merge.
Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
---
drivers/block/ploop/dev.c | 17 ++++++++++++-----
drivers/block/ploop/io_direct_map.c | 2 ++
include/linux/ploop/ploop.h | 1 +
3 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/drivers/block/ploop/dev.c b/drivers/block/ploop/dev.c
index 57920a93129a..618d22bf02ec 100644
--- a/drivers/block/ploop/dev.c
+++ b/drivers/block/ploop/dev.c
@@ -3762,18 +3762,25 @@ static void ploop_update_fmt_version(struct ploop_device * plo)
}
}
-static void ploop_merge_cleanup(struct ploop_device * plo,
- struct ploop_map * map,
- struct ploop_delta * delta, int err)
+static void ploop_merge_complete(struct ploop_device * plo,
+ struct ploop_map * map,
+ struct ploop_delta * delta, int err)
{
+ struct ploop_delta *top_delta;
+
ploop_quiesce(plo);
mutex_lock(&plo->sysfs_mutex);
list_del(&delta->list);
if (err)
list_add(&delta->list, &plo->map.delta_list);
- else
+ else {
+ top_delta = ploop_top_delta(plo);
+ if (top_delta->ops->complete_merge)
+ /* FIXME: How should we handle error here? */
+ top_delta->ops->complete_merge(top_delta);
ploop_update_fmt_version(plo);
+ }
plo->trans_map = NULL;
plo->maintenance_type = PLOOP_MNTN_OFF;
@@ -3873,7 +3880,7 @@ static int ploop_merge(struct ploop_device * plo)
err = -EIO;
}
- ploop_merge_cleanup(plo, map, delta, err);
+ ploop_merge_complete(plo, map, delta, err);
if (!err) {
kobject_del(&delta->kobj);
diff --git a/drivers/block/ploop/io_direct_map.c b/drivers/block/ploop/io_direct_map.c
index bc65e60e72a3..7934bc8ecfb1 100644
--- a/drivers/block/ploop/io_direct_map.c
+++ b/drivers/block/ploop/io_direct_map.c
@@ -620,6 +620,8 @@ static int fallocate_cluster(struct ploop_io *io, struct inode *inode,
}
ret = file->f_op->fallocate(file, FALLOC_FL_KEEP_SIZE, start_off, len);
+ if (!ret)
+ ret = io->ops->sync(io);
out:
return ret;
}
diff --git a/include/linux/ploop/ploop.h b/include/linux/ploop/ploop.h
index 73141c536f65..a730c2de7873 100644
--- a/include/linux/ploop/ploop.h
+++ b/include/linux/ploop/ploop.h
@@ -283,6 +283,7 @@ struct ploop_delta_ops
int (*complete_snapshot)(struct ploop_delta *, struct ploop_snapdata *);
int (*prepare_merge)(struct ploop_delta *, struct ploop_snapdata *);
int (*start_merge)(struct ploop_delta *, struct ploop_snapdata *);
+ int (*complete_merge)(struct ploop_delta *);
int (*truncate)(struct ploop_delta *, struct file *, __u32 alloc_head);
int (*prepare_grow)(struct ploop_delta *, u64 *new_size, int *reloc);
int (*complete_grow)(struct ploop_delta *, u64 new_size);
More information about the Devel
mailing list