提交 5463d959 编写于 作者: J Ján Tomko

use virFileAllocate in virStorageFileResize

Introduce a new function virFileAllocate that will call the
non-destructive variants of safezero, essentially reverting
my commit 1390c268
    safezero: fall back to writing zeroes even when resizing
back to the state as of commit 18f03166
    virstoragefile: Have virStorageFileResize use safezero

This means that _ALLOCATE flag will no longer work on platforms
without the allocate syscalls, but it will not overwrite data
either.
上级 63d3d895
......@@ -1216,6 +1216,17 @@ int safezero(int fd, off_t offset, off_t len)
return safezero_slow(fd, offset, len);
}
int virFileAllocate(int fd, off_t offset, off_t len)
{
int ret;
ret = safezero_posix_fallocate(fd, offset, len);
if (ret != -2)
return ret;
return safezero_sys_fallocate(fd, offset, len);
}
#if defined HAVE_MNTENT_H && defined HAVE_GETMNTENT_R
/* search /proc/mounts for mount point of *type; return pointer to
* malloc'ed string of the path if found, otherwise return NULL
......
......@@ -44,6 +44,8 @@ ssize_t safewrite(int fd, const void *buf, size_t count)
ATTRIBUTE_RETURN_CHECK;
int safezero(int fd, off_t offset, off_t len)
ATTRIBUTE_RETURN_CHECK;
int virFileAllocate(int fd, off_t offset, off_t len)
ATTRIBUTE_RETURN_CHECK;
/* Don't call these directly - use the macros below */
int virFileClose(int *fdptr, virFileCloseFlags flags)
......
......@@ -1320,7 +1320,7 @@ virStorageFileResize(const char *path,
{
int fd = -1;
int ret = -1;
int rc ATTRIBUTE_UNUSED;
int rc;
off_t offset ATTRIBUTE_UNUSED;
off_t len ATTRIBUTE_UNUSED;
......@@ -1333,10 +1333,15 @@ virStorageFileResize(const char *path,
}
if (pre_allocate) {
if (safezero(fd, offset, len) != 0) {
virReportSystemError(errno,
_("Failed to pre-allocate space for "
"file '%s'"), path);
if ((rc = virFileAllocate(fd, offset, len)) != 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);
}
goto cleanup;
}
} else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册