On Tue, Jun 02, 2020 at 01:33:05PM +0200, Hannes Reinecke wrote: > Hi all, > > based on the ideas from Doug Gilbert here's now my take on using > xarrays for devices and targets. > It revolves around two ideas: > > - The scsi target 'channel' and 'id' numbers are never ever used > to the full 32 bit range; channels are well below 10, and no > driver is using more than 16 bits for the id. So we can reduce > the type of 'channel' and 'id' to 16 bits, and use the 32 bit > value 'channel << 16 | id' as the index into the target xarray. > - Nearly every target only ever uses the first two levels of the > 4-level SCSI LUN structure, which means that we can use the > linearized SCSI LUN id as an index into the xarray. > If we ever come across targets utilizing more that 2 levels of > the LUN structure we'll allocate the first unused index and have > to resort to a less efficient lookup instead of direct indexing. > > With these changes we can implement an efficient lookup mechanism, > devolving into direct lookup for most cases. It also allows us to > detect duplicate entries or accidental overwrites of existing elements > by using xa_cmpxchg(). > And iteration over targets and devices should be as efficient as the > current, list-based, approach. > > As usual, comments and reviews are welcome. I see absolutely no argument for what the point of this series. It adds more code, and I don't really see any indications for it fixing bugs, speeding up workloads, or reducing memory usage.