Re: [PATCH 3/3] blk-crypto: show crypto capabilities in sysfs

From: Greg KH
Date: Sun Nov 28 2021 - 03:16:38 EST


On Sat, Nov 27, 2021 at 12:47:14PM -0800, Eric Biggers wrote:
> Hi Greg, thanks for the review!
>
> On Sat, Nov 27, 2021 at 10:06:18AM +0100, Greg KH wrote:
> > > diff --git a/Documentation/block/queue-sysfs.rst b/Documentation/block/queue-sysfs.rst
> > > index 3f569d5324857..252939f340459 100644
> > > --- a/Documentation/block/queue-sysfs.rst
> > > +++ b/Documentation/block/queue-sysfs.rst
> >
> > Why is all of this information not in Documentation/ABI/ like the rest
> > of the kernel's sysfs information? When it is there it can be
> > automatically tested as well.
> >
> > Please don't add new entries to the wrong place if at all possible.
>
> Some of the block queue attributes are documented in
> Documentation/ABI/testing/sysfs-block, but Documentation/block/queue-sysfs.rst
> seems to be the authoritative source in practice. I checked all QUEUE_*_ENTRY
> in block/blk-sysfs.c, and I got:
>
> - 16 attributes are documented in both places
> - 23 attributes are documented in Documentation/block/ only
> - 0 attributes are documented in Documentation/ABI/ only
> - 2 attributes ("virt_boundary_mask" and "stable_writes") not documented in
> either place
>
> So most block queue attributes are documented only in Documentation/block/. And
> if I added my new attributes to Documentation/ABI/ only, as you're requesting,
> they would be the only block queue attributes that would be documented in only
> that place. I think that would make things worse, as then there would be no
> authoritative source anymore.

I agree, it should all move to the proper location in Documentation/ABI/
as that is where all sysfs attributes need to be documented. Block
queues are not special here.

> If both you and the block people agree that *all* block queue attributes should
> be documented in Documentation/ABI/ only, I'd be glad to send a separate patch
> that adds anything missing to Documentation/ABI/testing/sysfs-block, then
> removes Documentation/block/queue-sysfs.rst. (BTW, shouldn't it really be in
> Documentation/ABI/stable/? This ABI has been around a long time, so surely
> users are relying on it.) But it doesn't seem fair to block this patch on that.

"stable" is fine with me, people abuse "testing" by throwing everything
into it.

>
> > > +static ssize_t blk_crypto_max_dun_bits_show(struct blk_crypto_profile *profile,
> > > + struct blk_crypto_attr *attr,
> > > + char *page)
> > > +{
> > > + return sprintf(page, "%u\n", 8 * profile->max_dun_bytes_supported);
> >
> > sysfs_emit() please, for this, and all other show functions.
>
> Sure. Note that in .show() functions kernel-wide, it appears that sprintf() is
> much more commonly used than sysfs_emit(). Is there any plan to convert these?
> As-is, if people use existing code as a reference, it will be "wrong" most of
> the time, which is unfortunate.

Doing a wholesale replacement across the kernel is a pain and disruptive
and not really needed. But for all new code, please use the new
functions. If you want to convert your driver/subsystem to the new
functions, no objection from me!

> > > +}
> > > +
> > > +static ssize_t blk_crypto_num_keyslots_show(struct blk_crypto_profile *profile,
> > > + struct blk_crypto_attr *attr,
> > > + char *page)
> > > +{
> > > + return sprintf(page, "%u\n", profile->num_slots);
> > > +}
> > > +
> > > +#define BLK_CRYPTO_RO_ATTR(_name) \
> > > +static struct blk_crypto_attr blk_crypto_##_name = { \
> > > + .attr = { .name = #_name, .mode = 0444 }, \
> >
> > __ATTR_RO()?
>
> Sure. This would require removing the "blk_crypto_" prefix from the .show()
> functions, which I'd prefer to have, but it doesn't really matter.

Ah, you are right, but I think using the default macros sometimes can be
nicer as they are easier to verify you are doing things correctly.

> > > +static const struct attribute_group *blk_crypto_attr_groups[] = {
> > > + &blk_crypto_attr_group,
> > > + &blk_crypto_modes_attr_group,
> > > + NULL,
> > > +};
> >
> > ATTRIBUTE_GROUP()?
> >
> > Hm, maybe not, but I think it could be used here.
>
> ATTRIBUTE_GROUP() doesn't exist; probably you're referring to
> ATTRIBUTE_GROUPS()? ATTRIBUTE_GROUPS() is only usable when there is only one
> attribute group. In this case, there are two attribute groups.

You are right, sorry.

> > > +static int __init blk_crypto_sysfs_init(void)
> > > +{
> > > + int i;
> > > +
> > > + BUILD_BUG_ON(BLK_ENCRYPTION_MODE_INVALID != 0);
> > > + for (i = 1; i < BLK_ENCRYPTION_MODE_MAX; i++) {
> > > + struct blk_crypto_attr *attr = &__blk_crypto_mode_attrs[i];
> >
> > sysfs_attr_init() might be needed here, have you run with lockdep
> > enabled?
>
> It's not needed because __blk_crypto_mode_attrs isn't dynamically allocated
> memory. Yes, I've run with lockdep enabled.

Ok, good, just checking.

thanks,

greg k-h