mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-12 07:42:56 +00:00
storage: improve allocation stats reported on gluster files
We already had code for handling allocation different than capacity for sparse files; we just had to wire it up to be used when inspecting gluster images. * src/storage/storage_backend.c (virStorageBackendUpdateVolTargetInfoFD): Handle no fd. * src/storage/storage_backend_gluster.c (virStorageBackendGlusterRefreshVol): Handle sparse files. Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
1458b2e963
commit
13e738cc0a
@ -1296,9 +1296,9 @@ int virStorageBackendUpdateVolInfo(virStorageVolDefPtr vol,
|
||||
|
||||
/*
|
||||
* virStorageBackendUpdateVolTargetInfoFD:
|
||||
* @conn: connection to report errors on
|
||||
* @target: target definition ptr of volume to update
|
||||
* @fd: fd of storage volume to update, via virStorageBackendOpenVol*
|
||||
* @fd: fd of storage volume to update, via virStorageBackendOpenVol*, or -1
|
||||
* @sb: details about file (must match @fd, if that is provided)
|
||||
* @allocation: If not NULL, updated allocation information will be stored
|
||||
* @capacity: If not NULL, updated capacity info will be stored
|
||||
*
|
||||
@ -1333,7 +1333,7 @@ virStorageBackendUpdateVolTargetInfoFD(virStorageVolTargetPtr target,
|
||||
if (capacity)
|
||||
*capacity = 0;
|
||||
|
||||
} else {
|
||||
} else if (fd >= 0) {
|
||||
off_t end;
|
||||
/* XXX this is POSIX compliant, but doesn't work for CHAR files,
|
||||
* only BLOCK. There is a Linux specific ioctl() for getting
|
||||
@ -1368,7 +1368,7 @@ virStorageBackendUpdateVolTargetInfoFD(virStorageVolTargetPtr target,
|
||||
|
||||
#if WITH_SELINUX
|
||||
/* XXX: make this a security driver call */
|
||||
if (fgetfilecon_raw(fd, &filecon) == -1) {
|
||||
if (fd >= 0 && fgetfilecon_raw(fd, &filecon) == -1) {
|
||||
if (errno != ENODATA && errno != ENOTSUP) {
|
||||
virReportSystemError(errno,
|
||||
_("cannot get file context of '%s'"),
|
||||
|
@ -168,6 +168,12 @@ virStorageBackendGlusterRefreshVol(virStorageBackendGlusterStatePtr state,
|
||||
|
||||
if (VIR_ALLOC(vol) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (virStorageBackendUpdateVolTargetInfoFD(&vol->target, -1, st,
|
||||
&vol->allocation,
|
||||
&vol->capacity) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (VIR_STRDUP(vol->name, name) < 0)
|
||||
goto cleanup;
|
||||
if (virAsprintf(&vol->key, "%s%s%s", state->volname, state->dir,
|
||||
@ -194,7 +200,6 @@ virStorageBackendGlusterRefreshVol(virStorageBackendGlusterStatePtr state,
|
||||
/* FIXME - must open files to determine if they are non-raw */
|
||||
vol->type = VIR_STORAGE_VOL_NETWORK;
|
||||
vol->target.format = VIR_STORAGE_FILE_RAW;
|
||||
vol->capacity = vol->allocation = st->st_size;
|
||||
|
||||
*volptr = vol;
|
||||
vol = NULL;
|
||||
|
Loading…
x
Reference in New Issue
Block a user