On Thu, Mar 28, 2019 at 11:52:27AM +0100, Stefano Garzarella wrote: > Several versions of GlusterFS (3.12? -> 6.0.1) fail when the > transfer size is greater or equal to 1024 MiB, so we are > limiting the transfer size to 512 MiB to avoid this rare issue. > > Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1691320 > Signed-off-by: Stefano Garzarella <sgarz...@redhat.com> > --- > > RFC: > Should I add a parameter to allow the user to modify the max_transfer > variable?
No, that is not needed IMHO. In most environments where large files are used, sharding is enabled on the Gluster volumes. For VM images shards of 256MB are recommeneded (I think). When sharding is enabled, the writes will be limited to that size as well, hence the problem is not noticed on (most) production deployments. Reviewed-by: Niels de Vos <nde...@redhat.com> > > > block/gluster.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/block/gluster.c b/block/gluster.c > index af64330211..e1e4eaa525 100644 > --- a/block/gluster.c > +++ b/block/gluster.c > @@ -9,6 +9,7 @@ > */ > > #include "qemu/osdep.h" > +#include "qemu/units.h" > #include <glusterfs/api/glfs.h> > #include "block/block_int.h" > #include "block/qdict.h" > @@ -37,6 +38,12 @@ > #define GLUSTER_DEBUG_MAX 9 > #define GLUSTER_OPT_LOGFILE "logfile" > #define GLUSTER_LOGFILE_DEFAULT "-" /* handled in libgfapi as > /dev/stderr */ > +/* > + * Several versions of GlusterFS (3.12? -> 6.0.1) fail when the transfer size > + * is greater or equal to 1024 MiB, so we are limiting the transfer size to > 512 > + * MiB to avoid this rare issue. > + */ > +#define GLUSTER_MAX_TRANSFER (512 * MiB) > > #define GERR_INDEX_HINT "hint: check in 'server' array index '%d'\n" > > @@ -879,6 +886,11 @@ out: > return ret; > } > > +static void qemu_gluster_refresh_limits(BlockDriverState *bs, Error **errp) > +{ > + bs->bl.max_transfer = GLUSTER_MAX_TRANSFER; > +} > + > static int qemu_gluster_reopen_prepare(BDRVReopenState *state, > BlockReopenQueue *queue, Error **errp) > { > @@ -1536,6 +1548,7 @@ static BlockDriver bdrv_gluster = { > .bdrv_co_pwrite_zeroes = qemu_gluster_co_pwrite_zeroes, > #endif > .bdrv_co_block_status = qemu_gluster_co_block_status, > + .bdrv_refresh_limits = qemu_gluster_refresh_limits, > .create_opts = &qemu_gluster_create_opts, > .strong_runtime_opts = gluster_strong_open_opts, > }; > @@ -1566,6 +1579,7 @@ static BlockDriver bdrv_gluster_tcp = { > .bdrv_co_pwrite_zeroes = qemu_gluster_co_pwrite_zeroes, > #endif > .bdrv_co_block_status = qemu_gluster_co_block_status, > + .bdrv_refresh_limits = qemu_gluster_refresh_limits, > .create_opts = &qemu_gluster_create_opts, > .strong_runtime_opts = gluster_strong_open_opts, > }; > @@ -1596,6 +1610,7 @@ static BlockDriver bdrv_gluster_unix = { > .bdrv_co_pwrite_zeroes = qemu_gluster_co_pwrite_zeroes, > #endif > .bdrv_co_block_status = qemu_gluster_co_block_status, > + .bdrv_refresh_limits = qemu_gluster_refresh_limits, > .create_opts = &qemu_gluster_create_opts, > .strong_runtime_opts = gluster_strong_open_opts, > }; > @@ -1632,6 +1647,7 @@ static BlockDriver bdrv_gluster_rdma = { > .bdrv_co_pwrite_zeroes = qemu_gluster_co_pwrite_zeroes, > #endif > .bdrv_co_block_status = qemu_gluster_co_block_status, > + .bdrv_refresh_limits = qemu_gluster_refresh_limits, > .create_opts = &qemu_gluster_create_opts, > .strong_runtime_opts = gluster_strong_open_opts, > }; > -- > 2.20.1 > >