From: John Ferlan Date: Mon, 7 Dec 2015 13:35:57 +0000 (-0500) Subject: storage: Check FS pool source during virStorageBackendFileSystemIsMounted X-Git-Tag: v1.3.1-rc1~186 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dae7007d6e445060afd987b14cc7431b67d60bed;p=thirdparty%2Flibvirt.git storage: Check FS pool source during virStorageBackendFileSystemIsMounted https://bugzilla.redhat.com/show_bug.cgi?id=1025230 When determining whether a FS pool is mounted, rather than assuming that the FS pool is mounted just because the target.path is in the mount list, let's make sure that the FS pool source matches what is mounted --- diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index 3a6f130cc0..692c9ff179 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -419,6 +419,7 @@ static int virStorageBackendFileSystemIsMounted(virStoragePoolObjPtr pool) { int ret = -1; + char *src = NULL; FILE *mtab; struct mntent ent; char buf[1024]; @@ -431,16 +432,23 @@ virStorageBackendFileSystemIsMounted(virStoragePoolObjPtr pool) } while ((getmntent_r(mtab, &ent, buf, sizeof(buf))) != NULL) { - if (STREQ(ent.mnt_dir, pool->def->target.path)) { + if (!(src = virStorageBackendFileSystemGetPoolSource(pool))) + goto cleanup; + + if (STREQ(ent.mnt_dir, pool->def->target.path) && + STREQ(ent.mnt_fsname, src)) { ret = 1; goto cleanup; } + + VIR_FREE(src); } ret = 0; cleanup: VIR_FORCE_FCLOSE(mtab); + VIR_FREE(src); return ret; }