diff options
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/cciss.c | 18 |
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: |