Comment 6 for bug 2042366

Revision history for this message
Mauricio Faria de Oliveira (mfo) wrote :

Test packages on Focal
===

Packages: ppa:mfo/test
---

sudo apt install ./kpartx_0.8.3-1ubuntu2.3_amd64.deb ./multipath-tools_0.8.3-1ubuntu2.3_amd64.deb ./multipath-tools-dbgsym_0.8.3-1ubuntu2.3_amd64.ddeb
sudo systemctl restart multipathd.service

$ dpkg -s multipath-tools | grep Version:
Version: 0.8.3-1ubuntu2.3

sudo gdb -p $(pidof multipathd)
...
(gdb) b dm_get_map
Breakpoint 1 at ...
(gdb) c
Thread 5 "multipathd" hit Breakpoint 1, dm_get_map (name=0x558d02dc6880 "mpatha", ...

(gdb) b dm_get_next_target
Breakpoint 2 at ...
(gdb) c
Thread 5 "multipathd" hit Breakpoint 2, dm_get_next_target (...

(gdb) finish
Run till exit from #0 dm_get_next_target (...
Value returned is $1 = (void *) 0x0

(gdb) p params
$2 = 0x7fef90004db0 "0 0 2 1 service-time 0 1 2 8:0 1 1 service-time 0 1 2 8:16 1 1 "
(gdb) set params = 0
(gdb) p params
$3 = 0x0

Now, NOTE the value returned from both functions
(TWO, i.e., indicates "not-OK" with empty map parameters)

 (gdb) finish
 Run till exit from #0 0x00007f490f4fc5cd in dm_get_map (name=0x55992f15c4d0 "mpatha", ...
 ...
 Value returned is $4 = 2

 (gdb) p params
 $5 = '\000' <repeats 4095 times>

 (gdb) finish
 Run till exit from #0 0x00007f490f5239ce in update_multipath_table (...
 ...
 Value returned is $6 = 2

(gdb) q

And this does not run disassemble_map(), as dm_get_map() now returns DMP_NOT_FOUND:

 167 +enum {
 168 + DMP_ERR,
 169 + DMP_OK,
 170 + DMP_NOT_FOUND,
 171 +};

 196 int
 197 update_multipath_table (struct multipath *mpp, vector pathvec, int is_daemon)
 198 {
 199 int r = DMP_ERR;
 200 char params[PARAMS_SIZE] = {0};
 ...
 205 r = dm_get_map(mpp->alias, &mpp->size, params);
 206 if (r != DMP_OK) {
 ...
 208 return r;
 ...
 211 if (disassemble_map(pathvec, params, mpp, is_daemon)) {
 ...
 213 return DMP_ERR;
 214 }
 215
 216 return DMP_OK;
 217 }