Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
fb57e1db
Commit
fb57e1db
authored
Nov 30, 2012
by
Roland Dreier
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'srp' into for-next
parents
78c90247
dc1bdbd9
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
401 additions
and
158 deletions
+401
-158
Documentation/ABI/stable/sysfs-driver-ib_srp
Documentation/ABI/stable/sysfs-driver-ib_srp
+156
-0
Documentation/ABI/stable/sysfs-transport-srp
Documentation/ABI/stable/sysfs-transport-srp
+19
-0
drivers/infiniband/ulp/srp/ib_srp.c
drivers/infiniband/ulp/srp/ib_srp.c
+185
-129
drivers/infiniband/ulp/srp/ib_srp.h
drivers/infiniband/ulp/srp/ib_srp.h
+6
-5
drivers/scsi/scsi_transport_srp.c
drivers/scsi/scsi_transport_srp.c
+27
-24
include/scsi/scsi_transport_srp.h
include/scsi/scsi_transport_srp.h
+8
-0
No files found.
Documentation/ABI/stable/sysfs-driver-ib_srp
0 → 100644
View file @
fb57e1db
What: /sys/class/infiniband_srp/srp-<hca>-<port_number>/add_target
Date: January 2, 2006
KernelVersion: 2.6.15
Contact: linux-rdma@vger.kernel.org
Description: Interface for making ib_srp connect to a new target.
One can request ib_srp to connect to a new target by writing
a comma-separated list of login parameters to this sysfs
attribute. The supported parameters are:
* id_ext, a 16-digit hexadecimal number specifying the eight
byte identifier extension in the 16-byte SRP target port
identifier. The target port identifier is sent by ib_srp
to the target in the SRP_LOGIN_REQ request.
* ioc_guid, a 16-digit hexadecimal number specifying the eight
byte I/O controller GUID portion of the 16-byte target port
identifier.
* dgid, a 32-digit hexadecimal number specifying the
destination GID.
* pkey, a four-digit hexadecimal number specifying the
InfiniBand partition key.
* service_id, a 16-digit hexadecimal number specifying the
InfiniBand service ID used to establish communication with
the SRP target. How to find out the value of the service ID
is specified in the documentation of the SRP target.
* max_sect, a decimal number specifying the maximum number of
512-byte sectors to be transferred via a single SCSI command.
* max_cmd_per_lun, a decimal number specifying the maximum
number of outstanding commands for a single LUN.
* io_class, a hexadecimal number specifying the SRP I/O class.
Must be either 0xff00 (rev 10) or 0x0100 (rev 16a). The I/O
class defines the format of the SRP initiator and target
port identifiers.
* initiator_ext, a 16-digit hexadecimal number specifying the
identifier extension portion of the SRP initiator port
identifier. This data is sent by the initiator to the target
in the SRP_LOGIN_REQ request.
* cmd_sg_entries, a number in the range 1..255 that specifies
the maximum number of data buffer descriptors stored in the
SRP_CMD information unit itself. With allow_ext_sg=0 the
parameter cmd_sg_entries defines the maximum S/G list length
for a single SRP_CMD, and commands whose S/G list length
exceeds this limit after S/G list collapsing will fail.
* allow_ext_sg, whether ib_srp is allowed to include a partial
memory descriptor list in an SRP_CMD instead of the entire
list. If a partial memory descriptor list has been included
in an SRP_CMD the remaining memory descriptors are
communicated from initiator to target via an additional RDMA
transfer. Setting allow_ext_sg to 1 increases the maximum
amount of data that can be transferred between initiator and
target via a single SCSI command. Since not all SRP target
implementations support partial memory descriptor lists the
default value for this option is 0.
* sg_tablesize, a number in the range 1..2048 specifying the
maximum S/G list length the SCSI layer is allowed to pass to
ib_srp. Specifying a value that exceeds cmd_sg_entries is
only safe with partial memory descriptor list support enabled
(allow_ext_sg=1).
What: /sys/class/infiniband_srp/srp-<hca>-<port_number>/ibdev
Date: January 2, 2006
KernelVersion: 2.6.15
Contact: linux-rdma@vger.kernel.org
Description: HCA name (<hca>).
What: /sys/class/infiniband_srp/srp-<hca>-<port_number>/port
Date: January 2, 2006
KernelVersion: 2.6.15
Contact: linux-rdma@vger.kernel.org
Description: HCA port number (<port_number>).
What: /sys/class/scsi_host/host<n>/allow_ext_sg
Date: May 19, 2011
KernelVersion: 2.6.39
Contact: linux-rdma@vger.kernel.org
Description: Whether ib_srp is allowed to include a partial memory
descriptor list in an SRP_CMD when communicating with an SRP
target.
What: /sys/class/scsi_host/host<n>/cmd_sg_entries
Date: May 19, 2011
KernelVersion: 2.6.39
Contact: linux-rdma@vger.kernel.org
Description: Maximum number of data buffer descriptors that may be sent to
the target in a single SRP_CMD request.
What: /sys/class/scsi_host/host<n>/dgid
Date: June 17, 2006
KernelVersion: 2.6.17
Contact: linux-rdma@vger.kernel.org
Description: InfiniBand destination GID used for communication with the SRP
target. Differs from orig_dgid if port redirection has happened.
What: /sys/class/scsi_host/host<n>/id_ext
Date: June 17, 2006
KernelVersion: 2.6.17
Contact: linux-rdma@vger.kernel.org
Description: Eight-byte identifier extension portion of the 16-byte target
port identifier.
What: /sys/class/scsi_host/host<n>/ioc_guid
Date: June 17, 2006
KernelVersion: 2.6.17
Contact: linux-rdma@vger.kernel.org
Description: Eight-byte I/O controller GUID portion of the 16-byte target
port identifier.
What: /sys/class/scsi_host/host<n>/local_ib_device
Date: November 29, 2006
KernelVersion: 2.6.19
Contact: linux-rdma@vger.kernel.org
Description: Name of the InfiniBand HCA used for communicating with the
SRP target.
What: /sys/class/scsi_host/host<n>/local_ib_port
Date: November 29, 2006
KernelVersion: 2.6.19
Contact: linux-rdma@vger.kernel.org
Description: Number of the HCA port used for communicating with the
SRP target.
What: /sys/class/scsi_host/host<n>/orig_dgid
Date: June 17, 2006
KernelVersion: 2.6.17
Contact: linux-rdma@vger.kernel.org
Description: InfiniBand destination GID specified in the parameters
written to the add_target sysfs attribute.
What: /sys/class/scsi_host/host<n>/pkey
Date: June 17, 2006
KernelVersion: 2.6.17
Contact: linux-rdma@vger.kernel.org
Description: A 16-bit number representing the InfiniBand partition key used
for communication with the SRP target.
What: /sys/class/scsi_host/host<n>/req_lim
Date: October 20, 2010
KernelVersion: 2.6.36
Contact: linux-rdma@vger.kernel.org
Description: Number of requests ib_srp can send to the target before it has
to wait for more credits. For more information see also the
SRP credit algorithm in the SRP specification.
What: /sys/class/scsi_host/host<n>/service_id
Date: June 17, 2006
KernelVersion: 2.6.17
Contact: linux-rdma@vger.kernel.org
Description: InfiniBand service ID used for establishing communication with
the SRP target.
What: /sys/class/scsi_host/host<n>/zero_req_lim
Date: September 20, 2006
KernelVersion: 2.6.18
Contact: linux-rdma@vger.kernel.org
Description: Number of times the initiator had to wait before sending a
request to the target because it ran out of credits. For more
information see also the SRP credit algorithm in the SRP
specification.
Documentation/ABI/stable/sysfs-transport-srp
0 → 100644
View file @
fb57e1db
What: /sys/class/srp_remote_ports/port-<h>:<n>/delete
Date: June 1, 2012
KernelVersion: 3.7
Contact: linux-scsi@vger.kernel.org, linux-rdma@vger.kernel.org
Description: Instructs an SRP initiator to disconnect from a target and to
remove all LUNs imported from that target.
What: /sys/class/srp_remote_ports/port-<h>:<n>/port_id
Date: June 27, 2007
KernelVersion: 2.6.24
Contact: linux-scsi@vger.kernel.org
Description: 16-byte local SRP port identifier in hexadecimal format. An
example: 4c:49:4e:55:58:20:56:49:4f:00:00:00:00:00:00:00.
What: /sys/class/srp_remote_ports/port-<h>:<n>/roles
Date: June 27, 2007
KernelVersion: 2.6.24
Contact: linux-scsi@vger.kernel.org
Description: Role of the remote port. Either "SRP Initiator" or "SRP Target".
drivers/infiniband/ulp/srp/ib_srp.c
View file @
fb57e1db
This diff is collapsed.
Click to expand it.
drivers/infiniband/ulp/srp/ib_srp.h
View file @
fb57e1db
...
...
@@ -80,9 +80,7 @@ enum {
enum
srp_target_state
{
SRP_TARGET_LIVE
,
SRP_TARGET_CONNECTING
,
SRP_TARGET_DEAD
,
SRP_TARGET_REMOVED
SRP_TARGET_REMOVED
,
};
enum
srp_iu_type
{
...
...
@@ -163,6 +161,9 @@ struct srp_target_port {
struct
ib_sa_query
*
path_query
;
int
path_query_id
;
u32
rq_tmo_jiffies
;
bool
connected
;
struct
ib_cm_id
*
cm_id
;
int
max_ti_iu_len
;
...
...
@@ -173,12 +174,12 @@ struct srp_target_port {
struct
srp_iu
*
rx_ring
[
SRP_RQ_SIZE
];
struct
srp_request
req_ring
[
SRP_CMD_SQ_SIZE
];
struct
work_struct
work
;
struct
work_struct
remove_
work
;
struct
list_head
list
;
struct
completion
done
;
int
status
;
int
qp_in_error
;
bool
qp_in_error
;
struct
completion
tsk_mgmt_done
;
u8
tsk_mgmt_status
;
...
...
drivers/scsi/scsi_transport_srp.c
View file @
fb57e1db
...
...
@@ -38,7 +38,7 @@ struct srp_host_attrs {
#define to_srp_host_attrs(host) ((struct srp_host_attrs *)(host)->shost_data)
#define SRP_HOST_ATTRS 0
#define SRP_RPORT_ATTRS
2
#define SRP_RPORT_ATTRS
3
struct
srp_internal
{
struct
scsi_transport_template
t
;
...
...
@@ -47,7 +47,6 @@ struct srp_internal {
struct
device_attribute
*
host_attrs
[
SRP_HOST_ATTRS
+
1
];
struct
device_attribute
*
rport_attrs
[
SRP_RPORT_ATTRS
+
1
];
struct
device_attribute
private_rport_attrs
[
SRP_RPORT_ATTRS
];
struct
transport_container
rport_attr_cont
;
};
...
...
@@ -72,24 +71,6 @@ static DECLARE_TRANSPORT_CLASS(srp_host_class, "srp_host", srp_host_setup,
static
DECLARE_TRANSPORT_CLASS
(
srp_rport_class
,
"srp_remote_ports"
,
NULL
,
NULL
,
NULL
);
#define SETUP_TEMPLATE(attrb, field, perm, test, ro_test, ro_perm) \
i->private_##attrb[count] = dev_attr_##field; \
i->private_##attrb[count].attr.mode = perm; \
if (ro_test) { \
i->private_##attrb[count].attr.mode = ro_perm; \
i->private_##attrb[count].store = NULL; \
} \
i->attrb[count] = &i->private_##attrb[count]; \
if (test) \
count++
#define SETUP_RPORT_ATTRIBUTE_RD(field) \
SETUP_TEMPLATE(rport_attrs, field, S_IRUGO, 1, 0, 0)
#define SETUP_RPORT_ATTRIBUTE_RW(field) \
SETUP_TEMPLATE(rport_attrs, field, S_IRUGO | S_IWUSR, \
1, 1, S_IRUGO)
#define SRP_PID(p) \
(p)->port_id[0], (p)->port_id[1], (p)->port_id[2], (p)->port_id[3], \
(p)->port_id[4], (p)->port_id[5], (p)->port_id[6], (p)->port_id[7], \
...
...
@@ -135,6 +116,24 @@ show_srp_rport_roles(struct device *dev, struct device_attribute *attr,
static
DEVICE_ATTR
(
roles
,
S_IRUGO
,
show_srp_rport_roles
,
NULL
);
static
ssize_t
store_srp_rport_delete
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
struct
srp_rport
*
rport
=
transport_class_to_srp_rport
(
dev
);
struct
Scsi_Host
*
shost
=
dev_to_shost
(
dev
);
struct
srp_internal
*
i
=
to_srp_internal
(
shost
->
transportt
);
if
(
i
->
f
->
rport_delete
)
{
i
->
f
->
rport_delete
(
rport
);
return
count
;
}
else
{
return
-
ENOSYS
;
}
}
static
DEVICE_ATTR
(
delete
,
S_IWUSR
,
NULL
,
store_srp_rport_delete
);
static
void
srp_rport_release
(
struct
device
*
dev
)
{
struct
srp_rport
*
rport
=
dev_to_rport
(
dev
);
...
...
@@ -324,12 +323,16 @@ srp_attach_transport(struct srp_function_template *ft)
i
->
rport_attr_cont
.
ac
.
attrs
=
&
i
->
rport_attrs
[
0
];
i
->
rport_attr_cont
.
ac
.
class
=
&
srp_rport_class
.
class
;
i
->
rport_attr_cont
.
ac
.
match
=
srp_rport_match
;
transport_container_register
(
&
i
->
rport_attr_cont
);
count
=
0
;
SETUP_RPORT_ATTRIBUTE_RD
(
port_id
);
SETUP_RPORT_ATTRIBUTE_RD
(
roles
);
i
->
rport_attrs
[
count
]
=
NULL
;
i
->
rport_attrs
[
count
++
]
=
&
dev_attr_port_id
;
i
->
rport_attrs
[
count
++
]
=
&
dev_attr_roles
;
if
(
ft
->
rport_delete
)
i
->
rport_attrs
[
count
++
]
=
&
dev_attr_delete
;
i
->
rport_attrs
[
count
++
]
=
NULL
;
BUG_ON
(
count
>
ARRAY_SIZE
(
i
->
rport_attrs
));
transport_container_register
(
&
i
->
rport_attr_cont
);
i
->
f
=
ft
;
...
...
include/scsi/scsi_transport_srp.h
View file @
fb57e1db
...
...
@@ -14,13 +14,21 @@ struct srp_rport_identifiers {
};
struct
srp_rport
{
/* for initiator and target drivers */
struct
device
dev
;
u8
port_id
[
16
];
u8
roles
;
/* for initiator drivers */
void
*
lld_data
;
/* LLD private data */
};
struct
srp_function_template
{
/* for initiator drivers */
void
(
*
rport_delete
)(
struct
srp_rport
*
rport
);
/* for target drivers */
int
(
*
tsk_mgmt_response
)(
struct
Scsi_Host
*
,
u64
,
u64
,
int
);
int
(
*
it_nexus_response
)(
struct
Scsi_Host
*
,
u64
,
int
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment