> --- a/drivers/target/target_core_alua.c
> +++ b/drivers/target/target_core_alua.c
> @@ -1880,12 +1880,19 @@ static void core_alua_put_tg_pt_gp_from_name(
>  static void __target_attach_tg_pt_gp(struct se_lun *lun,
>               struct t10_alua_tg_pt_gp *tg_pt_gp)
>  {
> +     struct se_dev_entry *se_deve;
> +
>       assert_spin_locked(&lun->lun_tg_pt_gp_lock);
>  
>       spin_lock(&tg_pt_gp->tg_pt_gp_lock);
>       lun->lun_tg_pt_gp = tg_pt_gp;
>       list_add_tail(&lun->lun_tg_pt_gp_link, &tg_pt_gp->tg_pt_gp_lun_list);
>       tg_pt_gp->tg_pt_gp_members++;
> +     spin_lock_bh(&lun->lun_deve_lock);
> +     list_for_each_entry(se_deve, &lun->lun_deve_list, lun_link)
> +             core_scsi3_ua_allocate(se_deve, 0x3f,
> +                                    ASCQ_3FH_INQUIRY_DATA_HAS_CHANGED);
> +     spin_unlock_bh(&lun->lun_deve_lock);
>       spin_unlock(&tg_pt_gp->tg_pt_gp_lock);

Taking a _bh lock inside a regular spinlock is completely broken.

Fortunately I don't think lun_deve_lock needs to disable bottom halves,
but this needs to be fixed first.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in

Reply via email to