Provide a rc.d script for archlinux
[zfs.git] / etc / init.d / zfs.gentoo
index 1d8ece2..f709ed9 100644 (file)
@@ -5,21 +5,19 @@
 
 depend()
 {
-       before net
-       after udev
+       # bootmisc will log to /var which may be a different zfs than root.
+       before net bootmisc
+       after udev localmount
        keyword -lxc -openvz -prefix -vserver
 }
 
 CACHEFILE=/etc/zfs/zpool.cache
-ZPOOL=/usr/sbin/zpool
-ZFS=/usr/sbin/zfs
+ZPOOL=/sbin/zpool
+ZFS=/sbin/zfs
 ZFS_MODULE=zfs
 
 checksystem() {
-       if [ -c /dev/zfs ]; then
-               einfo "ZFS modules already loaded"
-               return 0
-       else
+       if [ ! -c /dev/zfs ]; then
                einfo "Checking if ZFS modules present"
                if [ "x$(modprobe -l  $ZFS_MODULE | grep $ZFS_MODULE)" == "x" ]; then
                        eerror "$ZFS_MODULE not found. Is the ZFS package installed?"
@@ -41,6 +39,10 @@ checksystem() {
 start() {
        ebegin "Starting ZFS"
        checksystem || return 1
+
+       # Delay until all required block devices are present.
+       udevadm settle
+
        if [ ! -c /dev/zfs ]; then
                modprobe $ZFS_MODULE
                rv=$?
@@ -75,16 +77,14 @@ start() {
                return $rv
        fi
 
-       # hack to read mounted file systems because otherwise
-       # zfs returns EPERM when a non-root user reads a mounted filesystem before root did
-       savepwd="$PWD"
-       mount | grep " type zfs " | sed 's/.*on //' | sed 's/ type zfs.*$//' | \
-       while read line
-       do
-               cd "$line" &> /dev/null
-               ls &> /dev/null
-       done
-       cd "$savepwd"
+       einfo "Exporting ZFS filesystems"
+       $ZFS share -a
+       rv=$?
+       if [ $rv -ne 0 ]; then
+               eerror "Failed to export ZFS filesystems."
+               eend $rv
+               return $rv
+       fi
 
        eend 0
        return 0
@@ -96,10 +96,12 @@ stop()
        $ZFS umount -a
        rv=$?
        if [ $rv -ne 0 ]; then
-               eerror "Failed to umount ZFS filesystems."
+               einfo "Some ZFS filesystems not unmounted"
        fi
 
-       eend $rv
+       # Don't fail if we couldn't umount everything.  /usr might be in use.
+       eend 0
+       return 0
 }
 
 status()