mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-09 14:35:25 +00:00
virstoragefile: move virStorageFileResize into virfile
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
e1894cf490
commit
ec594462c1
@ -2121,6 +2121,7 @@ virFileRelLinkPointsTo;
|
|||||||
virFileRemove;
|
virFileRemove;
|
||||||
virFileRemoveLastComponent;
|
virFileRemoveLastComponent;
|
||||||
virFileRemoveXAttr;
|
virFileRemoveXAttr;
|
||||||
|
virFileResize;
|
||||||
virFileResolveAllLinks;
|
virFileResolveAllLinks;
|
||||||
virFileResolveLink;
|
virFileResolveLink;
|
||||||
virFileRewrite;
|
virFileRewrite;
|
||||||
@ -3150,7 +3151,6 @@ virStorageFileParseChainIndex;
|
|||||||
virStorageFileProbeFormat;
|
virStorageFileProbeFormat;
|
||||||
virStorageFileRead;
|
virStorageFileRead;
|
||||||
virStorageFileReportBrokenChain;
|
virStorageFileReportBrokenChain;
|
||||||
virStorageFileResize;
|
|
||||||
virStorageFileStat;
|
virStorageFileStat;
|
||||||
virStorageFileSupportsAccess;
|
virStorageFileSupportsAccess;
|
||||||
virStorageFileSupportsBackingChainTraversal;
|
virStorageFileSupportsBackingChainTraversal;
|
||||||
|
@ -2394,7 +2394,7 @@ virStorageBackendVolResizeLocal(virStoragePoolObjPtr pool,
|
|||||||
VIR_STORAGE_VOL_RESIZE_SHRINK, -1);
|
VIR_STORAGE_VOL_RESIZE_SHRINK, -1);
|
||||||
|
|
||||||
if (vol->target.format == VIR_STORAGE_FILE_RAW && !vol->target.encryption) {
|
if (vol->target.format == VIR_STORAGE_FILE_RAW && !vol->target.encryption) {
|
||||||
return virStorageFileResize(vol->target.path, capacity, pre_allocate);
|
return virFileResize(vol->target.path, capacity, pre_allocate);
|
||||||
} else if (vol->target.format == VIR_STORAGE_FILE_RAW && vol->target.encryption) {
|
} else if (vol->target.format == VIR_STORAGE_FILE_RAW && vol->target.encryption) {
|
||||||
if (pre_allocate) {
|
if (pre_allocate) {
|
||||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||||
|
@ -557,6 +557,53 @@ virFileRewriteStr(const char *path,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virFileResize:
|
||||||
|
*
|
||||||
|
* Change the capacity of the raw storage file at 'path'.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virFileResize(const char *path,
|
||||||
|
unsigned long long capacity,
|
||||||
|
bool pre_allocate)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
VIR_AUTOCLOSE fd = -1;
|
||||||
|
|
||||||
|
if ((fd = open(path, O_RDWR)) < 0) {
|
||||||
|
virReportSystemError(errno, _("Unable to open '%s'"), path);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pre_allocate) {
|
||||||
|
if ((rc = virFileAllocate(fd, 0, capacity)) != 0) {
|
||||||
|
if (rc == -2) {
|
||||||
|
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||||
|
_("preallocate is not supported on this platform"));
|
||||||
|
} else {
|
||||||
|
virReportSystemError(errno,
|
||||||
|
_("Failed to pre-allocate space for "
|
||||||
|
"file '%s'"), path);
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ftruncate(fd, capacity) < 0) {
|
||||||
|
virReportSystemError(errno,
|
||||||
|
_("Failed to truncate file '%s'"), path);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (VIR_CLOSE(fd) < 0) {
|
||||||
|
virReportSystemError(errno, _("Unable to save '%s'"), path);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int virFileTouch(const char *path, mode_t mode)
|
int virFileTouch(const char *path, mode_t mode)
|
||||||
{
|
{
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
|
@ -133,6 +133,10 @@ int virFileRewriteStr(const char *path,
|
|||||||
mode_t mode,
|
mode_t mode,
|
||||||
const char *str);
|
const char *str);
|
||||||
|
|
||||||
|
int virFileResize(const char *path,
|
||||||
|
unsigned long long capacity,
|
||||||
|
bool pre_allocate);
|
||||||
|
|
||||||
int virFileTouch(const char *path, mode_t mode);
|
int virFileTouch(const char *path, mode_t mode);
|
||||||
|
|
||||||
int virFileUpdatePerm(const char *path,
|
int virFileUpdatePerm(const char *path,
|
||||||
|
@ -1193,53 +1193,6 @@ virStorageFileGetMetadataFromFD(const char *path,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* virStorageFileResize:
|
|
||||||
*
|
|
||||||
* Change the capacity of the raw storage file at 'path'.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
virStorageFileResize(const char *path,
|
|
||||||
unsigned long long capacity,
|
|
||||||
bool pre_allocate)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
VIR_AUTOCLOSE fd = -1;
|
|
||||||
|
|
||||||
if ((fd = open(path, O_RDWR)) < 0) {
|
|
||||||
virReportSystemError(errno, _("Unable to open '%s'"), path);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pre_allocate) {
|
|
||||||
if ((rc = virFileAllocate(fd, 0, capacity)) != 0) {
|
|
||||||
if (rc == -2) {
|
|
||||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
|
||||||
_("preallocate is not supported on this platform"));
|
|
||||||
} else {
|
|
||||||
virReportSystemError(errno,
|
|
||||||
_("Failed to pre-allocate space for "
|
|
||||||
"file '%s'"), path);
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ftruncate(fd, capacity) < 0) {
|
|
||||||
virReportSystemError(errno,
|
|
||||||
_("Failed to truncate file '%s'"), path);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (VIR_CLOSE(fd) < 0) {
|
|
||||||
virReportSystemError(errno, _("Unable to save '%s'"), path);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int virStorageFileIsClusterFS(const char *path)
|
int virStorageFileIsClusterFS(const char *path)
|
||||||
{
|
{
|
||||||
/* These are coherent cluster filesystems known to be safe for
|
/* These are coherent cluster filesystems known to be safe for
|
||||||
|
@ -420,10 +420,6 @@ virStorageSourcePtr virStorageFileChainLookup(virStorageSourcePtr chain,
|
|||||||
virStorageSourcePtr *parent)
|
virStorageSourcePtr *parent)
|
||||||
ATTRIBUTE_NONNULL(1);
|
ATTRIBUTE_NONNULL(1);
|
||||||
|
|
||||||
int virStorageFileResize(const char *path,
|
|
||||||
unsigned long long capacity,
|
|
||||||
bool pre_allocate);
|
|
||||||
|
|
||||||
int virStorageFileIsClusterFS(const char *path);
|
int virStorageFileIsClusterFS(const char *path);
|
||||||
bool virStorageIsFile(const char *path);
|
bool virStorageIsFile(const char *path);
|
||||||
bool virStorageIsRelative(const char *backing);
|
bool virStorageIsRelative(const char *backing);
|
||||||
|
Loading…
Reference in New Issue
Block a user