Hello,

I'm running Solaris Express build 27a on an amd64 machine and
fuser(1M) isn't behaving
as I would expect for zfs filesystems.  Various google and
opensolaris.org searches didn't
turn up anything on the subject, so I thought I'd ask the experts. 
The specific problem is
that "fuser -c /some_zfs_filesystem" reports nothing when I think it
should be reporting at
least one PID with the t or c and m codes.

Some system info:

 #uname -a ; isainfo -kv ; isainfo -nv
 SunOS video.wossname.net 5.11 snv_27 i86pc i386 i86pc
 64-bit amd64 kernel modules
 64-bit amd64 applications
         sse2 sse fxsr amd_3dnowx amd_3dnow amd_mmx mmx cmov amd_sysc cx8 tsc
         fpu

ZFS info.  We're interested in /opt here.

 #zpool list
 NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
 tank                   52.5G   3.62G   48.9G     6%  ONLINE     -
 #zfs list
 NAME                   USED  AVAIL  REFER  MOUNTPOINT
 tank                  3.62G  48.5G     8K  /tank
 tank/home             2.43G  48.5G  2.43G  /export/home
 tank/opt              1009M  48.5G  1009M  /opt
 tank/ora00               8K  48.5G     8K  /ora00
 tank/ora01               8K  48.5G     8K  /ora01
 tank/pkg              6.45M  48.5G  6.45M  /usr/pkg
 tank/pkgsrc            199M  48.5G   199M  /usr/pkgsrc

Running two very similar things from different filesystems:
 #pgrep -lf info
 20412 /opt/csw/bin/info
 20617 /usr/sfw/bin/info

 #pgrep -lf info | cut -d' ' -f 2 | xargs ldd
 /opt/csw/bin/info:
         libncurses.so.5 =>       /opt/csw/lib/libncurses.so.5
         libintl.so.3 =>  /opt/csw/lib/libintl.so.3
         libiconv.so.2 =>         /opt/csw/lib/libiconv.so.2
         libc.so.1 =>     /lib/libc.so.1
         libm.so.2 =>     /lib/libm.so.2
 /usr/sfw/bin/info:
         libcurses.so.1 =>        /lib/libcurses.so.1
         libc.so.1 =>     /lib/libc.so.1
         libm.so.2 =>     /lib/libm.so.2

/usr/sfw/bin is on ufs, /opt/csw/bin  on zfs:

 #mount -p | egrep $(df -k /opt/csw/bin/info /usr/sfw/bin/info |\
      /usr/xpg4/bin/awk '/\//{d[++c]=$1}END{printf("(");\
      for(i=1;i<=c;i++)printf("%s%s",d[i],(i<c?"|":")\n"));}')

 /dev/dsk/c1d0s0 - / ufs - no rw,intr,largefiles,logging,xattr,onerror=panic
 tank/opt - /opt zfs - no rw,devices,setuid,exec,atime

So, I expect that "fuser -c" should show PID 20617 and 20412 for / and
20412 for /opt.
However:

 #fuser -c /
 /:    [lots of other PIDs] 20617tm [others] 20412cm [others]
 #fuser -c /opt
 /opt:
 #

Nothing at all for /opt.  So it's safe to unmount? Nope:

 #umount /opt
 cannot unmount '/opt': Device busy
 #zfs umount /opt
 cannot unmount '/opt': Device busy
 #kill 20412
 #zfs umount /opt
 #

Has anyone else seen something like this?

Thank you,

-Ben
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://opensolaris.org/mailman/listinfo/zfs-discuss


-- 
This message posted from opensolaris.org
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to