diff options
Diffstat (limited to 'usr/src/cmd/devfsadm/disk_link.c')
-rw-r--r-- | usr/src/cmd/devfsadm/disk_link.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/usr/src/cmd/devfsadm/disk_link.c b/usr/src/cmd/devfsadm/disk_link.c index 0baa608912..3e966ac6bd 100644 --- a/usr/src/cmd/devfsadm/disk_link.c +++ b/usr/src/cmd/devfsadm/disk_link.c @@ -20,7 +20,7 @@ */ /* * Copyright 2016 Toomas Soome <tsoome@me.com> - * Copyright 2012 Nexenta Systems, Inc. All rights reserved. + * Copyright 2016 Nexenta Systems, Inc. All rights reserved. * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -64,6 +64,7 @@ extern int system_labeled; static int disk_callback_chan(di_minor_t minor, di_node_t node); static int disk_callback_nchan(di_minor_t minor, di_node_t node); +static int disk_callback_blkdev(di_minor_t minor, di_node_t node); static int disk_callback_wwn(di_minor_t minor, di_node_t node); static int disk_callback_xvmd(di_minor_t minor, di_node_t node); static int disk_callback_fabric(di_minor_t minor, di_node_t node); @@ -82,6 +83,9 @@ static devfsadm_create_t disk_cbt[] = { { "disk", DDI_NT_BLOCK_CHAN, NULL, TYPE_EXACT, ILEVEL_0, disk_callback_chan }, + { "disk", DDI_NT_BLOCK_BLKDEV, NULL, + TYPE_EXACT, ILEVEL_0, disk_callback_blkdev + }, { "disk", DDI_NT_BLOCK_FABRIC, NULL, TYPE_EXACT, ILEVEL_0, disk_callback_fabric }, @@ -217,6 +221,21 @@ disk_callback_nchan(di_minor_t minor, di_node_t node) } static int +disk_callback_blkdev(di_minor_t minor, di_node_t node) +{ + char *addr; + char disk[DISK_SUBPATH_MAX]; + uint64_t eui64; + uint_t lun = 0; + + addr = di_bus_addr(node); + (void) sscanf(addr, "w%016"PRIx64",%X", &eui64, &lun); + (void) snprintf(disk, DISK_SUBPATH_MAX, "t%016"PRIX64"d%d", eui64, lun); + disk_common(minor, node, disk, RM_STALE); + return (DEVFSADM_CONTINUE); +} + +static int disk_callback_wwn(di_minor_t minor, di_node_t node) { char disk[10]; |