[PATCH 11/11] block: move integrity information into queue_limits
Hannes Reinecke
hare at suse.de
Fri Jun 7 00:35:02 PDT 2024
(Trimming reply for better readability)
On 6/7/24 08:29, Hannes Reinecke wrote:
> On 6/7/24 07:59, Christoph Hellwig wrote:
[ .. ]
>> diff --git a/block/blk-settings.c b/block/blk-settings.c
>> index 996f247fc98e80..f11c8676eb4c67 100644
>> --- a/block/blk-settings.c
>> +++ b/block/blk-settings.c
>> @@ -6,7 +6,7 @@
>> #include <linux/module.h>
>> #include <linux/init.h>
>> #include <linux/bio.h>
>> -#include <linux/blkdev.h>
>> +#include <linux/blk-integrity.h>
>> #include <linux/pagemap.h>
>> #include <linux/backing-dev-defs.h>
>> #include <linux/gcd.h>
>> @@ -97,6 +97,36 @@ static int blk_validate_zoned_limits(struct
>> queue_limits *lim)
>> return 0;
>> }
>> +static int blk_validate_integrity_limits(struct queue_limits *lim)
>> +{
>> + struct blk_integrity *bi = &lim->integrity;
>> +
>> + if (!bi->tuple_size) {
>> + if (bi->csum_type != BLK_INTEGRITY_CSUM_NONE ||
>> + bi->tag_size || ((bi->flags & BLK_INTEGRITY_REF_TAG))) {
>> + pr_warn("invalid PI settings.\n");
>> + return -EINVAL;
>> + }
>> + return 0;
>> + }
>> +
>> + if (!IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY)) {
>> + pr_warn("integrity support disabled.\n");
>> + return -EINVAL;
>> + }
>> +
> Why is that an error?
> Surely 'validate' should not return an error if BLK_DEV_INTEGRITY is
> disabled and no limits are set?
>
>> + if (bi->csum_type == BLK_INTEGRITY_CSUM_NONE &&
>> + (bi->flags & BLK_INTEGRITY_REF_TAG)) {
>> + pr_warn("ref tag not support without checksum.\n");
>> + return -EINVAL;
>> + }
>> +
>> + if (!bi->interval_exp)
>> + bi->interval_exp = ilog2(lim->logical_block_size);
>> +
>> + return 0;
>> +}
>> +
>> /*
>> * Check that the limits in lim are valid, initialize defaults for
>> unset
>> * values, and cap values based on others where needed.
>> @@ -105,6 +135,7 @@ static int blk_validate_limits(struct queue_limits
>> *lim)
>> {
>> unsigned int max_hw_sectors;
>> unsigned int logical_block_sectors;
>> + int err;
>> /*
>> * Unless otherwise specified, default to 512 byte logical
>> blocks and a
>> @@ -230,6 +261,9 @@ static int blk_validate_limits(struct queue_limits
>> *lim)
>> lim->misaligned = 0;
>> }
>> + err = blk_validate_integrity_limits(lim);
>> + if (err)
>> + return err;
> Wouldn't we always fail to validate the limits if BLK_DEV_INTEGRITY is
> disabled, given the check above?
>
Cheers,
Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare at suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Frankenstr. 146, 90461 Nürnberg
HRB 36809 (AG Nürnberg), GF: I. Totev, A. McDonald, W. Knoblich
More information about the Linux-nvme
mailing list