OpenSolaris

Printable Version Enter a New Search
Bug ID 6627468
Synopsis The fix for CR# 6274924 has a side-effect such that process_devinfo_tree() takes longer to complete.
State 10-Fix Delivered (Fix available in build)
Category:Subcategory kernel:devfs
Keywords DINFOCPYALL | DI_CACHE_SNAPSHOT_FLAGS | devfsadm | devi_tree_walk() | process_devinfo_tree()
Responsible Engineer Milan Jurik
Reported Against s10u3_10
Duplicate Of
Introduced In solaris_nevada
Commit to Fix s10u6_02
Fixed In s10u6_02
Release Fixed solaris_10u6(s10u6_02) , solaris_nevada(snv_84) (Bug ID:2158404)
Related Bugs 6274924 , 6667505 , 2160264
Submit Date 8-November-2007
Last Update Date 4-June-2008
Description
On machines running Solaris 10 11/06 (U3) or later releases with 118833-33 or greater (Sparc) or 118855-33 or greater (X86), or on machines running Solaris 10 06/06 (U2) or earlier releases with 118833-36 or greater (Sparc) or 118855-36 or greater (X86), running "devfsadm" with or without options is taking longer to complete.

To illustrate this bug, we can collect "truss" outputs for "devfsadm -i <driver_name>" on machines running Solaris 10 01/06 (U1) and Solaris 10 08/07 (U4).

On Solaris 10 01/06 (U1), we can see the following:

  # cat /etc/release
                       Solaris 10 1/06 s10s_u1wos_19a SPARC
           Copyright 2005 Sun Microsystems, Inc.  All Rights Reserved.
                        Use is subject to license terms.
                           Assembled 07 December 2005
  #
  # uname -a
  SunOS u80-b 5.10 Generic_118822-25 sun4u sparc SUNW,Ultra-80
  #
  # truss -adDefl -o /tmp/devfsadm-i-hme.truss.s10u1 devfsadm -i hme -V chatty
  devfsadm[1658]: chatty: process_devinfo_tree: enter
  devfsadm[1658]: chatty: lock_dev(): entered
  devfsadm[1658]: chatty: mkdirp(/dev, 0x1ed)
  devfsadm[1658]: chatty: process_devinfo_tree: attaching driver (hme)
  devfsadm[1658]: chatty: attempting pre-cleanup
  devfsadm[1658]: chatty: devi_tree_walk: root=/, minor=<NULL>, driver=hme, error=0, flags=68
  devfsadm[1658]: chatty: walking device tree
  devfsadm[1658]: chatty: minor_process: node=clone, minor=hme
  devfsadm[1658]: chatty: reset_node_permissions: phy_path=/devices/pseudo/clone@0:hme lphy_path=/pseudo/clone@0:hme
  devfsadm[1658]: chatty: link exists and is correct: /dev/hme -> ../devices/pseudo/clone@0:hme
  devfsadm[1658]: chatty: processing deferred links
  devfsadm[1658]: chatty: attempting post-cleanup
  devfsadm[1658]: chatty: unlock_dev(): entered
  #
  # more /tmp/devfsadm-i-hme.truss.s10u1
  ...
  1658/1:          0.1213  0.0006 open("/devices/pseudo/devinfo@0:devinfo", O_RDONLY) = 6
  1658/1:          0.1319  0.0106 ioctl(6, 0xDF81, 0xFFBFF788)                    = 0
  1658/1:          0.1343  0.0024 close(6)                                        = 0
  1658/1:          0.1345  0.0002 open("/devices/pseudo/devinfo@0:devinfo", O_RDONLY) = 6
  1658/1:          0.1347  0.0002 ioctl(6, 0xDF82, 0x00000000)                    = 57311
  1658/1:          0.1377  0.0030 ioctl(6, 0xDF07, 0xFFBFF314)                    = 76992
  ...
  1658/1:          0.1936  0.0002 _exit(0)
  #

On Solaris 10 08/07 (U4), we can see the following:

  # cat /etc/release
                       Solaris 10 8/07 s10s_u4wos_12b SPARC
           Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
                        Use is subject to license terms.
                            Assembled 16 August 2007
  #
  # uname -a
  SunOS u80-c 5.10 Generic_120011-14 sun4u sparc SUNW,Ultra-80
  #
  # truss -adDefl -o /tmp/devfsadm-i-hme.truss.s10u4 devfsadm -i hme -V chatty
  devfsadm[1404]: chatty: process_devinfo_tree: enter
  devfsadm[1404]: chatty: lock_dev(): entered
  devfsadm[1404]: chatty: mkdirp(/dev, 0x1ed)
  devfsadm[1404]: chatty: process_devinfo_tree: attaching driver (hme)
  devfsadm[1404]: chatty: attempting pre-cleanup
  devfsadm[1404]: chatty: devi_tree_walk: root=/, minor=<NULL>, driver=hme, error=0, flags=68

  [ Delay ]

  devfsadm[1404]: chatty: walking device tree
  devfsadm[1404]: chatty: minor_process: node=clone, minor=hme
  devfsadm[1404]: chatty: reset_node_permissions: phy_path=/devices/pseudo/clone@0:hme lphy_path=/pseudo/clone@0:hme
  devfsadm[1404]: chatty: link exists and is correct: /dev/hme -> ../devices/pseudo/clone@0:hme
  devfsadm[1404]: chatty: processing deferred links
  devfsadm[1404]: chatty: attempting post-cleanup
  devfsadm[1404]: chatty: unlock_dev(): entered
  #
  # more /tmp/devfsadm-i-hme.truss.s10u4
  ...
  1404/1:          0.1267  0.0008 open("/devices/pseudo/devinfo@0:devinfo", O_RDONLY) = 6
  1404/1:          0.1325  0.0058 ioctl(6, 0xDF81, 0xFFBFF700)                    = 0
  1404/1:          0.1331  0.0006 close(6)                                        = 0
  1404/1:          0.1333  0.0002 open("/devices/pseudo/devinfo@0:devinfo", O_RDONLY) = 6
  1404/1:          0.1335  0.0002 ioctl(6, 0xDF82, 0x00000000)                    = 57311
  1404/1:         11.4694 11.3359 ioctl(6, 0xDF2F, 0xFFBFF28C)                    = 89840
  ...
  1404/1:         11.5369  0.0003 _exit(0)
  #

While ioctl(6, 0xDF07, 0xFFBFF314) is only taking only 0.0030 seconds or 1.55% of total execution time of "devfsadm -i <driver_name>", ioctl(6, 0xDF2F, 0xFFBFF28C) is taking 11.3359 seconds or 98% of total execution time of "devfsadm -i <driver_name>".
Work Around
N/A
Comments
N/A