Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
LU-1517 ptlrpc: throw net error to ptlrpc for bulk
[fs/lustre-release.git]
/
lustre
/
ptlrpc
/
events.c
diff --git
a/lustre/ptlrpc/events.c
b/lustre/ptlrpc/events.c
index
5565049
..
55cc32e
100644
(file)
--- a/
lustre/ptlrpc/events.c
+++ b/
lustre/ptlrpc/events.c
@@
-178,6
+178,7
@@
void client_bulk_callback (lnet_event_t *ev)
{
struct ptlrpc_cb_id *cbid = ev->md.user_ptr;
struct ptlrpc_bulk_desc *desc = cbid->cbid_arg;
+ struct ptlrpc_request *req;
ENTRY;
LASSERT ((desc->bd_type == BULK_PUT_SINK &&
@@
-198,7
+199,7
@@
void client_bulk_callback (lnet_event_t *ev)
ev->type, ev->status, desc);
cfs_spin_lock(&desc->bd_lock);
-
+ req = desc->bd_req;
LASSERT(desc->bd_network_rw);
desc->bd_network_rw = 0;
@@
-206,6
+207,11
@@
void client_bulk_callback (lnet_event_t *ev)
desc->bd_success = 1;
desc->bd_nob_transferred = ev->mlength;
desc->bd_sender = ev->sender;
+ } else {
+ /* start reconnect and resend if network error hit */
+ cfs_spin_lock(&req->rq_lock);
+ req->rq_net_err = 1;
+ cfs_spin_unlock(&req->rq_lock);
}
/* release the encrypted pages for write */
@@
-214,7
+220,7
@@
void client_bulk_callback (lnet_event_t *ev)
/* NB don't unlock till after wakeup; desc can disappear under us
* otherwise */
- ptlrpc_client_wake_req(
desc->bd_
req);
+ ptlrpc_client_wake_req(req);
cfs_spin_unlock(&desc->bd_lock);
EXIT;
@@
-235,17
+241,12
@@
void client_bulk_callback (lnet_event_t *ev)
*
* it might not be precise but should be good enough.
*/
-#define REQS_ALL_BITS(svcpt) ((int)(sizeof((svcpt)->scp_hist_seq) * 8))
-#define REQS_SEC_BITS 32
-#define REQS_USEC_BITS 16
-/* will be replaced by bits for total service partition number soon */
-#define REQS_CPT_BITS(svcpt) 0
-#define REQS_SEQ_BITS(svcpt) (REQS_ALL_BITS(svcpt) - REQS_CPT_BITS(svcpt) -\
- REQS_SEC_BITS - REQS_USEC_BITS)
-
-#define REQS_SEQ_SHIFT(svcpt) (REQS_CPT_BITS(svcpt))
-#define REQS_USEC_SHIFT(svcpt) (REQS_SEQ_SHIFT(svcpt) + REQS_SEQ_BITS(svcpt))
-#define REQS_SEC_SHIFT(svcpt) (REQS_USEC_SHIFT(svcpt) + REQS_USEC_BITS)
+
+#define REQS_CPT_BITS(svcpt) ((svcpt)->scp_service->srv_cpt_bits)
+
+#define REQS_SEC_SHIFT 32
+#define REQS_USEC_SHIFT 16
+#define REQS_SEQ_SHIFT(svcpt) REQS_CPT_BITS(svcpt)
static void ptlrpc_req_add_history(struct ptlrpc_service_part *svcpt,
struct ptlrpc_request *req)
@@
-257,21
+258,20
@@
static void ptlrpc_req_add_history(struct ptlrpc_service_part *svcpt,
/* set sequence ID for request and add it to history list,
* it must be called with hold svcpt::scp_lock */
- LASSERT(REQS_SEQ_BITS(svcpt) > 0);
-
- new_seq = (sec << REQS_SEC_SHIFT(svcpt)) |
- (usec << REQS_USEC_SHIFT(svcpt)) | svcpt->scp_cpt;
+ new_seq = (sec << REQS_SEC_SHIFT) |
+ (usec << REQS_USEC_SHIFT) | svcpt->scp_cpt;
if (new_seq > svcpt->scp_hist_seq) {
/* This handles the initial case of scp_hist_seq == 0 or
* we just jumped into a new time window */
svcpt->scp_hist_seq = new_seq;
} else {
+ LASSERT(REQS_SEQ_SHIFT(svcpt) < REQS_USEC_SHIFT);
/* NB: increase sequence number in current usec bucket,
* however, it's possible that we used up all bits for
* sequence and jumped into the next usec bucket (future time),
* then we hope there will be less RPCs per bucket at some
* point, and sequence will catch up again */
- svcpt->scp_hist_seq += (1U << REQS_
CPT_BITS
(svcpt));
+ svcpt->scp_hist_seq += (1U << REQS_
SEQ_SHIFT
(svcpt));
new_seq = svcpt->scp_hist_seq;
}
@@
-338,11
+338,9
@@
void request_in_callback(lnet_event_t *ev)
req->rq_self = ev->target.nid;
req->rq_rqbd = rqbd;
req->rq_phase = RQ_PHASE_NEW;
-#ifdef CRAY_XT3
- req->rq_uid = ev->uid;
-#endif
cfs_spin_lock_init(&req->rq_lock);
CFS_INIT_LIST_HEAD(&req->rq_timed_list);
+ CFS_INIT_LIST_HEAD(&req->rq_exp_list);
cfs_atomic_set(&req->rq_refcount, 1);
if (ev->type == LNET_EVENT_PUT)
CDEBUG(D_INFO, "incoming req@%p x"LPU64" msgsize %u\n",