Commit d9b78974 authored by Jeff Cody's avatar Jeff Cody
Browse files

block: add gluster ifdef guard checks for SEEK_DATA/SEEK_HOLE support



Add checks to see if the system compiling QEMU has support for
SEEK_HOLE/SEEK_DATA.  If the system does not, we will flag that seek
data is unsupported in gluster.

Note: this is not a check on whether the gluster server itself supports
SEEK_DATA (that is already done during runtime), but rather if the
compilation environment supports SEEK_DATA.

Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarJeff Cody <jcody@redhat.com>
Tested-by: default avatarEric Blake <eblake@redhat.com>
Message-id: 00370bce5c98140d6c56ad5145635ec6551265cc.1475876377.git.jcody@redhat.com
Signed-off-by: default avatarJeff Cody <jcody@redhat.com>
parent e38f643a
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -668,7 +668,10 @@ static void qemu_gluster_parse_flags(int bdrv_flags, int *open_flags)
 */
static bool qemu_gluster_test_seek(struct glfs_fd *fd)
{
    off_t ret, eof;
    off_t ret = 0;

#if defined SEEK_HOLE && defined SEEK_DATA
    off_t eof;

    eof = glfs_lseek(fd, 0, SEEK_END);
    if (eof < 0) {
@@ -678,6 +681,8 @@ static bool qemu_gluster_test_seek(struct glfs_fd *fd)

    /* this should always fail with ENXIO if SEEK_DATA is supported */
    ret = glfs_lseek(fd, eof, SEEK_DATA);
#endif

    return (ret < 0) && (errno == ENXIO);
}

@@ -1178,12 +1183,14 @@ static int find_allocation(BlockDriverState *bs, off_t start,
                           off_t *data, off_t *hole)
{
    BDRVGlusterState *s = bs->opaque;
    off_t offs;

    if (!s->supports_seek_data) {
        return -ENOTSUP;
        goto exit;
    }

#if defined SEEK_HOLE && defined SEEK_DATA
    off_t offs;

    /*
     * SEEK_DATA cases:
     * D1. offs == start: start is in data
@@ -1247,6 +1254,10 @@ static int find_allocation(BlockDriverState *bs, off_t start,

    /* D1 and H1 */
    return -EBUSY;
#endif

exit:
    return -ENOTSUP;
}

/*