Benjamin Marzinski [bmarzins@xxxxxxxxxx] wrote: > @@ -294,12 +295,25 @@ lock_multipath (struct multipath * mpp, > vector_foreach_slot(pgp->paths, pp, j) { > if (lock && flock(pp->fd, LOCK_EX | LOCK_NB) && > errno == EWOULDBLOCK) > - return 1; > + goto fail; > else if (!lock) > flock(pp->fd, LOCK_UN); > } > } > return 0; > +fail: > + vector_foreach_slot (mpp->pg, pgp, x) { > + if (x > i) > + return 1; > + if (!pgp->paths) > + continue; > + vector_foreach_slot(pgp->paths, pp, y) { > + if (x == i && y > j) Path 'j' has failed to get the lock dropping us to the fail label. We should NOT be unlocking for path "j", so the above if expression should be "(x ==i && y >= j)" instead. Otherwise, it looks good. > + return 1; > + flock(pp->fd, LOCK_UN); > + } > + } > + return 1; -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel