Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fix from James Bottomley:
"A single fix to iscsi for a rare race condition which can cause a
kernel panic"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
scsi: iscsi: Fix race condition between login and sync thread

+14 -1
+13 -1
drivers/scsi/scsi_transport_iscsi.c
··· 2475 2475 */ 2476 2476 mutex_lock(&conn_mutex); 2477 2477 conn->transport->stop_conn(conn, flag); 2478 + conn->state = ISCSI_CONN_DOWN; 2478 2479 mutex_unlock(&conn_mutex); 2479 2480 2480 2481 } ··· 2902 2901 default: 2903 2902 err = transport->set_param(conn, ev->u.set_param.param, 2904 2903 data, ev->u.set_param.len); 2904 + if ((conn->state == ISCSI_CONN_BOUND) || 2905 + (conn->state == ISCSI_CONN_UP)) { 2906 + err = transport->set_param(conn, ev->u.set_param.param, 2907 + data, ev->u.set_param.len); 2908 + } else { 2909 + return -ENOTCONN; 2910 + } 2905 2911 } 2906 2912 2907 2913 return err; ··· 2968 2960 mutex_lock(&conn->ep_mutex); 2969 2961 conn->ep = NULL; 2970 2962 mutex_unlock(&conn->ep_mutex); 2963 + conn->state = ISCSI_CONN_DOWN; 2971 2964 } 2972 2965 2973 2966 transport->ep_disconnect(ep); ··· 3736 3727 ev->r.retcode = transport->bind_conn(session, conn, 3737 3728 ev->u.b_conn.transport_eph, 3738 3729 ev->u.b_conn.is_leading); 3730 + if (!ev->r.retcode) 3731 + conn->state = ISCSI_CONN_BOUND; 3739 3732 mutex_unlock(&conn_mutex); 3740 3733 3741 3734 if (ev->r.retcode || !transport->ep_connect) ··· 3977 3966 static const char *const connection_state_names[] = { 3978 3967 [ISCSI_CONN_UP] = "up", 3979 3968 [ISCSI_CONN_DOWN] = "down", 3980 - [ISCSI_CONN_FAILED] = "failed" 3969 + [ISCSI_CONN_FAILED] = "failed", 3970 + [ISCSI_CONN_BOUND] = "bound" 3981 3971 }; 3982 3972 3983 3973 static ssize_t show_conn_state(struct device *dev,
+1
include/scsi/scsi_transport_iscsi.h
··· 193 193 ISCSI_CONN_UP = 0, 194 194 ISCSI_CONN_DOWN, 195 195 ISCSI_CONN_FAILED, 196 + ISCSI_CONN_BOUND, 196 197 }; 197 198 198 199 struct iscsi_cls_conn {