On 12/01/2016 04:59 AM, Wolfgang Bumiller wrote: > Fixes #1644754. > > Signed-off-by: Wolfgang Bumiller <[email protected]> > --- > I'm not sure what the original rationale was to treat both partial > reads as well as well as writes as I/O error. (Seems to have happened > from original glusterfs v1 to v2 series with a note but no reasoning > for the read side as far as I could see.) > The general direction lately seems to be to move away from sector > based block APIs. Also eg. the NFS code allows partial reads. (It > does, however, have an old patch (c2eb918e3) dedicated to aligning > sizes to 512 byte boundaries for file creation for compatibility to > other parts of qemu like qcow2. This already happens in glusterfs, > though, but if you move a file from a different storage over to > glusterfs you may end up with a qcow2 file with eg. the L1 table in > the last 80 bytes of the file aligned to _begin_ at a 512 boundary, > but not _end_ at one.) > > block/gluster.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/block/gluster.c b/block/gluster.c > index 891c13b..3db0bf8 100644 > --- a/block/gluster.c > +++ b/block/gluster.c > @@ -41,6 +41,7 @@ typedef struct GlusterAIOCB { > int ret; > Coroutine *coroutine; > AioContext *aio_context; > + bool is_write; > } GlusterAIOCB; > > typedef struct BDRVGlusterState { > @@ -716,8 +717,10 @@ static void gluster_finish_aiocb(struct glfs_fd *fd, > ssize_t ret, void *arg) > acb->ret = 0; /* Success */ > } else if (ret < 0) { > acb->ret = -errno; /* Read/Write failed */ > + } else if (acb->is_write) { > + acb->ret = -EIO; /* Partial write - fail it */ > } else { > - acb->ret = -EIO; /* Partial read/write - fail it */ > + acb->ret = 0; /* Success */
Does this properly guarantee that the portion beyond EOF reads as zero? Would it be better to switch to byte-based interfaces rather than continue to force gluster interaction in 512-byte sector chunks, since gluster can obviously store files that are not 512-aligned? -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
