Hi Satya, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on block/for-next] [also build test WARNING on dm/for-next mkp-scsi/for-next scsi/for-next linux/master linus/master v5.12-rc4 next-20210325] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Satya-Tangirala/ensure-bios-aren-t-split-in-middle-of-crypto-data-unit/20210326-053016 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next config: i386-randconfig-r016-20210325 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce (this is a W=1 build): # https://github.com/0day-ci/linux/commit/9b8b677bfdba70695b8d01ee318ef552fcc0392e git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Satya-Tangirala/ensure-bios-aren-t-split-in-middle-of-crypto-data-unit/20210326-053016 git checkout 9b8b677bfdba70695b8d01ee318ef552fcc0392e # save the attached .config to linux build tree make W=1 ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>): >> block/keyslot-manager.c:457:6: warning: no previous prototype for 'blk_ksm_restrict_dus_to_queue_limits' [-Wmissing-prototypes] 457 | void blk_ksm_restrict_dus_to_queue_limits(struct blk_keyslot_manager *ksm, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vim +/blk_ksm_restrict_dus_to_queue_limits +457 block/keyslot-manager.c 452 453 /* 454 * Restrict the supported data unit sizes of the ksm based on the request queue 455 * limits 456 */ > 457 void blk_ksm_restrict_dus_to_queue_limits(struct blk_keyslot_manager *ksm, 458 struct queue_limits *limits) 459 { 460 /* The largest possible data unit size we support is PAGE_SIZE. */ 461 unsigned long largest_dus = PAGE_SIZE; 462 unsigned int dus_allowed_mask; 463 int i; 464 bool dus_was_restricted = false; 465 466 /* 467 * If the queue doesn't support SG gaps, a bio might get split in the 468 * middle of a data unit. So require SG gap support for inline 469 * encryption for any data unit size larger than a single sector. 470 */ 471 if (limits->virt_boundary_mask) 472 largest_dus = SECTOR_SIZE; 473 474 /* 475 * If the queue has chunk_sectors, the bio might be split within a data 476 * unit if the data unit size is larger than a single sector. So only 477 * support a single sector data unit size in this case. 478 */ 479 if (limits->chunk_sectors) 480 largest_dus = SECTOR_SIZE; 481 482 /* 483 * Any bio sent to the queue must be allowed to contain at least a 484 * data_unit_size worth of data. Since each segment in a bio contains 485 * at least a SECTOR_SIZE worth of data, it's sufficient that 486 * queue_max_segments(q) * SECTOR_SIZE >= data_unit_size. So disable 487 * all data_unit_sizes not satisfiable. 488 */ 489 largest_dus = min(largest_dus, 490 1UL << (fls(limits->max_segments) - 1 + SECTOR_SHIFT)); 491 492 /* Clear all unsupported data unit sizes. */ 493 dus_allowed_mask = (largest_dus << 1) - 1; 494 for (i = 0; i < ARRAY_SIZE(ksm->crypto_modes_supported); i++) { 495 if (ksm->crypto_modes_supported[i] & (~dus_allowed_mask)) 496 dus_was_restricted = true; 497 ksm->crypto_modes_supported[i] &= dus_allowed_mask; 498 } 499 500 if (dus_was_restricted) { 501 pr_warn("Disallowed use of encryption data unit sizes above %lu bytes with inline encryption hardware because of device request queue limits.\n", 502 largest_dus); 503 } 504 } 505 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org