aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/cciss.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 42eaddb5438..bf2d1c80b78 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -3416,8 +3416,22 @@ static int check_for_unit_attention(ctlr_info_t *h, CommandList_struct *c)
3416 case REPORT_LUNS_CHANGED: 3416 case REPORT_LUNS_CHANGED:
3417 printk(KERN_WARNING "cciss%d: report LUN data " 3417 printk(KERN_WARNING "cciss%d: report LUN data "
3418 "changed\n", h->ctlr); 3418 "changed\n", h->ctlr);
3419 add_to_scan_list(h); 3419 /*
3420 wake_up_process(cciss_scan_thread); 3420 * Here, we could call add_to_scan_list and wake up the scan thread,
3421 * except that it's quite likely that we will get more than one
3422 * REPORT_LUNS_CHANGED condition in quick succession, which means
3423 * that those which occur after the first one will likely happen
3424 * *during* the scan_thread's rescan. And the rescan code is not
3425 * robust enough to restart in the middle, undoing what it has already
3426 * done, and it's not clear that it's even possible to do this, since
3427 * part of what it does is notify the block layer, which starts
3428 * doing it's own i/o to read partition tables and so on, and the
3429 * driver doesn't have visibility to know what might need undoing.
3430 * In any event, if possible, it is horribly complicated to get right
3431 * so we just don't do it for now.
3432 *
3433 * Note: this REPORT_LUNS_CHANGED condition only occurs on the MSA2012.
3434 */
3421 return 1; 3435 return 1;
3422 break; 3436 break;
3423 case POWER_OR_RESET: 3437 case POWER_OR_RESET: