[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 16 of 21] blktap3/drivers: Introduces back-end storage type discovery
This patch copies from blktap2.5 functionality that retrieves the type of the back-end storage. Signed-off-by: Thanos Makatos <thanos.makatos@xxxxxxxxxx> diff --git a/tools/blktap3/drivers/tapdisk-storage.c b/tools/blktap3/drivers/tapdisk-storage.c new file mode 100644 --- /dev/null +++ b/tools/blktap3/drivers/tapdisk-storage.c @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2010, Citrix Systems, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of XenSource Inc. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <errno.h> +#include <limits.h> +#include <stdlib.h> +#include <sys/stat.h> +#include <sys/vfs.h> + +#include "tapdisk-storage.h" + +#ifndef NFS_SUPER_MAGIC +#define NFS_SUPER_MAGIC 0x6969 +#endif + +static int __tapdisk_fs_storage_type(const char *rpath) +{ + struct statfs fst; + int type, err; + + err = statfs(rpath, &fst); + if (err) + return -errno; + + switch (fst.f_type) { + case NFS_SUPER_MAGIC: + type = TAPDISK_STORAGE_TYPE_NFS; + break; + default: + type = TAPDISK_STORAGE_TYPE_EXT; + break; + } + + return type; +} + +static int +__tapdisk_blk_storage_type(const char *rpath __attribute__((unused))) +{ + return TAPDISK_STORAGE_TYPE_LVM; +} + +int tapdisk_storage_type(const char *path) +{ + char rpath[PATH_MAX], *p; + struct stat st; + int err, rv; + + p = realpath(path, rpath); + if (!p) + return -errno; + + err = stat(rpath, &st); + if (err) + return -errno; + + switch (st.st_mode & S_IFMT) { + case S_IFBLK: + rv = __tapdisk_blk_storage_type(rpath); + break; + case S_IFREG: + rv = __tapdisk_fs_storage_type(rpath); + break; + default: + rv = -EINVAL; + break; + } + + return rv; +} + +const char *tapdisk_storage_name(int type) +{ + switch (type) { + case TAPDISK_STORAGE_TYPE_NFS: + return "nfs"; + case TAPDISK_STORAGE_TYPE_EXT: + return "ext"; + case TAPDISK_STORAGE_TYPE_LVM: + return "lvm"; + case -1: + return "n/a"; + default: + return "<unknown-type>"; + } +} diff --git a/tools/blktap3/drivers/tapdisk-storage.h b/tools/blktap3/drivers/tapdisk-storage.h new file mode 100644 --- /dev/null +++ b/tools/blktap3/drivers/tapdisk-storage.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2008, XenSource Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of XenSource Inc. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _TAPDISK_STORAGE_H_ +#define _TAPDISK_STORAGE_H_ + +#define TAPDISK_STORAGE_TYPE_NFS 1 +#define TAPDISK_STORAGE_TYPE_EXT 2 +#define TAPDISK_STORAGE_TYPE_LVM 3 + +int tapdisk_storage_type(const char *path); +const char *tapdisk_storage_name(int type); + +#endif _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |