From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: drivers/scsi/st.c:3943 st_ioctl() warn: inconsistent returns '&STp->lock'.
Date: Thu, 16 Apr 2026 15:27:39 +0800 [thread overview]
Message-ID: <202604161523.JFDbH5wq-lkp@intel.com> (raw)
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: David Jeffery <djeffery@redhat.com>
CC: "Martin K. Petersen" <martin.petersen@oracle.com>
CC: John Meneghini <jmeneghi@redhat.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 1d51b370a0f8f642f4fc84c795fbedac0fcdbbd2
commit: b37d70c0df85e217a868ecdf535500ff926427ae scsi: st: Separate st-unique ioctl handling from SCSI common ioctl handling
date: 5 months ago
:::::: branch date: 5 hours ago
:::::: commit date: 5 months ago
config: powerpc-randconfig-r071-20260416 (https://download.01.org/0day-ci/archive/20260416/202604161523.JFDbH5wq-lkp@intel.com/config)
compiler: powerpc-linux-gcc (GCC) 13.4.0
smatch: v0.5.0-9007-gcf3ea02b
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: b37d70c0df85 ("scsi: st: Separate st-unique ioctl handling from SCSI common ioctl handling")
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202604161523.JFDbH5wq-lkp@intel.com/
smatch warnings:
drivers/scsi/st.c:3943 st_ioctl() warn: inconsistent returns '&STp->lock'.
vim +3943 drivers/scsi/st.c
^1da177e4c3f415 Linus Torvalds 2005-04-16 3583
^1da177e4c3f415 Linus Torvalds 2005-04-16 3584 /* The ioctl command */
dba7688fc9037c8 Christoph Hellwig 2021-07-24 3585 static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3586 {
dba7688fc9037c8 Christoph Hellwig 2021-07-24 3587 void __user *p = (void __user *)arg;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3588 int i, cmd_nr, cmd_type, bt;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3589 int retval = 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3590 unsigned int blk;
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3591 bool cmd_mtiocget;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3592 struct scsi_tape *STp = file->private_data;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3593 struct st_modedef *STm;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3594 struct st_partstat *STps;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3595
28f85009e0cf6a5 Matthias Kaehlcke 2007-07-29 3596 if (mutex_lock_interruptible(&STp->lock))
^1da177e4c3f415 Linus Torvalds 2005-04-16 3597 return -ERESTARTSYS;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3598
^1da177e4c3f415 Linus Torvalds 2005-04-16 3599 DEB(
^1da177e4c3f415 Linus Torvalds 2005-04-16 3600 if (debugging && !STp->in_use) {
b30d8bca5b525ba Hannes Reinecke 2014-06-25 3601 st_printk(ST_DEB_MSG, STp, "Incorrect device.\n");
^1da177e4c3f415 Linus Torvalds 2005-04-16 3602 retval = (-EIO);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3603 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3604 } ) /* end DEB */
^1da177e4c3f415 Linus Torvalds 2005-04-16 3605
^1da177e4c3f415 Linus Torvalds 2005-04-16 3606 STm = &(STp->modes[STp->current_mode]);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3607 STps = &(STp->ps[STp->partition]);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3608
^1da177e4c3f415 Linus Torvalds 2005-04-16 3609 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 3610 * If we are in the middle of error recovery, don't let anyone
^1da177e4c3f415 Linus Torvalds 2005-04-16 3611 * else try and use this device. Also, if error recovery fails, it
^1da177e4c3f415 Linus Torvalds 2005-04-16 3612 * may try and take the device offline, in which case all further
^1da177e4c3f415 Linus Torvalds 2005-04-16 3613 * access to the device is prohibited.
^1da177e4c3f415 Linus Torvalds 2005-04-16 3614 */
906d15fbd23c126 Christoph Hellwig 2014-10-11 3615 retval = scsi_ioctl_block_when_processing_errors(STp->device, cmd_in,
83ff6fe8580a7c8 Al Viro 2008-03-02 3616 file->f_flags & O_NDELAY);
906d15fbd23c126 Christoph Hellwig 2014-10-11 3617 if (retval)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3618 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3619
b37d70c0df85e21 David Jeffery 2025-11-04 3620 switch (cmd_in) {
b37d70c0df85e21 David Jeffery 2025-11-04 3621 case MTIOCPOS:
b37d70c0df85e21 David Jeffery 2025-11-04 3622 case MTIOCGET:
b37d70c0df85e21 David Jeffery 2025-11-04 3623 case MTIOCTOP:
b37d70c0df85e21 David Jeffery 2025-11-04 3624 break;
b37d70c0df85e21 David Jeffery 2025-11-04 3625 default:
b37d70c0df85e21 David Jeffery 2025-11-04 3626 return st_common_ioctl(STp, STm, file, cmd_in, arg);
b37d70c0df85e21 David Jeffery 2025-11-04 3627 }
b37d70c0df85e21 David Jeffery 2025-11-04 3628
^1da177e4c3f415 Linus Torvalds 2005-04-16 3629 cmd_type = _IOC_TYPE(cmd_in);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3630 cmd_nr = _IOC_NR(cmd_in);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3631
^1da177e4c3f415 Linus Torvalds 2005-04-16 3632 if (cmd_type == _IOC_TYPE(MTIOCTOP) && cmd_nr == _IOC_NR(MTIOCTOP)) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3633 struct mtop mtc;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3634
^1da177e4c3f415 Linus Torvalds 2005-04-16 3635 if (_IOC_SIZE(cmd_in) != sizeof(mtc)) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3636 retval = (-EINVAL);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3637 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3638 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3639
^1da177e4c3f415 Linus Torvalds 2005-04-16 3640 i = copy_from_user(&mtc, p, sizeof(struct mtop));
^1da177e4c3f415 Linus Torvalds 2005-04-16 3641 if (i) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3642 retval = (-EFAULT);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3643 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3644 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3645
^1da177e4c3f415 Linus Torvalds 2005-04-16 3646 if (mtc.mt_op == MTSETDRVBUFFER && !capable(CAP_SYS_ADMIN)) {
b30d8bca5b525ba Hannes Reinecke 2014-06-25 3647 st_printk(KERN_WARNING, STp,
b30d8bca5b525ba Hannes Reinecke 2014-06-25 3648 "MTSETDRVBUFFER only allowed for root.\n");
^1da177e4c3f415 Linus Torvalds 2005-04-16 3649 retval = (-EPERM);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3650 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3651 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3652 if (!STm->defined &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3653 (mtc.mt_op != MTSETDRVBUFFER &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3654 (mtc.mt_count & MT_ST_OPTIONS) == 0)) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3655 retval = (-ENXIO);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3656 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3657 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3658
^1da177e4c3f415 Linus Torvalds 2005-04-16 3659 if (!STp->pos_unknown) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3660
^1da177e4c3f415 Linus Torvalds 2005-04-16 3661 if (STps->eof == ST_FM_HIT) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3662 if (mtc.mt_op == MTFSF || mtc.mt_op == MTFSFM ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3663 mtc.mt_op == MTEOM) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3664 mtc.mt_count -= 1;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3665 if (STps->drv_file >= 0)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3666 STps->drv_file += 1;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3667 } else if (mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3668 mtc.mt_count += 1;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3669 if (STps->drv_file >= 0)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3670 STps->drv_file += 1;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3671 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3672 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3673
^1da177e4c3f415 Linus Torvalds 2005-04-16 3674 if (mtc.mt_op == MTSEEK) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3675 /* Old position must be restored if partition will be
^1da177e4c3f415 Linus Torvalds 2005-04-16 3676 changed */
^1da177e4c3f415 Linus Torvalds 2005-04-16 3677 i = !STp->can_partitions ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3678 (STp->new_partition != STp->partition);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3679 } else {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3680 i = mtc.mt_op == MTREW || mtc.mt_op == MTOFFL ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3681 mtc.mt_op == MTRETEN || mtc.mt_op == MTEOM ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3682 mtc.mt_op == MTLOCK || mtc.mt_op == MTLOAD ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3683 mtc.mt_op == MTFSF || mtc.mt_op == MTFSFM ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3684 mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3685 mtc.mt_op == MTCOMPRESSION;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3686 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3687 i = flush_buffer(STp, i);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3688 if (i < 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3689 retval = i;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3690 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3691 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3692 if (STps->rw == ST_WRITING &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3693 (mtc.mt_op == MTREW || mtc.mt_op == MTOFFL ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3694 mtc.mt_op == MTSEEK ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3695 mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM)) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3696 i = st_int_ioctl(STp, MTWEOF, 1);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3697 if (i < 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3698 retval = i;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3699 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3700 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3701 if (mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3702 mtc.mt_count++;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3703 STps->rw = ST_IDLE;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3704 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3705
^1da177e4c3f415 Linus Torvalds 2005-04-16 3706 } else {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3707 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 3708 * If there was a bus reset, block further access
^1da177e4c3f415 Linus Torvalds 2005-04-16 3709 * to this device. If the user wants to rewind the tape,
^1da177e4c3f415 Linus Torvalds 2005-04-16 3710 * then reset the flag and allow access again.
^1da177e4c3f415 Linus Torvalds 2005-04-16 3711 */
^1da177e4c3f415 Linus Torvalds 2005-04-16 3712 if (mtc.mt_op != MTREW &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3713 mtc.mt_op != MTOFFL &&
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3714 mtc.mt_op != MTLOAD &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3715 mtc.mt_op != MTRETEN &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3716 mtc.mt_op != MTERASE &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3717 mtc.mt_op != MTSEEK &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3718 mtc.mt_op != MTEOM) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3719 retval = (-EIO);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3720 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3721 }
7081dc75df79696 Kai Mäkisara 2025-01-20 3722 reset_state(STp); /* Clears pos_unknown */
7081dc75df79696 Kai Mäkisara 2025-01-20 3723
7081dc75df79696 Kai Mäkisara 2025-01-20 3724 /* Fix the device settings after reset, ignore errors */
7081dc75df79696 Kai Mäkisara 2025-01-20 3725 if (mtc.mt_op == MTREW || mtc.mt_op == MTSEEK ||
7081dc75df79696 Kai Mäkisara 2025-01-20 3726 mtc.mt_op == MTEOM) {
7081dc75df79696 Kai Mäkisara 2025-01-20 3727 if (STp->can_partitions) {
7081dc75df79696 Kai Mäkisara 2025-01-20 3728 /* STp->new_partition contains the
7081dc75df79696 Kai Mäkisara 2025-01-20 3729 * latest partition set
7081dc75df79696 Kai Mäkisara 2025-01-20 3730 */
7081dc75df79696 Kai Mäkisara 2025-01-20 3731 STp->partition = 0;
7081dc75df79696 Kai Mäkisara 2025-01-20 3732 switch_partition(STp);
7081dc75df79696 Kai Mäkisara 2025-01-20 3733 }
7081dc75df79696 Kai Mäkisara 2025-01-20 3734 if (STp->density_changed)
7081dc75df79696 Kai Mäkisara 2025-01-20 3735 st_int_ioctl(STp, MTSETDENSITY, STp->changed_density);
7081dc75df79696 Kai Mäkisara 2025-01-20 3736 if (STp->blksize_changed)
7081dc75df79696 Kai Mäkisara 2025-01-20 3737 st_int_ioctl(STp, MTSETBLK, STp->changed_blksize);
7081dc75df79696 Kai Mäkisara 2025-01-20 3738 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3739 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3740
^1da177e4c3f415 Linus Torvalds 2005-04-16 3741 if (mtc.mt_op != MTNOP && mtc.mt_op != MTSETBLK &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3742 mtc.mt_op != MTSETDENSITY && mtc.mt_op != MTWSM &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3743 mtc.mt_op != MTSETDRVBUFFER && mtc.mt_op != MTSETPART)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3744 STps->rw = ST_IDLE; /* Prevent automatic WEOF and fsf */
^1da177e4c3f415 Linus Torvalds 2005-04-16 3745
^1da177e4c3f415 Linus Torvalds 2005-04-16 3746 if (mtc.mt_op == MTOFFL && STp->door_locked != ST_UNLOCKED)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3747 do_door_lock(STp, 0); /* Ignore result! */
^1da177e4c3f415 Linus Torvalds 2005-04-16 3748
^1da177e4c3f415 Linus Torvalds 2005-04-16 3749 if (mtc.mt_op == MTSETDRVBUFFER &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3750 (mtc.mt_count & MT_ST_OPTIONS) != 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3751 retval = st_set_options(STp, mtc.mt_count);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3752 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3753 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3754
^1da177e4c3f415 Linus Torvalds 2005-04-16 3755 if (mtc.mt_op == MTSETPART) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3756 if (!STp->can_partitions ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3757 mtc.mt_count < 0 || mtc.mt_count >= ST_NBR_PARTITIONS) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3758 retval = (-EINVAL);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3759 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3760 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3761 if (mtc.mt_count >= STp->nbr_partitions &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3762 (STp->nbr_partitions = nbr_partitions(STp)) < 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3763 retval = (-EIO);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3764 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3765 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3766 if (mtc.mt_count >= STp->nbr_partitions) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3767 retval = (-EINVAL);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3768 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3769 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3770 STp->new_partition = mtc.mt_count;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3771 retval = 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3772 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3773 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3774
^1da177e4c3f415 Linus Torvalds 2005-04-16 3775 if (mtc.mt_op == MTMKPART) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3776 if (!STp->can_partitions) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3777 retval = (-EINVAL);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3778 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3779 }
8038e6456a3e6f5 Kai Makisara 2016-02-09 3780 i = do_load_unload(STp, file, 1);
8038e6456a3e6f5 Kai Makisara 2016-02-09 3781 if (i < 0) {
8038e6456a3e6f5 Kai Makisara 2016-02-09 3782 retval = i;
8038e6456a3e6f5 Kai Makisara 2016-02-09 3783 goto out;
8038e6456a3e6f5 Kai Makisara 2016-02-09 3784 }
8038e6456a3e6f5 Kai Makisara 2016-02-09 3785 i = partition_tape(STp, mtc.mt_count);
8038e6456a3e6f5 Kai Makisara 2016-02-09 3786 if (i < 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3787 retval = i;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3788 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3789 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3790 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3791 STp->ps[i].rw = ST_IDLE;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3792 STp->ps[i].at_sm = 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3793 STp->ps[i].last_block_valid = 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3794 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3795 STp->partition = STp->new_partition = 0;
8038e6456a3e6f5 Kai Makisara 2016-02-09 3796 STp->nbr_partitions = mtc.mt_count != 0 ? 2 : 1;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3797 STps->drv_block = STps->drv_file = 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3798 retval = 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3799 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3800 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3801
^1da177e4c3f415 Linus Torvalds 2005-04-16 3802 if (mtc.mt_op == MTSEEK) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3803 i = set_location(STp, mtc.mt_count, STp->new_partition, 0);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3804 if (!STp->can_partitions)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3805 STp->ps[0].rw = ST_IDLE;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3806 retval = i;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3807 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3808 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3809
^1da177e4c3f415 Linus Torvalds 2005-04-16 3810 if (mtc.mt_op == MTUNLOAD || mtc.mt_op == MTOFFL) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3811 retval = do_load_unload(STp, file, 0);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3812 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3813 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3814
^1da177e4c3f415 Linus Torvalds 2005-04-16 3815 if (mtc.mt_op == MTLOAD) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3816 retval = do_load_unload(STp, file, max(1, mtc.mt_count));
^1da177e4c3f415 Linus Torvalds 2005-04-16 3817 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3818 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3819
^1da177e4c3f415 Linus Torvalds 2005-04-16 3820 if (mtc.mt_op == MTLOCK || mtc.mt_op == MTUNLOCK) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3821 retval = do_door_lock(STp, (mtc.mt_op == MTLOCK));
^1da177e4c3f415 Linus Torvalds 2005-04-16 3822 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3823 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3824
^1da177e4c3f415 Linus Torvalds 2005-04-16 3825 if (STp->can_partitions && STp->ready == ST_READY &&
^1da177e4c3f415 Linus Torvalds 2005-04-16 3826 (i = switch_partition(STp)) < 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3827 retval = i;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3828 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3829 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3830
^1da177e4c3f415 Linus Torvalds 2005-04-16 3831 if (mtc.mt_op == MTCOMPRESSION)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3832 retval = st_compression(STp, (mtc.mt_count & 1));
^1da177e4c3f415 Linus Torvalds 2005-04-16 3833 else
^1da177e4c3f415 Linus Torvalds 2005-04-16 3834 retval = st_int_ioctl(STp, mtc.mt_op, mtc.mt_count);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3835 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3836 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3837 if (!STm->defined) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3838 retval = (-ENXIO);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3839 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3840 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3841
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3842 cmd_mtiocget = cmd_type == _IOC_TYPE(MTIOCGET) && cmd_nr == _IOC_NR(MTIOCGET);
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3843
^1da177e4c3f415 Linus Torvalds 2005-04-16 3844 if ((i = flush_buffer(STp, 0)) < 0) {
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3845 if (cmd_mtiocget && STp->pos_unknown) {
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3846 /* flush fails -> modify status accordingly */
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3847 reset_state(STp);
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3848 STp->pos_unknown = 1;
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3849 } else { /* return error */
^1da177e4c3f415 Linus Torvalds 2005-04-16 3850 retval = i;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3851 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3852 }
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3853 } else { /* flush_buffer succeeds */
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3854 if (STp->can_partitions) {
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3855 i = switch_partition(STp);
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3856 if (i < 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3857 retval = i;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3858 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3859 }
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3860 }
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3861 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3862
0b120edb37dc9dd Kai Mäkisara 2024-11-06 3863 if (cmd_mtiocget) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3864 struct mtget mt_status;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3865
^1da177e4c3f415 Linus Torvalds 2005-04-16 3866 if (_IOC_SIZE(cmd_in) != sizeof(struct mtget)) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3867 retval = (-EINVAL);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3868 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3869 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3870
^1da177e4c3f415 Linus Torvalds 2005-04-16 3871 mt_status.mt_type = STp->tape_type;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3872 mt_status.mt_dsreg =
^1da177e4c3f415 Linus Torvalds 2005-04-16 3873 ((STp->block_size << MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK) |
^1da177e4c3f415 Linus Torvalds 2005-04-16 3874 ((STp->density << MT_ST_DENSITY_SHIFT) & MT_ST_DENSITY_MASK);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3875 mt_status.mt_blkno = STps->drv_block;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3876 mt_status.mt_fileno = STps->drv_file;
5bb2d6179d1a803 Kai Mäkisara 2024-11-06 3877 if (STp->block_size != 0 && mt_status.mt_blkno >= 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3878 if (STps->rw == ST_WRITING)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3879 mt_status.mt_blkno +=
^1da177e4c3f415 Linus Torvalds 2005-04-16 3880 (STp->buffer)->buffer_bytes / STp->block_size;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3881 else if (STps->rw == ST_READING)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3882 mt_status.mt_blkno -=
^1da177e4c3f415 Linus Torvalds 2005-04-16 3883 ((STp->buffer)->buffer_bytes +
^1da177e4c3f415 Linus Torvalds 2005-04-16 3884 STp->block_size - 1) / STp->block_size;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3885 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3886
^1da177e4c3f415 Linus Torvalds 2005-04-16 3887 mt_status.mt_gstat = 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3888 if (STp->drv_write_prot)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3889 mt_status.mt_gstat |= GMT_WR_PROT(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3890 if (mt_status.mt_blkno == 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3891 if (mt_status.mt_fileno == 0)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3892 mt_status.mt_gstat |= GMT_BOT(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3893 else
^1da177e4c3f415 Linus Torvalds 2005-04-16 3894 mt_status.mt_gstat |= GMT_EOF(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3895 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3896 mt_status.mt_erreg = (STp->recover_reg << MT_ST_SOFTERR_SHIFT);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3897 mt_status.mt_resid = STp->partition;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3898 if (STps->eof == ST_EOM_OK || STps->eof == ST_EOM_ERROR)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3899 mt_status.mt_gstat |= GMT_EOT(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3900 else if (STps->eof >= ST_EOM_OK)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3901 mt_status.mt_gstat |= GMT_EOD(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3902 if (STp->density == 1)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3903 mt_status.mt_gstat |= GMT_D_800(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3904 else if (STp->density == 2)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3905 mt_status.mt_gstat |= GMT_D_1600(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3906 else if (STp->density == 3)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3907 mt_status.mt_gstat |= GMT_D_6250(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3908 if (STp->ready == ST_READY)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3909 mt_status.mt_gstat |= GMT_ONLINE(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3910 if (STp->ready == ST_NO_TAPE)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3911 mt_status.mt_gstat |= GMT_DR_OPEN(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3912 if (STps->at_sm)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3913 mt_status.mt_gstat |= GMT_SM(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3914 if (STm->do_async_writes ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3915 (STm->do_buffer_writes && STp->block_size != 0) ||
^1da177e4c3f415 Linus Torvalds 2005-04-16 3916 STp->drv_buffer != 0)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3917 mt_status.mt_gstat |= GMT_IM_REP_EN(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3918 if (STp->cleaning_req)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3919 mt_status.mt_gstat |= GMT_CLN(0xffffffff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3920
1207045da5a7c94 Arnd Bergmann 2018-09-07 3921 retval = put_user_mtget(p, &mt_status);
1207045da5a7c94 Arnd Bergmann 2018-09-07 3922 if (retval)
^1da177e4c3f415 Linus Torvalds 2005-04-16 3923 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3924
^1da177e4c3f415 Linus Torvalds 2005-04-16 3925 STp->recover_reg = 0; /* Clear after read */
^1da177e4c3f415 Linus Torvalds 2005-04-16 3926 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3927 } /* End of MTIOCGET */
^1da177e4c3f415 Linus Torvalds 2005-04-16 3928 if (cmd_type == _IOC_TYPE(MTIOCPOS) && cmd_nr == _IOC_NR(MTIOCPOS)) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3929 struct mtpos mt_pos;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3930 if (_IOC_SIZE(cmd_in) != sizeof(struct mtpos)) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3931 retval = (-EINVAL);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3932 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3933 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3934 if ((i = get_location(STp, &blk, &bt, 0)) < 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 3935 retval = i;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3936 goto out;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3937 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3938 mt_pos.mt_blkno = blk;
1207045da5a7c94 Arnd Bergmann 2018-09-07 3939 retval = put_user_mtpos(p, &mt_pos);
^1da177e4c3f415 Linus Torvalds 2005-04-16 3940 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3941 out:
28f85009e0cf6a5 Matthias Kaehlcke 2007-07-29 3942 mutex_unlock(&STp->lock);
^1da177e4c3f415 Linus Torvalds 2005-04-16 @3943 return retval;
^1da177e4c3f415 Linus Torvalds 2005-04-16 3944 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 3945
:::::: The code at line 3943 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2
:::::: TO: Linus Torvalds <torvalds@ppc970.osdl.org>
:::::: CC: Linus Torvalds <torvalds@ppc970.osdl.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2026-04-16 7:28 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-16 7:27 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2026-07-30 15:48 drivers/scsi/st.c:3943 st_ioctl() warn: inconsistent returns '&STp->lock' kernel test robot
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=202604161523.JFDbH5wq-lkp@intel.com \
--to=lkp@intel.com \
--cc=error27@gmail.com \
--cc=oe-kbuild@lists.linux.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.