#include <rdma/ib_verbs.h>
#include <rdma/ib_sa.h>
#include <rdma/ib_cm.h>
-#include <rdma/ib_fmr_pool.h>
enum {
SRP_PATH_REC_TIMEOUT_MS = 1000,
SRP_DLID_REDIRECT = 2,
SRP_MAX_LUN = 512,
- SRP_DEF_SG_TABLESIZE = 12,
+ SRP_MAX_IU_LEN = 256,
SRP_RQ_SHIFT = 6,
SRP_RQ_SIZE = 1 << SRP_RQ_SHIFT,
SRP_SQ_SIZE = SRP_RQ_SIZE - 1,
SRP_CQ_SIZE = SRP_SQ_SIZE + SRP_RQ_SIZE,
- SRP_TAG_TSK_MGMT = 1 << (SRP_RQ_SHIFT + 1),
-
- SRP_FMR_SIZE = 256,
- SRP_FMR_POOL_SIZE = 1024,
- SRP_FMR_DIRTY_SIZE = SRP_FMR_POOL_SIZE / 4
+ SRP_TAG_TSK_MGMT = 1 << (SRP_RQ_SHIFT + 1)
};
#define SRP_OP_RECV (1 << 31)
+#define SRP_MAX_INDIRECT ((SRP_MAX_IU_LEN - \
+ sizeof (struct srp_cmd) - \
+ sizeof (struct srp_indirect_buf)) / 16)
enum srp_target_state {
SRP_TARGET_LIVE,
SRP_TARGET_REMOVED
};
-struct srp_device {
- struct list_head dev_list;
+struct srp_host {
+ u8 initiator_port_id[16];
struct ib_device *dev;
+ u8 port;
struct ib_pd *pd;
struct ib_mr *mr;
- struct ib_fmr_pool *fmr_pool;
- int fmr_page_shift;
- int fmr_page_size;
- unsigned long fmr_page_mask;
-};
-
-struct srp_host {
- u8 initiator_port_id[16];
- struct srp_device *dev;
- u8 port;
struct class_device class_dev;
struct list_head target_list;
- spinlock_t target_lock;
+ struct mutex target_mutex;
struct completion released;
struct list_head list;
};
struct scsi_cmnd *scmnd;
struct srp_iu *cmd;
struct srp_iu *tsk_mgmt;
- struct ib_pool_fmr *fmr;
/*
* Fake scatterlist used when scmnd->use_sg==0. Can be killed
* when the SCSI midlayer no longer generates non-SG commands.
__be64 id_ext;
__be64 ioc_guid;
__be64 service_id;
- u16 io_class;
struct srp_host *srp_host;
struct Scsi_Host *scsi_host;
char target_name[32];
int max_ti_iu_len;
s32 req_lim;
- int zero_req_lim;
-
unsigned rx_head;
struct srp_iu *rx_ring[SRP_RQ_SIZE];