On Mon, Jan 30, 2017 at 4:24 AM, Christoph Hellwig <hch@xxxxxx> wrote: > Hi Dan, > > this looks mostly fine to me. A few code comments below, but except > for this there is another issue with it: We still have drivers > that share a single request_queue for multiple gendisks, so I wonder > > Also I think you probably want one patch for the block framework, > and one to switch SCSI over to it. > >> +struct disk_devt { >> + struct kref kref; >> + void (*release)(struct kref *); >> +}; >> + >> +static inline void put_disk_devt(struct disk_devt *disk_devt) >> +{ >> + if (disk_devt) >> + kref_put(&disk_devt->kref, disk_devt->release); >> +} >> + >> +static inline void get_disk_devt(struct disk_devt *disk_devt) >> +{ >> + if (disk_devt) >> + kref_get(&disk_devt->kref); >> +} > > Given that we have a user-supplied release callack I'd much rather get > rid of the kref here, use a normal atomic_t and pass the disk_devt > structure to the release callback then a kref. I'm missing something... kref is just: struct kref { atomic_t refcount; }; ...so what do we gain by open coding kref_get() and kref_put()? -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html