On 02/27/14 16:30, Hannes Reinecke wrote: > activate_path() is run without a lock, so the path might be > set to failed before activate_path() had a chance to run. > > Signed-off-by: Hannes Reinecke <hare@xxxxxxx> > --- > drivers/md/dm-mpath.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c > index 0a40fa9..22e7365 100644 > --- a/drivers/md/dm-mpath.c > +++ b/drivers/md/dm-mpath.c > @@ -1196,8 +1196,11 @@ static void activate_path(struct work_struct *work) > struct pgpath *pgpath = > container_of(work, struct pgpath, activate_path.work); > > - scsi_dh_activate(bdev_get_queue(pgpath->path.dev->bdev), > - pg_init_done, pgpath); > + if (pgpath->is_active) > + scsi_dh_activate(bdev_get_queue(pgpath->path.dev->bdev), > + pg_init_done, pgpath); > + else > + pg_init_done(pgpath, SCSI_DH_DEV_OFFLINED); Hi Hannes, What problem are you going to fix with this? It is still possible that the path is set to failed just after "if (pgpath->is_active)" and before "scsi_dh_activate". -- Jun'ichi Nomura, NEC Corporation -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel