X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=inline;f=lustre%2Ftarget%2Ftgt_handler.c;h=64c0052d7f2c1bb0f8f1c2a18096e0f76101ea12;hb=6d8a7af1cd65409bdb5a307e76090ed460d5a6f6;hp=e60df761dd566d9377155bd5c89460f142cb8589;hpb=553d93361d2db4ff39bf19ac66dc2d79f6e3e324;p=fs%2Flustre-release.git diff --git a/lustre/target/tgt_handler.c b/lustre/target/tgt_handler.c index e60df76..64c0052 100644 --- a/lustre/target/tgt_handler.c +++ b/lustre/target/tgt_handler.c @@ -2034,8 +2034,18 @@ static int tgt_checksum_niobuf_t10pi(struct lu_target *tgt, } LASSERT(used <= MAX_GUARD_NUMBER); - /* If disk support T10PI checksum, copy guards to local_nb */ - if (t10_cksum_type && opc == OST_WRITE) { + /* + * If disk support T10PI checksum, copy guards to local_nb. + * If the write is partial page, do not use the guards for bio + * submission since the data might not be full-sector. The bio + * guards will be generated later based on the full sectors. If + * the sector size is 512B rather than 4 KB, or the page size + * is larger than 4KB, this might drop some useful guards for + * partial page write, but it will only add minimal extra time + * of checksum calculation. + */ + if (t10_cksum_type && opc == OST_WRITE && + local_nb[i].lnb_len == PAGE_SIZE) { local_nb[i].lnb_guard_rpc = 1; memcpy(local_nb[i].lnb_guards, guard_start + used_number,