From 339af13d79dac8bb2d9e050ad1b26b8f49fde1ac Mon Sep 17 00:00:00 2001 From: Alex Zhuravlev Date: Tue, 20 Nov 2012 23:41:45 +0400 Subject: [PATCH] LU-2171 ost: remove old checksum verification it was used long ago to catch bugs. now it conflicts with LU-2150 where pages are not pinned by the bulk descriptor and can not be accessed after a call to obd_commitrw(). Signed-off-by: Alex Zhuravlev Change-Id: I5cc05e0836e8e42871aa2eca1d7ec0f402b42ee7 Reviewed-on: http://review.whamcloud.com/4400 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- lustre/ost/ost_handler.c | 96 +++++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 46 deletions(-) diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c index 23c1420..f84484e 100644 --- a/lustre/ost/ost_handler.c +++ b/lustre/ost/ost_handler.c @@ -906,6 +906,53 @@ out: RETURN(rc); } +static void ost_warn_on_cksum(struct ptlrpc_request *req, + struct ptlrpc_bulk_desc *desc, + struct niobuf_local *local_nb, int npages, + obd_count client_cksum, obd_count server_cksum, + int mmap) +{ + struct obd_export *exp = req->rq_export; + struct ost_body *body; + char *router; + char *via; + + body = req_capsule_client_get(&req->rq_pill, &RMF_OST_BODY); + LASSERT (body != NULL); + + if (req->rq_peer.nid == desc->bd_sender) { + via = router = ""; + } else { + via = " via "; + router = libcfs_nid2str(desc->bd_sender); + } + + if (mmap) { + CDEBUG_LIMIT(D_INFO, "client csum %x, server csum %x\n", + client_cksum, server_cksum); + return; + } + + LCONSOLE_ERROR_MSG(0x168, "BAD WRITE CHECKSUM: %s from %s%s%s inode " + DFID" object "LPU64"/"LPU64" extent ["LPU64"-"LPU64 + "]: client csum %x, server csum %x\n", + exp->exp_obd->obd_name, libcfs_id2str(req->rq_peer), + via, router, + body->oa.o_valid & OBD_MD_FLFID ? + body->oa.o_parent_seq : (__u64)0, + body->oa.o_valid & OBD_MD_FLFID ? + body->oa.o_parent_oid : 0, + body->oa.o_valid & OBD_MD_FLFID ? + body->oa.o_parent_ver : 0, + body->oa.o_id, + body->oa.o_valid & OBD_MD_FLGROUP ? + body->oa.o_seq : (__u64)0, + local_nb[0].lnb_file_offset, + local_nb[npages-1].lnb_file_offset + + local_nb[npages-1].len - 1, + client_cksum, server_cksum); +} + static int ost_brw_write(struct ptlrpc_request *req, struct obd_trans_info *oti) { struct ptlrpc_bulk_desc *desc = NULL; @@ -1071,10 +1118,10 @@ skip_transfer: repbody->oa.o_cksum = server_cksum; cksum_counter++; if (unlikely(client_cksum != server_cksum)) { - CDEBUG_LIMIT(mmap ? D_INFO : D_ERROR, - "client csum %x, server csum %x\n", - client_cksum, server_cksum); + ost_warn_on_cksum(req, desc, local_nb, npages, + client_cksum, server_cksum, mmap); cksum_counter = 0; + } else if ((cksum_counter & (-cksum_counter)) == cksum_counter){ CDEBUG(D_INFO, "Checksum %u from %s OK: %x\n", cksum_counter, libcfs_id2str(req->rq_peer), @@ -1104,49 +1151,6 @@ skip_transfer: */ repbody->oa.o_valid &= ~(OBD_MD_FLMTIME | OBD_MD_FLATIME); - if (unlikely(client_cksum != server_cksum && rc == 0 && !mmap)) { - int new_cksum = ost_checksum_bulk(desc, OST_WRITE, cksum_type); - char *msg; - char *via; - char *router; - - if (new_cksum == server_cksum) - msg = "changed in transit before arrival at OST"; - else if (new_cksum == client_cksum) - msg = "initial checksum before message complete"; - else - msg = "changed in transit AND after initial checksum"; - - if (req->rq_peer.nid == desc->bd_sender) { - via = router = ""; - } else { - via = " via "; - router = libcfs_nid2str(desc->bd_sender); - } - - LCONSOLE_ERROR_MSG(0x168, "%s: BAD WRITE CHECKSUM: %s from " - "%s%s%s inode "DFID" object " - LPU64"/"LPU64" extent ["LPU64"-"LPU64"]\n", - exp->exp_obd->obd_name, msg, - libcfs_id2str(req->rq_peer), - via, router, - body->oa.o_valid & OBD_MD_FLFID ? - body->oa.o_parent_seq : (__u64)0, - body->oa.o_valid & OBD_MD_FLFID ? - body->oa.o_parent_oid : 0, - body->oa.o_valid & OBD_MD_FLFID ? - body->oa.o_parent_ver : 0, - body->oa.o_id, - body->oa.o_valid & OBD_MD_FLGROUP ? - body->oa.o_seq : (__u64)0, - local_nb[0].lnb_file_offset, - local_nb[npages-1].lnb_file_offset + - local_nb[npages-1].len - 1 ); - CERROR("client csum %x, original server csum %x, " - "server csum now %x\n", - client_cksum, server_cksum, new_cksum); - } - if (rc == 0) { int nob = 0; -- 1.8.3.1