--- zzzz-none-000/linux-3.10.107/drivers/ide/ide-ioctls.c 2017-06-27 09:49:32.000000000 +0000 +++ scorpion-7490-727/linux-3.10.107/drivers/ide/ide-ioctls.c 2021-02-04 17:41:59.000000000 +0000 @@ -125,7 +125,7 @@ if (NULL == (void *) arg) { struct request *rq; - rq = blk_get_request(drive->queue, READ, __GFP_WAIT); + rq = blk_get_request(drive->queue, READ, __GFP_RECLAIM); rq->cmd_type = REQ_TYPE_ATA_TASKFILE; err = blk_execute_rq(drive->queue, NULL, rq, 0); blk_put_request(rq); @@ -141,8 +141,8 @@ if (args[0] == ATA_CMD_SMART) { tf->nsect = args[3]; tf->lbal = args[1]; - tf->lbam = 0x4f; - tf->lbah = 0xc2; + tf->lbam = ATA_SMART_LBAM_PASS; + tf->lbah = ATA_SMART_LBAH_PASS; cmd.valid.out.tf = IDE_VALID_OUT_TF; cmd.valid.in.tf = IDE_VALID_NSECT; } else { @@ -221,8 +221,8 @@ struct request *rq; int ret = 0; - rq = blk_get_request(drive->queue, READ, __GFP_WAIT); - rq->cmd_type = REQ_TYPE_SPECIAL; + rq = blk_get_request(drive->queue, READ, __GFP_RECLAIM); + rq->cmd_type = REQ_TYPE_DRV_PRIV; rq->cmd_len = 1; rq->cmd[0] = REQ_DRIVE_RESET; if (blk_execute_rq(drive->queue, NULL, rq, 1))