From: Dan Carpenter <error27@gmail.com>
To: Mike Christie <michael.christie@oracle.com>
Cc: linux-scsi@vger.kernel.org
Subject: [bug report] scsi: sd: Fix sshdr use in sd_spinup_disk
Date: Mon, 11 May 2026 07:29:23 +0300 [thread overview]
Message-ID: <agFbI7E6JQwd3wGW@stanley.mountain> (raw)
Hello Mike Christie,
Commit b4d0c33a32c3 ("scsi: sd: Fix sshdr use in sd_spinup_disk")
from Oct 4, 2023 (linux-next), leads to the following Smatch static
checker warning:
drivers/scsi/sd.c:2525 sd_spinup_disk()
warn: kernel error codes cast to unsigned 'the_result'
drivers/scsi/sd.c
2474 static void
2475 sd_spinup_disk(struct scsi_disk *sdkp)
2476 {
2477 static const u8 cmd[10] = { TEST_UNIT_READY };
2478 unsigned long spintime_expire = 0;
2479 int spintime, sense_valid = 0;
2480 unsigned int the_result;
2481 struct scsi_sense_hdr sshdr;
2482 struct scsi_failure failure_defs[] = {
2483 /* Do not retry Medium Not Present */
2484 {
2485 .sense = UNIT_ATTENTION,
2486 .asc = 0x3A,
2487 .ascq = SCMD_FAILURE_ASCQ_ANY,
2488 .result = SAM_STAT_CHECK_CONDITION,
2489 },
2490 {
2491 .sense = NOT_READY,
2492 .asc = 0x3A,
2493 .ascq = SCMD_FAILURE_ASCQ_ANY,
2494 .result = SAM_STAT_CHECK_CONDITION,
2495 },
2496 /* Retry when scsi_status_is_good would return false 3 times */
2497 {
2498 .result = SCMD_FAILURE_STAT_ANY,
2499 .allowed = 3,
2500 },
2501 {}
2502 };
2503 struct scsi_failures failures = {
2504 .failure_definitions = failure_defs,
2505 };
2506 const struct scsi_exec_args exec_args = {
2507 .sshdr = &sshdr,
2508 .failures = &failures,
2509 };
2510
2511 spintime = 0;
2512
2513 /* Spin up drives, as required. Only do this at boot time */
2514 /* Spinup needs to be done for module loads too. */
2515 do {
2516 bool media_was_present = sdkp->media_present;
2517
2518 scsi_failures_reset_retries(&failures);
2519
2520 the_result = scsi_execute_cmd(sdkp->device, cmd, REQ_OP_DRV_IN,
2521 NULL, 0, SD_TIMEOUT,
2522 sdkp->max_retries, &exec_args);
2523
2524
--> 2525 if (the_result > 0) {
The scsi_execute_cmd() function returns negative kernel error codes and
positive SCSI error status codes. But "the_result" is an unsigned int
so both negative and positive error codes are > 0.
2526 /*
2527 * If the drive has indicated to us that it doesn't
2528 * have any media in it, don't bother with any more
2529 * polling.
2530 */
2531 if (media_not_present(sdkp, &sshdr)) {
2532 if (media_was_present)
2533 sd_printk(KERN_NOTICE, sdkp,
2534 "Media removed, stopped polling\n");
2535 return;
2536 }
2537 sense_valid = scsi_sense_valid(&sshdr);
2538 }
2539
2540 if (!scsi_status_is_check_condition(the_result)) {
2541 /* no sense, TUR either succeeded or failed
2542 * with a status error */
2543 if(!spintime && !scsi_status_is_good(the_result)) {
2544 sd_print_result(sdkp, "Test Unit Ready failed",
2545 the_result);
2546 }
2547 break;
2548 }
2549
This email is a free service from the Smatch-CI project [smatch.sf.net].
regards,
dan carpenter
reply other threads:[~2026-05-11 4:29 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=agFbI7E6JQwd3wGW@stanley.mountain \
--to=error27@gmail.com \
--cc=linux-scsi@vger.kernel.org \
--cc=michael.christie@oracle.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox