aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorStephen M. Cameron <scameron@beardog.cce.hp.com>2009-11-12 13:49:55 -0500
committerJens Axboe <jens.axboe@oracle.com>2009-11-13 02:45:53 -0500
commitda0021841c3ea6a82588efae3260015847ea5d33 (patch)
treeef789cce615bfef67721fe34d70deb5b0b25e4a3 /drivers/block
parentd06dfbd236795acbb67e22e51bb8af12e953ced3 (diff)
cciss: Do not automatically rescan on UNIT ATTENTION/LUN DATA CHANGED
cciss: Do not automatically rescan on UNIT ATTENTION/LUN DATA CHANGED There are problems with doing this. If, say, several logical drives are deleted at once, several such UNIT ATTENTIONS will be encountered, often during the rescan triggered by the first such UNIT ATTENTION. The block layer may be in the midst of trying to add logical drives which were just deleted (resulting in the subsequent UNIT ATTENTION(s).) Making the rescan code robust enough to tolerate this kind of thing is too complicated for the moment. So, for now, we just don't do it. Note: This UNIT ATTENTION/LUN DATA CHANGED situation only occurs on the MSA2012. Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
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: