
work - so we'll short circuit here.
This also rejects the non-stable path '/dev' that was accepted before.
Not quite sure I see the issue - can you be more specific? Am I missing something obvious?
Previously if "pool->def->target.path" is "/dev" (or NULL or "/dev/" or didn't start with "/dev"), then we'd return a strdup'd 'devpath' into 'vol->target.path'.
I see no way 'devpath' could be '/dev' or '/dev/' since it is formatted as :
if (virAsprintf(&devpath, "/dev/%s", dev) < 0) goto cleanup;
That's the path to the device. The comment above is right about checking the pool target path in the pool definition.
After this patch, if pool->def->target.path is "/dev", we wouldn't even get to the virStorageBackendStablePath call, because of the check in virStorageBackendPoolUseDevPath - it will return false, we'll jump to cleanup and skip over this volume.
Hmmm.. maybe I need to think outloud... Assume I change the check to: if (!virStorageBackendPoolPathIsStable(pool->def->target.path) && !(STREQ(pool->def->target.path, "/dev") || STREQ(pool->def->target.path, "/dev/"))) { So, if pool->def->target.path is "/dev", then we'll alloc vol, formulate 'devpath', then call virStorageBackendStablePath. Then virStorageBackendPoolPathIsStable is called which returns false because the pool->def->target.path is "/dev". That causes us to strdup the incoming "/devpath" and return. Upon return we'd end up returning -2 to the caller. So, is this the path you were considering? If not, then please describe in detail. As it turns out setting pool->def->target.path to "/dev" or "/dev/" doesn't cause us to follow down the path of the virReadDir (could take a while if it did). Help turn the lightbulb on! John