* @{
*/
#include <linux/kobject.h>
+#include <linux/rhashtable.h>
#include <linux/uio.h>
#include <libcfs/libcfs.h>
#include <lnet/api.h>
*/
struct ptlrpc_connection {
/** linkage for connections hash table */
- struct hlist_node c_hash;
+ struct rhash_head c_hash;
/** Our own lnet nid for this connection */
lnet_nid_t c_self;
/** Remote side nid for this connection */
/** state flags of requests */
/* XXX only ones left are those used by the bulk descs as well! */
-#define PTL_RPC_FL_INTR (1 << 0) /* reply wait was interrupted by user */
-#define PTL_RPC_FL_TIMEOUT (1 << 7) /* request timed out waiting for reply */
+#define PTL_RPC_FL_INTR BIT(0) /* reply wait was interrupted by user */
+#define PTL_RPC_FL_TIMEOUT BIT(7) /* request timed out waiting for reply */
#define REQ_MAX_ACK_LOCKS 8
static inline bool lustre_req_swabbed(struct ptlrpc_request *req, size_t index)
{
LASSERT(index < sizeof(req->rq_req_swab_mask) * 8);
- return req->rq_req_swab_mask & (1 << index);
+ return req->rq_req_swab_mask & BIT(index);
}
/**
static inline bool lustre_rep_swabbed(struct ptlrpc_request *req, size_t index)
{
LASSERT(index < sizeof(req->rq_rep_swab_mask) * 8);
- return req->rq_rep_swab_mask & (1 << index);
+ return req->rq_rep_swab_mask & BIT(index);
}
/**
static inline void lustre_set_req_swabbed(struct ptlrpc_request *req,
size_t index)
{
- LASSERT(index < sizeof(req->rq_req_swab_mask) * 8);
- LASSERT((req->rq_req_swab_mask & (1 << index)) == 0);
- req->rq_req_swab_mask |= 1 << index;
+ LASSERT(index < sizeof(req->rq_req_swab_mask) * 8);
+ LASSERT((req->rq_req_swab_mask & BIT(index)) == 0);
+ req->rq_req_swab_mask |= BIT(index);
}
/**
static inline void lustre_set_rep_swabbed(struct ptlrpc_request *req,
size_t index)
{
- LASSERT(index < sizeof(req->rq_rep_swab_mask) * 8);
- LASSERT((req->rq_rep_swab_mask & (1 << index)) == 0);
- req->rq_rep_swab_mask |= 1 << index;
+ LASSERT(index < sizeof(req->rq_rep_swab_mask) * 8);
+ LASSERT((req->rq_rep_swab_mask & BIT(index)) == 0);
+ req->rq_rep_swab_mask |= BIT(index);
}
/**
* Another user is readpage for MDT.
*/
struct ptlrpc_bulk_desc {
+ unsigned int bd_refs; /* number MD's assigned including zero-sends */
/** completed with failure */
unsigned long bd_failure:1;
/** client side */
int bd_max_iov; /* allocated size of bd_iov */
int bd_nob; /* # bytes covered */
int bd_nob_transferred; /* # bytes GOT/PUT */
+ unsigned int bd_nob_last; /* # bytes in last MD */
__u64 bd_last_mbits;
lnet_nid_t bd_sender; /* stash event::sender */
int bd_md_count; /* # valid entries in bd_mds */
int bd_md_max_brw; /* max entries in bd_mds */
+
+ /** array of offsets for each MD */
+ unsigned int bd_mds_off[PTLRPC_BULK_OPS_COUNT];
/** array of associated MDs */
struct lnet_handle_md bd_mds[PTLRPC_BULK_OPS_COUNT];
enum {
SVC_INIT = 0,
- SVC_STOPPED = 1 << 0,
- SVC_STOPPING = 1 << 1,
- SVC_STARTING = 1 << 2,
- SVC_RUNNING = 1 << 3,
+ SVC_STOPPED = BIT(0),
+ SVC_STOPPING = BIT(1),
+ SVC_STARTING = BIT(2),
+ SVC_RUNNING = BIT(3),
};
#define PTLRPC_THR_NAME_LEN 32
/* Bits for pc_flags */
enum ptlrpcd_ctl_flags {
- /**
- * Ptlrpc thread start flag.
- */
- LIOD_START = 1 << 0,
- /**
- * Ptlrpc thread stop flag.
- */
- LIOD_STOP = 1 << 1,
- /**
- * Ptlrpc thread force flag (only stop force so far).
- * This will cause aborting any inflight rpcs handled
- * by thread if LIOD_STOP is specified.
- */
- LIOD_FORCE = 1 << 2,
- /**
- * This is a recovery ptlrpc thread.
- */
- LIOD_RECOVERY = 1 << 3,
+ /**
+ * Ptlrpc thread start flag.
+ */
+ LIOD_START = BIT(0),
+ /**
+ * Ptlrpc thread stop flag.
+ */
+ LIOD_STOP = BIT(1),
+ /**
+ * Ptlrpc thread force flag (only stop force so far).
+ * This will cause aborting any inflight rpcs handled
+ * by thread if LIOD_STOP is specified.
+ */
+ LIOD_FORCE = BIT(2),
+ /**
+ * This is a recovery ptlrpc thread.
+ */
+ LIOD_RECOVERY = BIT(3),
};
/**
LASSERT(desc != NULL);
spin_lock(&desc->bd_lock);
- rc = desc->bd_md_count;
+ rc = desc->bd_refs;
spin_unlock(&desc->bd_lock);
return rc;
}
spin_lock(&desc->bd_lock);
- rc = desc->bd_md_count;
+ rc = desc->bd_refs;
spin_unlock(&desc->bd_lock);
return rc;
}