From: Douglas Gilbert <dgilbert@interlog.com>
To: Hannes Reinecke <hare@suse.de>, Matthew Wilcox <willy@infradead.org>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>,
Christoph Hellwig <hch@lst.de>,
Daniel Wagner <daniel.wagner@suse.com>,
Johannes Thumshirn <johannes.thumshirn@wdc.com>,
James Bottomley <james.bottomley@hansenpartnership.com>,
linux-scsi@vger.kernel.org
Subject: Re: [PATCH 3/4] scsi: move target device list to xarray
Date: Fri, 29 May 2020 12:24:34 -0400 [thread overview]
Message-ID: <8b6cd6c4-06ff-a7f0-76f2-9f7ff3ba472a@interlog.com> (raw)
In-Reply-To: <6ed49962-479e-ced7-16b4-095c8f5f70d6@suse.de>
On 2020-05-29 8:46 a.m., Hannes Reinecke wrote:
> On 5/29/20 1:21 PM, Matthew Wilcox wrote:
>> On Fri, May 29, 2020 at 08:50:21AM +0200, Hannes Reinecke wrote:
>>>> I meant just use xa_alloc() for everything instead of using xa_insert for
>>>> 0-255.
>>>>
>>> But then I'll have to use xa_find() to get to the actual element as the 1:1
>>> mapping between SCSI LUN and array index is lost.
>>> And seeing that most storage arrays will expose only up to 256 LUNs I
>>> thought this was a good improvement on lookup.
>>> Of course, this only makes sense if xa_load() is more efficient than
>>> xa_find(). If not then of course it's a bit futile.
>>
>> xa_load() is absolutely more efficient than xa_find(). It's just a
>> question of whether it matters ;-) Carry on ...
>>
> Thanks. I will.
>
> BTW, care to update the documentation?
>
> * Return: 0 on success, -ENOMEM if memory could not be allocated or
> * -EBUSY if there are no free entries in @limit.
> */
> int __xa_alloc(struct xarray *xa, u32 *id, void *entry,
> struct xa_limit limit, gfp_t gfp)
> {
> XA_STATE(xas, xa, 0);
>
> if (WARN_ON_ONCE(xa_is_advanced(entry)))
> return -EINVAL;
> if (WARN_ON_ONCE(!xa_track_free(xa)))
> return -EINVAL;
>
> So looks as if the documentation is in need of updating to cover -EINVAL.
> And, please, state somewhere that whenever you want to use xa_alloc() you _need_
> to specify XA_ALLOC_FLAGS in xa_init_flags(), otherwise
> you trip across the above.
>
> It's not entirely obvious, and took me the better half of a day to figure out.
Ditto for me. At the time I did relay my frustration to Matthew who did
address it in the documentation. Another one is that xa_find*() requires the
XA_PRESENT mark, even when you are not using marks (or haven't yet learnt
about them ...). A clearer demarcation of the two xarray modes (i.e. either
the user supplies the index, or xarray does) would be helpful. That mode
impacts which parts of the xarray interface are used, for example in the sg
driver rewrite, xarrays are used for all collections but if memory serves,
there isn't a single xa_load() or xa_store() call.
But writing technical documentation is difficult. Very few third parties step
up to help, leaving the designer/implementer to do it. And it is extremely
difficult for someone who knows the code backwards (and where the skeletons are
buried) to stand on their heads and present the information in a pedagogic
manner.
Also traditional code documentation uses 7 bit ASCII text and "ACSII art" in
a sort of nod to earlier generations of programmers. Surely more modern
techniques, including colour diagrams and even animations, should now be
encouraged. Maybe when compilers start accepting html :-)
Doug Gilbert
P.S. I have tried to practice what I preach:
http://sg.danny.cz/sg/sg_v40.html
next prev parent reply other threads:[~2020-05-29 16:24 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-28 16:36 [PATCHv3 0/4] scsi: use xarray for devices and targets Hannes Reinecke
2020-05-28 16:36 ` [PATCH 1/4] scsi: convert target lookup to xarray Hannes Reinecke
2020-05-28 17:18 ` Douglas Gilbert
2020-05-28 19:08 ` Douglas Gilbert
2020-05-28 17:48 ` Bart Van Assche
2020-05-29 6:24 ` Hannes Reinecke
2020-05-28 16:36 ` [PATCH 2/4] target_core_pscsi: use __scsi_device_lookup() Hannes Reinecke
2020-05-28 17:55 ` Bart Van Assche
2020-05-29 7:02 ` Daniel Wagner
2020-05-28 16:36 ` [PATCH 3/4] scsi: move target device list to xarray Hannes Reinecke
2020-05-28 17:50 ` Douglas Gilbert
2020-05-28 18:54 ` Matthew Wilcox
2020-05-28 19:44 ` Douglas Gilbert
2020-05-28 19:53 ` Matthew Wilcox
2020-05-29 6:45 ` Hannes Reinecke
2020-05-28 20:58 ` Hannes Reinecke
2020-05-29 0:20 ` Matthew Wilcox
2020-05-29 6:50 ` Hannes Reinecke
2020-05-29 11:21 ` Matthew Wilcox
2020-05-29 12:46 ` Hannes Reinecke
2020-05-29 12:50 ` Matthew Wilcox
2020-05-29 13:17 ` Hannes Reinecke
2020-05-29 16:24 ` Douglas Gilbert [this message]
2020-05-28 16:36 ` [PATCH 4/4] scsi: remove direct device lookup per host Hannes Reinecke
2020-05-29 4:21 ` [PATCHv3 0/4] scsi: use xarray ... scsi_alloc_target() Douglas Gilbert
-- strict thread matches above, loose matches on Subject: below --
2020-05-28 8:42 [PATCHv2 0/4] Hannes Reinecke
2020-05-28 8:42 ` [PATCH 3/4] scsi: move target device list to xarray Hannes Reinecke
2020-05-27 14:13 [RFC PATCH 0/4] scsi: use xarray for devices and targets Hannes Reinecke
2020-05-27 14:13 ` [PATCH 3/4] scsi: move target device list to xarray Hannes Reinecke
2020-05-27 15:34 ` Johannes Thumshirn
2020-05-27 20:13 ` kbuild test robot
2020-05-30 2:47 ` kbuild test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8b6cd6c4-06ff-a7f0-76f2-9f7ff3ba472a@interlog.com \
--to=dgilbert@interlog.com \
--cc=daniel.wagner@suse.com \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=james.bottomley@hansenpartnership.com \
--cc=johannes.thumshirn@wdc.com \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox