From e62d09b155f005e2001277c13cbbb34e754c1b62 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 3 Feb 2014 16:41:49 +0100 Subject: [PATCH] storage: add file functions for local and block files Implement the "stat" and "unlink" function for "file" volumes and "stat" for "block" volumes using the regular system calls. --- src/storage/storage_backend.c | 4 +++ src/storage/storage_backend_fs.c | 48 ++++++++++++++++++++++++++++++++ src/storage/storage_backend_fs.h | 2 ++ 3 files changed, 54 insertions(+) diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c index b59b5b7b80..aa12c5aece 100644 --- a/src/storage/storage_backend.c +++ b/src/storage/storage_backend.c @@ -123,6 +123,10 @@ static virStorageBackendPtr backends[] = { static virStorageFileBackendPtr fileBackends[] = { +#if WITH_STORAGE_FS + &virStorageFileBackendFile, + &virStorageFileBackendBlock, +#endif NULL }; diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index fa11e2f41c..4d69f74a99 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -1327,4 +1327,52 @@ virStorageBackend virStorageBackendNetFileSystem = { .deleteVol = virStorageBackendFileSystemVolDelete, .resizeVol = virStorageBackendFileSystemVolResize, }; + + +static int +virStorageFileBackendFileUnlink(virStorageFilePtr file) +{ + int ret; + + ret = unlink(file->path); + /* preserve errno */ + + VIR_DEBUG("removing storage file %p(%s): ret=%d, errno=%d", + file, file->path, ret, errno); + + return ret; +} + + +static int +virStorageFileBackendFileStat(virStorageFilePtr file, + struct stat *st) +{ + int ret; + + ret = stat(file->path, st); + /* preserve errno */ + + VIR_DEBUG("stat of storage file %p(%s): ret=%d, errno=%d", + file, file->path, ret, errno); + + return ret; +} + + +virStorageFileBackend virStorageFileBackendFile = { + .type = VIR_DOMAIN_DISK_TYPE_FILE, + + .storageFileUnlink = virStorageFileBackendFileUnlink, + .storageFileStat = virStorageFileBackendFileStat, +}; + + +virStorageFileBackend virStorageFileBackendBlock = { + .type = VIR_DOMAIN_DISK_TYPE_BLOCK, + + .storageFileStat = virStorageFileBackendFileStat, +}; + + #endif /* WITH_STORAGE_FS */ diff --git a/src/storage/storage_backend_fs.h b/src/storage/storage_backend_fs.h index a519b3810b..347ea9be5c 100644 --- a/src/storage/storage_backend_fs.h +++ b/src/storage/storage_backend_fs.h @@ -38,4 +38,6 @@ typedef enum { } virStoragePoolProbeResult; extern virStorageBackend virStorageBackendDirectory; +extern virStorageFileBackend virStorageFileBackendFile; +extern virStorageFileBackend virStorageFileBackendBlock; #endif /* __VIR_STORAGE_BACKEND_FS_H__ */