On Tue, Mar 08, 2005 at 04:23:59PM -0500, goggin, edward wrote: > Looks to me like two issues here -- (1) probably should not allow > concurrent pg_init i/os for the same multipath and Some statements that the code should be checked against. Only one pg_init can happen at once. - enforced by pg_init_required only getting set to 1 in one place, then set to 0 when the init is issued. - BUG? it looks possible for __switch_pg to get called while there's still a pg_init outstanding. Suspend cannot complete until there is no I/O outstanding, including any pg_init I/O. - queueing is disabled while suspended - the last I/O through cannot complete with an error until the last path has failed, which can't happen until the pg_init for its PG has completed. multipath_dtr can only be called when there is no I/O in-flight - dm_swap_table checks the device is suspended before calling __unbind - BUG? dm_put only calls pre/post suspend but fails to wait for I/O to clear Alasdair -- agk@xxxxxxxxxx