aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_error.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/scsi_error.c')
-rw-r--r--drivers/scsi/scsi_error.c47
1 files changed, 9 insertions, 38 deletions
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index c0ae9e965f6f..a2333d2c7af0 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -1320,23 +1320,6 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd)
1320} 1320}
1321 1321
1322/** 1322/**
1323 * scsi_eh_lock_done - done function for eh door lock request
1324 * @scmd: SCSI command block for the door lock request
1325 *
1326 * Notes:
1327 * We completed the asynchronous door lock request, and it has either
1328 * locked the door or failed. We must free the command structures
1329 * associated with this request.
1330 **/
1331static void scsi_eh_lock_done(struct scsi_cmnd *scmd)
1332{
1333 struct scsi_request *sreq = scmd->sc_request;
1334
1335 scsi_release_request(sreq);
1336}
1337
1338
1339/**
1340 * scsi_eh_lock_door - Prevent medium removal for the specified device 1323 * scsi_eh_lock_door - Prevent medium removal for the specified device
1341 * @sdev: SCSI device to prevent medium removal 1324 * @sdev: SCSI device to prevent medium removal
1342 * 1325 *
@@ -1358,29 +1341,17 @@ static void scsi_eh_lock_done(struct scsi_cmnd *scmd)
1358 **/ 1341 **/
1359static void scsi_eh_lock_door(struct scsi_device *sdev) 1342static void scsi_eh_lock_door(struct scsi_device *sdev)
1360{ 1343{
1361 struct scsi_request *sreq = scsi_allocate_request(sdev, GFP_KERNEL); 1344 unsigned char cmnd[MAX_COMMAND_SIZE];
1362 1345
1363 if (unlikely(!sreq)) { 1346 cmnd[0] = ALLOW_MEDIUM_REMOVAL;
1364 printk(KERN_ERR "%s: request allocate failed," 1347 cmnd[1] = 0;
1365 "prevent media removal cmd not sent\n", __FUNCTION__); 1348 cmnd[2] = 0;
1366 return; 1349 cmnd[3] = 0;
1367 } 1350 cmnd[4] = SCSI_REMOVAL_PREVENT;
1351 cmnd[5] = 0;
1368 1352
1369 sreq->sr_cmnd[0] = ALLOW_MEDIUM_REMOVAL; 1353 scsi_execute_async(sdev, cmnd, DMA_NONE, NULL, 0, 0, 10 * HZ,
1370 sreq->sr_cmnd[1] = 0; 1354 5, NULL, NULL, GFP_KERNEL);
1371 sreq->sr_cmnd[2] = 0;
1372 sreq->sr_cmnd[3] = 0;
1373 sreq->sr_cmnd[4] = SCSI_REMOVAL_PREVENT;
1374 sreq->sr_cmnd[5] = 0;
1375 sreq->sr_data_direction = DMA_NONE;
1376 sreq->sr_bufflen = 0;
1377 sreq->sr_buffer = NULL;
1378 sreq->sr_allowed = 5;
1379 sreq->sr_done = scsi_eh_lock_done;
1380 sreq->sr_timeout_per_command = 10 * HZ;
1381 sreq->sr_cmd_len = COMMAND_SIZE(sreq->sr_cmnd[0]);
1382
1383 scsi_insert_special_req(sreq, 1);
1384} 1355}
1385 1356
1386 1357