* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011 Whamcloud, Inc.
- *
+ * Copyright (c) 2011, 2012, Whamcloud, Inc.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
if (ioobj)
ioobj->ioo_seq = FID_SEQ_OST_MDT0;
/* remove fid_seq_is_rsvd() after FID-on-OST allows SEQ > 9 */
- } else if (oa == NULL ||
- !(fid_seq_is_rsvd(oa->o_seq) || fid_seq_is_idif(oa->o_seq))) {
+ } else if (oa == NULL || !(fid_seq_is_rsvd(oa->o_seq) ||
+ fid_seq_is_mdt0(oa->o_seq))) {
CERROR("%s: client %s sent invalid object "POSTID"\n",
exp->exp_obd->obd_name, obd_export_nid2str(exp),
oa ? oa->o_id : -1, oa ? oa->o_seq : -1);
/* Check if client was evicted while we were doing i/o before touching
network */
if (rc == 0) {
- rc = target_bulk_io(exp, desc, &lwi);
+ if (likely(!CFS_FAIL_PRECHECK(OBD_FAIL_PTLRPC_CLIENT_BULK_CB2)))
+ rc = target_bulk_io(exp, desc, &lwi);
no_reply = rc != 0;
}
out_tls:
ost_tls_put(req);
out_bulk:
- if (desc)
+ if (desc && !CFS_FAIL_PRECHECK(OBD_FAIL_PTLRPC_CLIENT_BULK_CB2))
ptlrpc_free_bulk(desc);
out:
LASSERT(rc <= 0);
exp->exp_connection->c_remote_uuid.uuid,
libcfs_id2str(req->rq_peer));
}
+ /* send a bulk after reply to simulate a network delay or reordering
+ * by a router */
+ if (unlikely(CFS_FAIL_PRECHECK(OBD_FAIL_PTLRPC_CLIENT_BULK_CB2))) {
+ cfs_waitq_t waitq;
+ struct l_wait_info lwi1;
+
+ CDEBUG(D_INFO, "reorder BULK\n");
+ cfs_waitq_init(&waitq);
+
+ lwi1 = LWI_TIMEOUT_INTR(cfs_time_seconds(3), NULL, NULL, NULL);
+ l_wait_event(waitq, 0, &lwi1);
+ rc = target_bulk_io(exp, desc, &lwi);
+ ptlrpc_free_bulk(desc);
+ }
RETURN(rc);
}
no_reply = rc != 0;
skip_transfer:
- if (unlikely(client_cksum != 0 && rc == 0)) {
+ if (client_cksum != 0 && rc == 0) {
static int cksum_counter;
repbody->oa.o_valid |= OBD_MD_FLCKSUM | OBD_MD_FLFLAGS;
repbody->oa.o_flags &= ~OBD_FL_CKSUM_ALL;
*/
repbody->oa.o_valid &= ~(OBD_MD_FLMTIME | OBD_MD_FLATIME);
- if (unlikely(client_cksum != server_cksum && rc == 0 && !mmap)) {
+ if (unlikely(client_cksum != server_cksum && rc == 0 && !mmap)) {
int new_cksum = ost_checksum_bulk(desc, OST_WRITE, cksum_type);
char *msg;
char *via;
lprocfs_ost_init_vars(&lvars);
lprocfs_obd_setup(obd, lvars.obd_vars);
- cfs_sema_init(&ost->ost_health_sem, 1);
+ cfs_mutex_init(&ost->ost_health_mutex);
if (oss_num_threads) {
/* If oss_num_threads is set, it is the min and the max. */
/* there is no recovery for OST OBD, all recovery is controlled by
* obdfilter OBD */
LASSERT(obd->obd_recovering == 0);
- cfs_down(&ost->ost_health_sem);
+ cfs_mutex_lock(&ost->ost_health_mutex);
ptlrpc_unregister_service(ost->ost_service);
ptlrpc_unregister_service(ost->ost_create_service);
ptlrpc_unregister_service(ost->ost_io_service);
ost->ost_service = NULL;
ost->ost_create_service = NULL;
- cfs_up(&ost->ost_health_sem);
+ cfs_mutex_unlock(&ost->ost_health_mutex);
lprocfs_obd_cleanup(obd);
struct ost_obd *ost = &obd->u.ost;
int rc = 0;
- cfs_down(&ost->ost_health_sem);
+ cfs_mutex_lock(&ost->ost_health_mutex);
rc |= ptlrpc_service_health_check(ost->ost_service);
rc |= ptlrpc_service_health_check(ost->ost_create_service);
rc |= ptlrpc_service_health_check(ost->ost_io_service);
- cfs_up(&ost->ost_health_sem);
+ cfs_mutex_unlock(&ost->ost_health_mutex);
/*
* health_check to return 0 on healthy