kern/122838: [devfs] devfs doesn't handle complex paths (like zvol/pool/vms) good

Dmitry Marakasov amdmi3 at amdmi3.ru
Thu Apr 17 02:20:01 UTC 2008


>Number:         122838
>Category:       kern
>Synopsis:       [devfs] devfs doesn't handle complex paths (like zvol/pool/vms) good
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Apr 17 02:20:00 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Dmitry Marakasov
>Release:        FreeBSD 7.0-RELEASE i386
>Organization:
>Environment:
System: FreeBSD hades.panopticon 7.0-RELEASE FreeBSD 7.0-RELEASE #5: Fri Mar 14 14:26:43 MSK 2008 root at hades.panopticon:/usr/obj/usr/src/sys/HADES i386


>Description:
devfs behavior on nested paths is really unintuitive and pretty hard to tune.

Suppose I have ZFS zvol under pool/vms/win2000 and I want to unhide node for it in the jail.

Here's what it look like unhidden:

% find /dev/zvol
/dev/zvol
/dev/zvol/pool
/dev/zvol/pool/vms
/dev/zvol/pool/vms/win2000

Now I hide everything and try to unhide desired node (first is ruleset, next `find /dev` output)

(1) hide
    path zvol unhide
/dev
/dev/zvol
(2) hide
    path zvol unhide
    path zvol/pool unhide
/dev
/dev/zvol
(3) hide
    path zvol/pool/vms/win2000 unhide
/dev
(4) hide
     path zvol/* unhide
/dev
(5) hide
    path zvol unhide
    path pool unhide
/dev
/dev/zvol
/dev/zvol/pool
(6) hide
    path zvol unhide
    path pool unhide
    path vms unhide
/dev
/dev/zvol
/dev/zvol/pool
/dev/zvol/pool/vms
(7) hide
    path zvol unhide
    path pool unhide
    path vms unhide
    path win2000 unhide
/dev
/dev/zvol
/dev/zvol/pool
/dev/zvol/pool/vms
(8) hide
    path zvol unhide
    path pool unhide
    path vms unhide
    path *win2000 unhide
/dev
/dev/zvol
/dev/zvol/pool
/dev/zvol/pool/vms
/dev/zvol/pool/vms/win2000
(9) hide
    path zvol unhide
    path pool unhide
    path vms/* unhide
    path *win2000 unhide
/dev
/dev/zvol
/dev/zvol/pool

This seems really broken.
First, though man says that path is a glob, and it's used so in /etc/defaults/devfs.rules (add path 'fd/*' unhide) nested directories don't work at all (2,3,4). Specifying them separately works (5,6), but that's not quite good, as rules for different hierarchies may interfere with each other. Also, cases (7,8) is really strange, why do I need * here for a device node?

>How-To-Repeat:
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list