libvirt/src/storage
John Ferlan 2dd70901db storage: Resolve storage driver crash
Resolve a storage driver crash as a result of a long running
storageVolCreateXML when the virStorageVolPoolRefreshThread is
run as a result of when a storageVolUpload completed and ran the
virStoragePoolObjClearVols without checking if the creation
code was currently processing a buildVol after incrementing
the driver->asyncjob count.

The refreshThread will now check the pool asyncjob count before
attempting to pursue the pool refresh. Adjust the documentation
to describe the condition.

Crash from valgrind is as follows (with a bit of editing):

==21309== Invalid read of size 8
==21309==    at 0x153E47AF: storageBackendUpdateVolTargetInfo
==21309==    by 0x153E4C30: virStorageBackendUpdateVolInfo
==21309==    by 0x153E52DE: virStorageBackendVolRefreshLocal
==21309==    by 0x153DE29E: storageVolCreateXML
==21309==    by 0x562035B: virStorageVolCreateXML
==21309==    by 0x147366: remoteDispatchStorageVolCreateXML
...
==21309==  Address 0x2590a720 is 64 bytes inside a block of size 336 free'd
==21309==    at 0x4C2F2BB: free
==21309==    by 0x54CB9FA: virFree
==21309==    by 0x55BC800: virStorageVolDefFree
==21309==    by 0x55BF1D8: virStoragePoolObjClearVols
==21309==    by 0x153D967E: virStorageVolPoolRefreshThread
...
==21309==  Block was alloc'd at
==21309==    at 0x4C300A5: calloc
==21309==    by 0x54CB483: virAlloc
==21309==    by 0x55BDC1F: virStorageVolDefParseXML
==21309==    by 0x55BDC1F: virStorageVolDefParseNode
==21309==    by 0x55BE5A4: virStorageVolDefParse
==21309==    by 0x153DDFF1: storageVolCreateXML
==21309==    by 0x562035B: virStorageVolCreateXML
==21309==    by 0x147366: remoteDispatchStorageVolCreateXML
...
2017-11-16 11:34:26 -05:00
..
parthelper.c storage: Fix virStorageBackendDiskDeleteVol for device mapper 2016-05-11 09:23:31 -04:00
storage_backend_disk.c storage: Use virStoragePoolObjGetDef accessor for Disk backend 2017-10-06 07:09:47 -04:00
storage_backend_disk.h storage: backend: Refactor registration of the backend drivers 2017-02-21 09:34:30 +01:00
storage_backend_fs.c storage: Use virStoragePoolObjGetDef accessor for FS backend 2017-10-06 07:09:47 -04:00
storage_backend_fs.h storage: backend: Refactor registration of the backend drivers 2017-02-21 09:34:30 +01:00
storage_backend_gluster.c storage: Fill in 'type' field for virStorageSource in storage driver 2017-10-17 06:19:18 +02:00
storage_backend_gluster.h storage: backend: Refactor registration of the backend drivers 2017-02-21 09:34:30 +01:00
storage_backend_iscsi.c storage: Use virStoragePoolObjGetDef accessor for iSCSI backend 2017-11-07 14:12:52 -05:00
storage_backend_iscsi.h storage: backend: Refactor registration of the backend drivers 2017-02-21 09:34:30 +01:00
storage_backend_logical.c storage: Allow creation of a LUKS using logical volume 2017-10-27 05:46:35 -04:00
storage_backend_logical.h storage: backend: Refactor registration of the backend drivers 2017-02-21 09:34:30 +01:00
storage_backend_mpath.c storage: Use virStoragePoolObjGetDef accessor for MPATH backend 2017-11-07 14:12:52 -05:00
storage_backend_mpath.h storage: backend: Refactor registration of the backend drivers 2017-02-21 09:34:30 +01:00
storage_backend_rbd.c storage: Use virStoragePoolObjGetDef accessor for RBD backend 2017-11-07 14:12:52 -05:00
storage_backend_rbd.h storage: backend: Refactor registration of the backend drivers 2017-02-21 09:34:30 +01:00
storage_backend_scsi.c storage: Use virStoragePoolObjGetDef accessor for SCSI backend 2017-11-07 14:12:52 -05:00
storage_backend_scsi.h storage: backend: Refactor registration of the backend drivers 2017-02-21 09:34:30 +01:00
storage_backend_sheepdog_priv.h storage: sheepdog: Split out functions required for tests 2017-01-19 09:25:51 +01:00
storage_backend_sheepdog.c storage: Use virStoragePoolObjGetDef accessor for Sheepdog backend 2017-10-06 07:09:47 -04:00
storage_backend_sheepdog.h storage: backend: Refactor registration of the backend drivers 2017-02-21 09:34:30 +01:00
storage_backend_vstorage.c storage: Use virStoragePoolObjGetDef accessor for VSTORAGE backend 2017-11-07 14:12:52 -05:00
storage_backend_vstorage.h storage: backend: Refactor registration of the backend drivers 2017-02-21 09:34:30 +01:00
storage_backend_zfs.c storage: Use virStoragePoolObjGetDef accessor for ZFS backend 2017-11-07 14:12:52 -05:00
storage_backend_zfs.h storage: backend: Refactor registration of the backend drivers 2017-02-21 09:34:30 +01:00
storage_backend.c Remove backslash alignment attempts 2017-11-03 13:24:12 +01:00
storage_backend.h storage: Make virStorageFileReadHeader more universal 2017-07-11 17:07:04 +02:00
storage_driver.c storage: Resolve storage driver crash 2017-11-16 11:34:26 -05:00
storage_driver.h storage: Use consistent variable names for driver 2017-07-21 14:51:47 -04:00
storage_source.c storage: Extract error reporting for broken chains 2017-11-03 09:15:41 +01:00
storage_source.h storage: Extract error reporting for broken chains 2017-11-03 09:15:41 +01:00
storage_util.c storage: Introduce virStorageBackendCreateVolUsingQemuImg 2017-10-27 05:46:35 -04:00
storage_util.h storage: Introduce virStorageBackendCreateVolUsingQemuImg 2017-10-27 05:46:35 -04:00