Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b656688a authored by Alexey Khoroshilov's avatar Alexey Khoroshilov Committed by James Bottomley
Browse files

[SCSI] mpt2sas: fix double mutex lock in NON_BLOCKING state



If state is NON_BLOCKING and mutex_trylock is succeed,
the control flow goes to mutex_lock_interruptible() that is a deadlock.

[jejb: fixed coding style problems]
Signed-off-by: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
Acked-by: default avatar"Sreekanth Reddy" <sreekanth.reddy@lsi.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent f2b0599d
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -2181,10 +2181,12 @@ _ctl_ioctl_main(struct file *file, unsigned int cmd, void __user *arg,
		return -EAGAIN;

	state = (file->f_flags & O_NONBLOCK) ? NON_BLOCKING : BLOCKING;
	if (state == NON_BLOCKING && !mutex_trylock(&ioc->ctl_cmds.mutex))
	if (state == NON_BLOCKING) {
		if (!mutex_trylock(&ioc->ctl_cmds.mutex))
			return -EAGAIN;
	else if (mutex_lock_interruptible(&ioc->ctl_cmds.mutex))
	} else if (mutex_lock_interruptible(&ioc->ctl_cmds.mutex)) {
		return -ERESTARTSYS;
	}

	switch (cmd) {
	case MPT2IOCINFO: