Trying to pool-create a netfs pool with the format type
'auto' (as in, to autodetect the format) runs the command
mount -t auto munged-source-path
'-t auto' seems to do its job for regular file systems, but
actually fails with nfs or cifs (I assume anything that required
an external mount program). Strangely though, the command
mount munged-source-path
will do the right thing.
The attached patch fixes the generated command to work in
the above case, fully removing the '-t type' piece if auto
is specified for a netfs pool.
I tested the intended case, as well as regular fs pools
format=auto, and netfs format=nfs, and all seemed to work
fine.
Thanks,
Cole
diff --git a/src/storage_backend_fs.c b/src/storage_backend_fs.c
index 9926493..f195034 100644
--- a/src/storage_backend_fs.c
+++ b/src/storage_backend_fs.c
@@ -487,7 +487,23 @@ static int
virStorageBackendFileSystemMount(virConnectPtr conn,
virStoragePoolObjPtr pool) {
char *src;
- const char *mntargv[] = {
+ const char **mntargv;
+
+ /* 'mount -t auto' doesn't seem to auto determine nfs (or cifs),
+ * while plain 'mount' does. We have to craft separate argvs to
+ * accommodate this */
+ int netauto = (pool->def->type == VIR_STORAGE_POOL_NETFS &&
+ pool->def->source.format == VIR_STORAGE_POOL_NETFS_AUTO);
+ int source_index;
+
+ const char *netfs_auto_argv[] = {
+ MOUNT,
+ NULL, /* source path */
+ pool->def->target.path,
+ NULL,
+ };
+
+ const char *fs_argv[] = {
MOUNT,
"-t",
pool->def->type == VIR_STORAGE_POOL_FS ?
@@ -495,10 +511,20 @@ virStorageBackendFileSystemMount(virConnectPtr conn,
pool->def->source.format) :
virStorageBackendFileSystemNetPoolFormatToString(conn,
pool->def->source.format),
- NULL, /* Fill in shortly - careful not to add extra fields before this */
+ NULL, /* Fill in shortly - careful not to add extra fields
+ before this */
pool->def->target.path,
NULL,
};
+
+ if (netauto) {
+ mntargv = netfs_auto_argv;
+ source_index = 1;
+ } else {
+ mntargv = fs_argv;
+ source_index = 3;
+ }
+
int ret;
if (pool->def->type == VIR_STORAGE_POOL_NETFS) {
@@ -543,7 +569,7 @@ virStorageBackendFileSystemMount(virConnectPtr conn,
return -1;
}
}
- mntargv[3] = src;
+ mntargv[source_index] = src;
if (virRun(conn, (char**)mntargv, NULL) < 0) {
VIR_FREE(src);