Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts: Documentation/feature-removal-schedule.txt drivers/scsi/fcoe/fcoe.c net/core/drop_monitor.c net/core/net-traces.c
This commit is contained in:
@ -22,13 +22,6 @@
|
||||
* http://www.t11.org/ftp/t11/pub/fc/bb-5/08-543v1.pdf
|
||||
*/
|
||||
|
||||
/*
|
||||
* The FIP ethertype eventually goes in net/if_ether.h.
|
||||
*/
|
||||
#ifndef ETH_P_FIP
|
||||
#define ETH_P_FIP 0x8914 /* FIP Ethertype */
|
||||
#endif
|
||||
|
||||
#define FIP_DEF_PRI 128 /* default selection priority */
|
||||
#define FIP_DEF_FC_MAP 0x0efc00 /* default FCoE MAP (MAC OUI) value */
|
||||
#define FIP_DEF_FKA 8000 /* default FCF keep-alive/advert period (mS) */
|
||||
|
@ -22,6 +22,11 @@
|
||||
#define ISCSI_IF_H
|
||||
|
||||
#include <scsi/iscsi_proto.h>
|
||||
#include <linux/in.h>
|
||||
#include <linux/in6.h>
|
||||
|
||||
#define ISCSI_NL_GRP_ISCSID 1
|
||||
#define ISCSI_NL_GRP_UIP 2
|
||||
|
||||
#define UEVENT_BASE 10
|
||||
#define KEVENT_BASE 100
|
||||
@ -50,7 +55,10 @@ enum iscsi_uevent_e {
|
||||
ISCSI_UEVENT_TGT_DSCVR = UEVENT_BASE + 15,
|
||||
ISCSI_UEVENT_SET_HOST_PARAM = UEVENT_BASE + 16,
|
||||
ISCSI_UEVENT_UNBIND_SESSION = UEVENT_BASE + 17,
|
||||
ISCSI_UEVENT_CREATE_BOUND_SESSION = UEVENT_BASE + 18,
|
||||
ISCSI_UEVENT_CREATE_BOUND_SESSION = UEVENT_BASE + 18,
|
||||
ISCSI_UEVENT_TRANSPORT_EP_CONNECT_THROUGH_HOST = UEVENT_BASE + 19,
|
||||
|
||||
ISCSI_UEVENT_PATH_UPDATE = UEVENT_BASE + 20,
|
||||
|
||||
/* up events */
|
||||
ISCSI_KEVENT_RECV_PDU = KEVENT_BASE + 1,
|
||||
@ -59,6 +67,9 @@ enum iscsi_uevent_e {
|
||||
ISCSI_KEVENT_DESTROY_SESSION = KEVENT_BASE + 4,
|
||||
ISCSI_KEVENT_UNBIND_SESSION = KEVENT_BASE + 5,
|
||||
ISCSI_KEVENT_CREATE_SESSION = KEVENT_BASE + 6,
|
||||
|
||||
ISCSI_KEVENT_PATH_REQ = KEVENT_BASE + 7,
|
||||
ISCSI_KEVENT_IF_DOWN = KEVENT_BASE + 8,
|
||||
};
|
||||
|
||||
enum iscsi_tgt_dscvr {
|
||||
@ -131,6 +142,10 @@ struct iscsi_uevent {
|
||||
struct msg_transport_connect {
|
||||
uint32_t non_blocking;
|
||||
} ep_connect;
|
||||
struct msg_transport_connect_through_host {
|
||||
uint32_t host_no;
|
||||
uint32_t non_blocking;
|
||||
} ep_connect_through_host;
|
||||
struct msg_transport_poll {
|
||||
uint64_t ep_handle;
|
||||
uint32_t timeout_ms;
|
||||
@ -154,6 +169,9 @@ struct iscsi_uevent {
|
||||
uint32_t param; /* enum iscsi_host_param */
|
||||
uint32_t len;
|
||||
} set_host_param;
|
||||
struct msg_set_path {
|
||||
uint32_t host_no;
|
||||
} set_path;
|
||||
} u;
|
||||
union {
|
||||
/* messages k -> u */
|
||||
@ -187,9 +205,38 @@ struct iscsi_uevent {
|
||||
struct msg_transport_connect_ret {
|
||||
uint64_t handle;
|
||||
} ep_connect_ret;
|
||||
struct msg_req_path {
|
||||
uint32_t host_no;
|
||||
} req_path;
|
||||
struct msg_notify_if_down {
|
||||
uint32_t host_no;
|
||||
} notify_if_down;
|
||||
} r;
|
||||
} __attribute__ ((aligned (sizeof(uint64_t))));
|
||||
|
||||
/*
|
||||
* To keep the struct iscsi_uevent size the same for userspace code
|
||||
* compatibility, the main structure for ISCSI_UEVENT_PATH_UPDATE and
|
||||
* ISCSI_KEVENT_PATH_REQ is defined separately and comes after the
|
||||
* struct iscsi_uevent in the NETLINK_ISCSI message.
|
||||
*/
|
||||
struct iscsi_path {
|
||||
uint64_t handle;
|
||||
uint8_t mac_addr[6];
|
||||
uint8_t mac_addr_old[6];
|
||||
uint32_t ip_addr_len; /* 4 or 16 */
|
||||
union {
|
||||
struct in_addr v4_addr;
|
||||
struct in6_addr v6_addr;
|
||||
} src;
|
||||
union {
|
||||
struct in_addr v4_addr;
|
||||
struct in6_addr v6_addr;
|
||||
} dst;
|
||||
uint16_t vlan_id;
|
||||
uint16_t pmtu;
|
||||
} __attribute__ ((aligned (sizeof(uint64_t))));
|
||||
|
||||
/*
|
||||
* Common error codes
|
||||
*/
|
||||
|
@ -679,6 +679,7 @@ struct fc_lport {
|
||||
unsigned int e_d_tov;
|
||||
unsigned int r_a_tov;
|
||||
u8 max_retry_count;
|
||||
u8 max_rport_retry_count;
|
||||
u16 link_speed;
|
||||
u16 link_supported_speeds;
|
||||
u16 lro_xid; /* max xid for fcoe lro */
|
||||
|
@ -82,9 +82,12 @@ enum {
|
||||
|
||||
|
||||
enum {
|
||||
ISCSI_TASK_FREE,
|
||||
ISCSI_TASK_COMPLETED,
|
||||
ISCSI_TASK_PENDING,
|
||||
ISCSI_TASK_RUNNING,
|
||||
ISCSI_TASK_ABRT_TMF, /* aborted due to TMF */
|
||||
ISCSI_TASK_ABRT_SESS_RECOV, /* aborted due to session recovery */
|
||||
};
|
||||
|
||||
struct iscsi_r2t_info {
|
||||
@ -181,9 +184,7 @@ struct iscsi_conn {
|
||||
|
||||
/* xmit */
|
||||
struct list_head mgmtqueue; /* mgmt (control) xmit queue */
|
||||
struct list_head mgmt_run_list; /* list of control tasks */
|
||||
struct list_head xmitqueue; /* data-path cmd queue */
|
||||
struct list_head run_list; /* list of cmds in progress */
|
||||
struct list_head cmdqueue; /* data-path cmd queue */
|
||||
struct list_head requeue; /* tasks needing another run */
|
||||
struct work_struct xmitwork; /* per-conn. xmit workqueue */
|
||||
unsigned long suspend_tx; /* suspend Tx */
|
||||
@ -406,6 +407,7 @@ extern int __iscsi_complete_pdu(struct iscsi_conn *, struct iscsi_hdr *,
|
||||
char *, int);
|
||||
extern int iscsi_verify_itt(struct iscsi_conn *, itt_t);
|
||||
extern struct iscsi_task *iscsi_itt_to_ctask(struct iscsi_conn *, itt_t);
|
||||
extern struct iscsi_task *iscsi_itt_to_task(struct iscsi_conn *, itt_t);
|
||||
extern void iscsi_requeue_task(struct iscsi_task *task);
|
||||
extern void iscsi_put_task(struct iscsi_task *task);
|
||||
extern void __iscsi_get_task(struct iscsi_task *task);
|
||||
|
@ -29,6 +29,7 @@ enum {
|
||||
OSD_APAGE_PARTITION_INFORMATION = OSD_APAGE_PARTITION_FIRST + 1,
|
||||
OSD_APAGE_PARTITION_QUOTAS = OSD_APAGE_PARTITION_FIRST + 2,
|
||||
OSD_APAGE_PARTITION_TIMESTAMP = OSD_APAGE_PARTITION_FIRST + 3,
|
||||
OSD_APAGE_PARTITION_ATTR_ACCESS = OSD_APAGE_PARTITION_FIRST + 4,
|
||||
OSD_APAGE_PARTITION_SECURITY = OSD_APAGE_PARTITION_FIRST + 5,
|
||||
OSD_APAGE_PARTITION_LAST = 0x5FFFFFFF,
|
||||
|
||||
@ -51,7 +52,9 @@ enum {
|
||||
OSD_APAGE_RESERVED_TYPE_LAST = 0xEFFFFFFF,
|
||||
|
||||
OSD_APAGE_COMMON_FIRST = 0xF0000000,
|
||||
OSD_APAGE_COMMON_LAST = 0xFFFFFFFE,
|
||||
OSD_APAGE_COMMON_LAST = 0xFFFFFFFD,
|
||||
|
||||
OSD_APAGE_CURRENT_COMMAND = 0xFFFFFFFE,
|
||||
|
||||
OSD_APAGE_REQUEST_ALL = 0xFFFFFFFF,
|
||||
};
|
||||
@ -106,10 +109,30 @@ enum {
|
||||
OSD_ATTR_RI_PRODUCT_REVISION_LEVEL = 0x7, /* 4 */
|
||||
OSD_ATTR_RI_PRODUCT_SERIAL_NUMBER = 0x8, /* variable */
|
||||
OSD_ATTR_RI_OSD_NAME = 0x9, /* variable */
|
||||
OSD_ATTR_RI_MAX_CDB_CONTINUATION_LEN = 0xA, /* 4 */
|
||||
OSD_ATTR_RI_TOTAL_CAPACITY = 0x80, /* 8 */
|
||||
OSD_ATTR_RI_USED_CAPACITY = 0x81, /* 8 */
|
||||
OSD_ATTR_RI_NUMBER_OF_PARTITIONS = 0xC0, /* 8 */
|
||||
OSD_ATTR_RI_CLOCK = 0x100, /* 6 */
|
||||
OARI_DEFAULT_ISOLATION_METHOD = 0X110, /* 1 */
|
||||
OARI_SUPPORTED_ISOLATION_METHODS = 0X111, /* 32 */
|
||||
|
||||
OARI_DATA_ATOMICITY_GUARANTEE = 0X120, /* 8 */
|
||||
OARI_DATA_ATOMICITY_ALIGNMENT = 0X121, /* 8 */
|
||||
OARI_ATTRIBUTES_ATOMICITY_GUARANTEE = 0X122, /* 8 */
|
||||
OARI_DATA_ATTRIBUTES_ATOMICITY_MULTIPLIER = 0X123, /* 1 */
|
||||
|
||||
OARI_MAXIMUM_SNAPSHOTS_COUNT = 0X1C1, /* 0 or 4 */
|
||||
OARI_MAXIMUM_CLONES_COUNT = 0X1C2, /* 0 or 4 */
|
||||
OARI_MAXIMUM_BRANCH_DEPTH = 0X1CC, /* 0 or 4 */
|
||||
OARI_SUPPORTED_OBJECT_DUPLICATION_METHOD_FIRST = 0X200, /* 0 or 4 */
|
||||
OARI_SUPPORTED_OBJECT_DUPLICATION_METHOD_LAST = 0X2ff, /* 0 or 4 */
|
||||
OARI_SUPPORTED_TIME_OF_DUPLICATION_METHOD_FIRST = 0X300, /* 0 or 4 */
|
||||
OARI_SUPPORTED_TIME_OF_DUPLICATION_METHOD_LAST = 0X30F, /* 0 or 4 */
|
||||
OARI_SUPPORT_FOR_DUPLICATED_OBJECT_FREEZING = 0X310, /* 0 or 4 */
|
||||
OARI_SUPPORT_FOR_SNAPSHOT_REFRESHING = 0X311, /* 0 or 1 */
|
||||
OARI_SUPPORTED_CDB_CONTINUATION_DESC_TYPE_FIRST = 0X7000001,/* 0 or 4 */
|
||||
OARI_SUPPORTED_CDB_CONTINUATION_DESC_TYPE_LAST = 0X700FFFF,/* 0 or 4 */
|
||||
};
|
||||
/* Root_Information_attributes_page does not have a get_page structure */
|
||||
|
||||
@ -120,7 +143,15 @@ enum {
|
||||
OSD_ATTR_PI_PARTITION_ID = 0x1, /* 8 */
|
||||
OSD_ATTR_PI_USERNAME = 0x9, /* variable */
|
||||
OSD_ATTR_PI_USED_CAPACITY = 0x81, /* 8 */
|
||||
OSD_ATTR_PI_USED_CAPACITY_INCREMENT = 0x84, /* 0 or 8 */
|
||||
OSD_ATTR_PI_NUMBER_OF_OBJECTS = 0xC1, /* 8 */
|
||||
|
||||
OSD_ATTR_PI_ACTUAL_DATA_SPACE = 0xD1, /* 0 or 8 */
|
||||
OSD_ATTR_PI_RESERVED_DATA_SPACE = 0xD2, /* 0 or 8 */
|
||||
OSD_ATTR_PI_DEFAULT_SNAPSHOT_DUPLICATION_METHOD = 0x200,/* 0 or 4 */
|
||||
OSD_ATTR_PI_DEFAULT_CLONE_DUPLICATION_METHOD = 0x201,/* 0 or 4 */
|
||||
OSD_ATTR_PI_DEFAULT_SP_TIME_OF_DUPLICATION = 0x300,/* 0 or 4 */
|
||||
OSD_ATTR_PI_DEFAULT_CLONE_TIME_OF_DUPLICATION = 0x301,/* 0 or 4 */
|
||||
};
|
||||
/* Partition Information attributes page does not have a get_page structure */
|
||||
|
||||
@ -131,6 +162,7 @@ enum {
|
||||
OSD_ATTR_CI_PARTITION_ID = 0x1, /* 8 */
|
||||
OSD_ATTR_CI_COLLECTION_OBJECT_ID = 0x2, /* 8 */
|
||||
OSD_ATTR_CI_USERNAME = 0x9, /* variable */
|
||||
OSD_ATTR_CI_COLLECTION_TYPE = 0xA, /* 1 */
|
||||
OSD_ATTR_CI_USED_CAPACITY = 0x81, /* 8 */
|
||||
};
|
||||
/* Collection Information attributes page does not have a get_page structure */
|
||||
@ -144,6 +176,8 @@ enum {
|
||||
OSD_ATTR_OI_USERNAME = 0x9, /* variable */
|
||||
OSD_ATTR_OI_USED_CAPACITY = 0x81, /* 8 */
|
||||
OSD_ATTR_OI_LOGICAL_LENGTH = 0x82, /* 8 */
|
||||
SD_ATTR_OI_ACTUAL_DATA_SPACE = 0XD1, /* 0 OR 8 */
|
||||
SD_ATTR_OI_RESERVED_DATA_SPACE = 0XD2, /* 0 OR 8 */
|
||||
};
|
||||
/* Object Information attributes page does not have a get_page structure */
|
||||
|
||||
@ -248,7 +282,18 @@ struct object_timestamps_attributes_page {
|
||||
struct osd_timestamp data_modified_time;
|
||||
} __packed;
|
||||
|
||||
/* 7.1.2.19 Collections attributes page */
|
||||
/* OSD2r05: 7.1.3.19 Attributes Access attributes page
|
||||
* (OSD_APAGE_PARTITION_ATTR_ACCESS)
|
||||
*
|
||||
* each attribute is of the form below. Total array length is deduced
|
||||
* from the attribute's length
|
||||
* (See allowed_attributes_access of the struct osd_cap_object_descriptor)
|
||||
*/
|
||||
struct attributes_access_attr {
|
||||
struct osd_attributes_list_attrid attr_list[0];
|
||||
} __packed;
|
||||
|
||||
/* OSD2r05: 7.1.2.21 Collections attributes page */
|
||||
/* TBD */
|
||||
|
||||
/* 7.1.2.20 Root Policy/Security attributes page (OSD_APAGE_ROOT_SECURITY) */
|
||||
@ -324,4 +369,29 @@ struct object_security_attributes_page {
|
||||
__be32 policy_access_tag;
|
||||
} __packed;
|
||||
|
||||
/* OSD2r05: 7.1.3.31 Current Command attributes page
|
||||
* (OSD_APAGE_CURRENT_COMMAND)
|
||||
*/
|
||||
enum {
|
||||
OSD_ATTR_CC_RESPONSE_INTEGRITY_CHECK_VALUE = 0x1, /* 32 */
|
||||
OSD_ATTR_CC_OBJECT_TYPE = 0x2, /* 1 */
|
||||
OSD_ATTR_CC_PARTITION_ID = 0x3, /* 8 */
|
||||
OSD_ATTR_CC_OBJECT_ID = 0x4, /* 8 */
|
||||
OSD_ATTR_CC_STARTING_BYTE_ADDRESS_OF_APPEND = 0x5, /* 8 */
|
||||
OSD_ATTR_CC_CHANGE_IN_USED_CAPACITY = 0x6, /* 8 */
|
||||
};
|
||||
|
||||
/*TBD: osdv1_current_command_attributes_page */
|
||||
|
||||
struct osdv2_current_command_attributes_page {
|
||||
struct osd_attr_page_header hdr; /* id=0xFFFFFFFE, size=0x44 */
|
||||
u8 response_integrity_check_value[OSD_CRYPTO_KEYID_SIZE];
|
||||
u8 object_type;
|
||||
u8 reserved[3];
|
||||
__be64 partition_id;
|
||||
__be64 object_id;
|
||||
__be64 starting_byte_address_of_append;
|
||||
__be64 change_in_used_capacity;
|
||||
};
|
||||
|
||||
#endif /*ndef __OSD_ATTRIBUTES_H__*/
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "osd_types.h"
|
||||
|
||||
#include <linux/blkdev.h>
|
||||
#include <scsi/scsi_device.h>
|
||||
|
||||
/* Note: "NI" in comments below means "Not Implemented yet" */
|
||||
|
||||
@ -47,6 +48,7 @@ enum osd_std_version {
|
||||
*/
|
||||
struct osd_dev {
|
||||
struct scsi_device *scsi_device;
|
||||
struct file *file;
|
||||
unsigned def_timeout;
|
||||
|
||||
#ifdef OSD_VER1_SUPPORT
|
||||
@ -69,6 +71,10 @@ void osd_dev_fini(struct osd_dev *od);
|
||||
|
||||
/* some hi level device operations */
|
||||
int osd_auto_detect_ver(struct osd_dev *od, void *caps); /* GFP_KERNEL */
|
||||
static inline struct request_queue *osd_request_queue(struct osd_dev *od)
|
||||
{
|
||||
return od->scsi_device->request_queue;
|
||||
}
|
||||
|
||||
/* we might want to use function vector in the future */
|
||||
static inline void osd_dev_set_ver(struct osd_dev *od, enum osd_std_version v)
|
||||
@ -363,7 +369,9 @@ void osd_req_create_object(struct osd_request *or, struct osd_obj_id *);
|
||||
void osd_req_remove_object(struct osd_request *or, struct osd_obj_id *);
|
||||
|
||||
void osd_req_write(struct osd_request *or,
|
||||
const struct osd_obj_id *, struct bio *data_out, u64 offset);
|
||||
const struct osd_obj_id *obj, u64 offset, struct bio *bio, u64 len);
|
||||
int osd_req_write_kern(struct osd_request *or,
|
||||
const struct osd_obj_id *obj, u64 offset, void *buff, u64 len);
|
||||
void osd_req_append(struct osd_request *or,
|
||||
const struct osd_obj_id *, struct bio *data_out);/* NI */
|
||||
void osd_req_create_write(struct osd_request *or,
|
||||
@ -378,7 +386,9 @@ void osd_req_flush_object(struct osd_request *or,
|
||||
/*V2*/ u64 offset, /*V2*/ u64 len);
|
||||
|
||||
void osd_req_read(struct osd_request *or,
|
||||
const struct osd_obj_id *, struct bio *data_in, u64 offset);
|
||||
const struct osd_obj_id *obj, u64 offset, struct bio *bio, u64 len);
|
||||
int osd_req_read_kern(struct osd_request *or,
|
||||
const struct osd_obj_id *obj, u64 offset, void *buff, u64 len);
|
||||
|
||||
/*
|
||||
* Root/Partition/Collection/Object Attributes commands
|
||||
|
@ -303,7 +303,15 @@ enum osd_service_actions {
|
||||
OSD_ACT_V2(REMOVE_MEMBER_OBJECTS, 0x21)
|
||||
OSD_ACT_V2(GET_MEMBER_ATTRIBUTES, 0x22)
|
||||
OSD_ACT_V2(SET_MEMBER_ATTRIBUTES, 0x23)
|
||||
|
||||
OSD_ACT_V2(CREATE_CLONE, 0x28)
|
||||
OSD_ACT_V2(CREATE_SNAPSHOT, 0x29)
|
||||
OSD_ACT_V2(DETACH_CLONE, 0x2A)
|
||||
OSD_ACT_V2(REFRESH_SNAPSHOT_CLONE, 0x2B)
|
||||
OSD_ACT_V2(RESTORE_PARTITION_FROM_SNAPSHOT, 0x2C)
|
||||
|
||||
OSD_ACT_V2(READ_MAP, 0x31)
|
||||
OSD_ACT_V2(READ_MAPS_COMPARE, 0x32)
|
||||
|
||||
OSD_ACT_V1_V2(PERFORM_SCSI_COMMAND, 0x8F7E, 0x8F7C)
|
||||
OSD_ACT_V1_V2(SCSI_TASK_MANAGEMENT, 0x8F7F, 0x8F7D)
|
||||
|
@ -270,7 +270,7 @@ static inline unsigned char scsi_get_prot_type(struct scsi_cmnd *scmd)
|
||||
|
||||
static inline sector_t scsi_get_lba(struct scsi_cmnd *scmd)
|
||||
{
|
||||
return scmd->request->sector;
|
||||
return blk_rq_pos(scmd->request);
|
||||
}
|
||||
|
||||
static inline unsigned scsi_prot_sg_count(struct scsi_cmnd *cmd)
|
||||
|
@ -680,7 +680,7 @@ fc_remote_port_chkready(struct fc_rport *rport)
|
||||
if (rport->roles & FC_PORT_ROLE_FCP_TARGET)
|
||||
result = 0;
|
||||
else if (rport->flags & FC_RPORT_DEVLOSS_PENDING)
|
||||
result = DID_TRANSPORT_DISRUPTED << 16;
|
||||
result = DID_IMM_RETRY << 16;
|
||||
else
|
||||
result = DID_NO_CONNECT << 16;
|
||||
break;
|
||||
@ -688,7 +688,7 @@ fc_remote_port_chkready(struct fc_rport *rport)
|
||||
if (rport->flags & FC_RPORT_FAST_FAIL_TIMEDOUT)
|
||||
result = DID_TRANSPORT_FAILFAST << 16;
|
||||
else
|
||||
result = DID_TRANSPORT_DISRUPTED << 16;
|
||||
result = DID_IMM_RETRY << 16;
|
||||
break;
|
||||
default:
|
||||
result = DID_NO_CONNECT << 16;
|
||||
|
@ -126,12 +126,14 @@ struct iscsi_transport {
|
||||
int *index, int *age);
|
||||
|
||||
void (*session_recovery_timedout) (struct iscsi_cls_session *session);
|
||||
struct iscsi_endpoint *(*ep_connect) (struct sockaddr *dst_addr,
|
||||
struct iscsi_endpoint *(*ep_connect) (struct Scsi_Host *shost,
|
||||
struct sockaddr *dst_addr,
|
||||
int non_blocking);
|
||||
int (*ep_poll) (struct iscsi_endpoint *ep, int timeout_ms);
|
||||
void (*ep_disconnect) (struct iscsi_endpoint *ep);
|
||||
int (*tgt_dscvr) (struct Scsi_Host *shost, enum iscsi_tgt_dscvr type,
|
||||
uint32_t enable, struct sockaddr *dst_addr);
|
||||
int (*set_path) (struct Scsi_Host *shost, struct iscsi_path *params);
|
||||
};
|
||||
|
||||
/*
|
||||
@ -148,6 +150,10 @@ extern void iscsi_conn_error_event(struct iscsi_cls_conn *conn,
|
||||
extern int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr,
|
||||
char *data, uint32_t data_size);
|
||||
|
||||
extern int iscsi_offload_mesg(struct Scsi_Host *shost,
|
||||
struct iscsi_transport *transport, uint32_t type,
|
||||
char *data, uint16_t data_size);
|
||||
|
||||
struct iscsi_cls_conn {
|
||||
struct list_head conn_list; /* item in connlist */
|
||||
void *dd_data; /* LLD private data */
|
||||
|
Reference in New Issue
Block a user