提交 e40a285b 编写于 作者: C Cole Robinson

storage: Combine some duplicate code

Volume detection in the scsi backend was duplicating code already
present in storage_backend.c. Let's drop the duplicate code.

Also, change the shared function name to be less generic, and remove
some error squashing in the other call site.
上级 5086f85c
...@@ -1050,8 +1050,8 @@ static struct diskType const disk_types[] = { ...@@ -1050,8 +1050,8 @@ static struct diskType const disk_types[] = {
int int
virStorageBackendUpdateVolTargetFormatFD(virStorageVolTargetPtr target, virStorageBackendDetectBlockVolFormatFD(virStorageVolTargetPtr target,
int fd) int fd)
{ {
int i; int i;
off_t start; off_t start;
......
...@@ -92,8 +92,8 @@ int virStorageBackendUpdateVolTargetInfoFD(virStorageVolTargetPtr target, ...@@ -92,8 +92,8 @@ int virStorageBackendUpdateVolTargetInfoFD(virStorageVolTargetPtr target,
unsigned long long *allocation, unsigned long long *allocation,
unsigned long long *capacity); unsigned long long *capacity);
int int
virStorageBackendUpdateVolTargetFormatFD(virStorageVolTargetPtr target, virStorageBackendDetectBlockVolFormatFD(virStorageVolTargetPtr target,
int fd); int fd);
char *virStorageBackendStablePath(virStoragePoolObjPtr pool, char *virStorageBackendStablePath(virStoragePoolObjPtr pool,
const char *devpath); const char *devpath);
......
...@@ -59,7 +59,7 @@ virStorageBackendMpathUpdateVolTargetInfo(virStorageVolTargetPtr target, ...@@ -59,7 +59,7 @@ virStorageBackendMpathUpdateVolTargetInfo(virStorageVolTargetPtr target,
capacity) < 0) capacity) < 0)
goto out; goto out;
if (virStorageBackendUpdateVolTargetFormatFD(target, fd) < 0) if (virStorageBackendDetectBlockVolFormatFD(target, fd) < 0)
goto out; goto out;
ret = 0; ret = 0;
......
...@@ -135,10 +135,7 @@ virStorageBackendSCSIUpdateVolTargetInfo(virStorageVolTargetPtr target, ...@@ -135,10 +135,7 @@ virStorageBackendSCSIUpdateVolTargetInfo(virStorageVolTargetPtr target,
unsigned long long *allocation, unsigned long long *allocation,
unsigned long long *capacity) unsigned long long *capacity)
{ {
int fd, i, ret = -1; int fd, ret = -1;
off_t start;
unsigned char buffer[1024];
ssize_t bytes;
if ((fd = open(target->path, O_RDONLY)) < 0) { if ((fd = open(target->path, O_RDONLY)) < 0) {
virReportSystemError(errno, virReportSystemError(errno,
...@@ -153,33 +150,8 @@ virStorageBackendSCSIUpdateVolTargetInfo(virStorageVolTargetPtr target, ...@@ -153,33 +150,8 @@ virStorageBackendSCSIUpdateVolTargetInfo(virStorageVolTargetPtr target,
capacity) < 0) capacity) < 0)
goto cleanup; goto cleanup;
/* make sure to set the target format "unknown" to begin with */ if (virStorageBackendDetectBlockVolFormatFD(target, fd) < 0)
target->format = VIR_STORAGE_POOL_DISK_UNKNOWN;
start = lseek(fd, 0, SEEK_SET);
if (start < 0) {
virReportSystemError(errno,
_("cannot seek to beginning of file '%s'"),
target->path);
goto cleanup;
}
bytes = saferead(fd, buffer, sizeof(buffer));
if (bytes < 0) {
virReportSystemError(errno,
_("cannot read beginning of file '%s'"),
target->path);
goto cleanup; goto cleanup;
}
for (i = 0; disk_types[i].part_table_type != -1; i++) {
if (disk_types[i].offset + disk_types[i].length > bytes)
continue;
if (memcmp(buffer+disk_types[i].offset, &disk_types[i].magic,
disk_types[i].length) == 0) {
target->format = disk_types[i].part_table_type;
break;
}
}
ret = 0; ret = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册