On 1/23/20 7:45 PM, Ilya Dryomov wrote: > On Thu, Jan 23, 2020 at 1:44 PM Hannes Reinecke <hare@xxxxxxx> wrote: >> >> The rbd driver already provides additional information in sysfs >> under /sys/bus/rbd, so we should set the 'device' link in the block >> device to reference this information. >> >> Cc: David Disseldorp <ddiss@xxxxxxxx> >> Signed-off-by: Hannes Reinecke <hare@xxxxxxxx> >> --- >> drivers/block/rbd.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c >> index 9f1f8689e316..3240b7744aeb 100644 >> --- a/drivers/block/rbd.c >> +++ b/drivers/block/rbd.c >> @@ -6938,7 +6938,7 @@ static ssize_t do_rbd_add(struct bus_type *bus, >> if (rc) >> goto err_out_image_lock; >> >> - add_disk(rbd_dev->disk); >> + device_add_disk(&rbd_dev->dev, rbd_dev->disk, NULL); >> /* see rbd_init_disk() */ >> blk_put_queue(rbd_dev->disk->queue); > > Hi Hannes, > > I looked at this a while ago and didn't go through with the patch > because I wasn't sure whether this symlink can point to something > arbitrary. IIRC it usually points a couple of levels up, to some > parent. In the rbd case, this would be a completely different tree: > /sys/devices/virtual -> /sys/bus/rbd. > Yes, this is expected. The 'device' link will _always_ point into a different tree; the accessor via /sys/block or /sys/bus are assumed to be virtual entries, with the 'device' link pointing to the underlying device. In our case the underlying device is also a virtual entity, but that's okay. > Do you know if there is precedent for this in some other driver? > Are you sure it's not going to break any assumptions? > Things like iscsi do the very same thing. And no, it doesn't break assumptions; quite the contrary. > How did this came up? I'm curious because rbd(8) is only utility > that I know of that (somewhat) cares. > That's me digging through the rbd driver and see if I could hook up nvme-over-fabrics as a frontend to ceph/rbd. As such I needed to find some information about the rbd device, and found that while the driver provides additional information under /sys/devices/rbd/X, this information is not linked to /sys/block/rbdX. And this patch just links these to bits of information together, so that now you can get the driver specific informations by following the 'device' link like all the other drivers do, too. Cheers, Hannes -- Dr. Hannes Reinecke Teamlead Storage & Networking hare@xxxxxxx +49 911 74053 688 SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg HRB 36809 (AG Nürnberg), GF: Felix Imendörffer