struct ost_body *repbody;
struct ost_body *body;
struct obd_ioobj *ioo;
+ struct ost_layout_compr *olc;
const char *obd_name = exp->exp_obd->obd_name;
enum cksum_types cksum_type = OBD_CKSUM_CRC32;
/* '1' for consistency with code that checks !mpflag to restore */
unsigned int mpflags = 1;
- struct ost_layout_compr *olc;
enum ll_compr_type type;
bool wait_sync = false;
bool no_reply = false;
local_nb = tbc->tbc_lnb;
-
olc = &body->oa.o_layout_compr;
type = olc->ol_compr_type;
if (type != LL_COMPR_TYPE_NONE) {
+ int nrbufs = ioo->ioo_bufcnt;
unsigned int chunk_log_bits;
+ __u64 chunk_start;
+ __u64 chunk_end;
+ int chunk_size;
+ __u64 io_start;
+ __u64 io_end;
chunk_log_bits = olc->ol_compr_chunk_log_bits;
chunk_size = COMPR_GET_CHUNK_SIZE(chunk_log_bits);
+
+ /* rnbs are in offset order, so we get the start of IO from the
+ * first and end of IO from the last
+ */
+ io_start = remote_nb[0].rnb_offset;
+ io_end = remote_nb[nrbufs - 1].rnb_offset +
+ remote_nb[nrbufs - 1].rnb_len;
+ chunk_start = io_start;
+ chunk_end = io_end;
+
+ chunk_round(&chunk_start, &chunk_end, chunk_size);
+
+ CDEBUG(D_SEC,
+ "io_start: %llu io_end: %llu, chunk_start %llu, chunk_end %llu\n",
+ io_start, io_end, chunk_start, chunk_end);
+
+ /* the start or end of this IO is unaligned */
+ if (io_start != chunk_start || io_end != chunk_end)
+ CDEBUG(D_SEC, "unaligned write\n");
}
rc = tgt_brw_lock(tsi->tsi_env, exp, &tsi->tsi_resid, remote_nb, &lockh,