Using
http://rainemu.swishparty.co.uk/git/zfs/ master (with some
changes to let compile it, see below) I get a hang of following
command:
while echo -n .; do zpool status >/dev/null; done
This runs a time successfully (a few seconds) and then it hangs (no
more dots). Any command talking to /var/run/zfs/zfs_socket then does
no more work, too, so the socket is dead. Note that my machine is SMP
(two cores). Also note that the zfs filesystem stays online and
accessible, so only the socket serving routine is affected.
Can somebody confirm this or is my problem local only? Thanks.
Diff attached. Notes to the diff:
I changed ZFS_IOC because the numbering of commands might differ
between ZFS versions. So if you try out several zfs versions in
parallel is too dangerous to perhaps invoke the wrong zpool command to
a different running zfs-fuse daemon. I recommend others trying out
different zfs versions in parallel to give each version tested an
unique ZFS_IOC like me, to prevent a wrong zpool to be able to talk to
zfs-fuse successfully.
Also ENOATTR is only present in xfs; Grepping the Internet I got the
impression that the correct errno should be EDOM but I really do not
know. And attr/xattr.h is at sys/xattr.h at my side.
zoo:~/src/zfs/bleedingedge/zfs/src# cat /etc/debian_version
5.0.4
zoo:~/src/zfs/bleedingedge/zfs/src# uname -a
Linux zoo 2.6.26-2-686 #1 SMP Wed Nov 4 20:45:37 UTC 2009 i686 GNU/
Linux
zoo:~/src/zfs/bleedingedge/zfs/src# git diff master
diff --git a/.gitignore b/.gitignore
index ddea9d6..3706540 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,8 @@
*.swp
*.orig
*.sconsign.dblite
+*.lo
+*.la
src/zfs-fuse/zfs-fuse
src/cmd/zdb/zdb
@@ -11,3 +13,18 @@ src/cmd/zfs/zfs
src/cmd/zpool/zpool
src/cmd/ztest/ztest
+/src/cmd/zstreamdump/zstreamdump
+/src/lib/libumem/.deps/
+/src/lib/libumem/.libs/
+/src/lib/libumem/Doxyfile
+/src/lib/libumem/Makefile
+/src/lib/libumem/config.h
+/src/lib/libumem/config.log
+/src/lib/libumem/config.status
+/src/lib/libumem/libtool
+/src/lib/libumem/stamp-h1
+/src/lib/libumem/umem.spec
+/src/lib/libumem/umem_test
+/src/lib/libumem/umem_test2
+/src/lib/libumem/umem_test3
+
diff --git a/src/lib/libzfscommon/include/sys/fs/zfs.h b/src/lib/
libzfscommon/include/sys/fs/zfs.h
index 82cc2c9..08d62d4 100644
--- a/src/lib/libzfscommon/include/sys/fs/zfs.h
+++ b/src/lib/libzfscommon/include/sys/fs/zfs.h
@@ -666,7 +666,7 @@ typedef struct ddt_histogram {
/*
* /dev/zfs ioctl numbers.
*/
-#define ZFS_IOC ('Z' << 8)
+#define ZFS_IOC (('Z'+2) << 8)
typedef enum zfs_ioc {
ZFS_IOC_POOL_CREATE = ZFS_IOC,
diff --git a/src/zfs-fuse/zfs_operations.c b/src/zfs-fuse/
zfs_operations.c
index 260adbb..3448181 100644
--- a/src/zfs-fuse/zfs_operations.c
+++ b/src/zfs-fuse/zfs_operations.c
@@ -34,7 +34,7 @@
#include <sys/zfs_vfsops.h>
#include <sys/zfs_znode.h>
#include <sys/mode.h>
-#include <attr/xattr.h>
+#include <sys/xattr.h>
#include <sys/fcntl.h>
#include <string.h>
@@ -374,7 +374,7 @@ static void zfsfuse_getxattr(fuse_req_t req,
fuse_ino_t ino, const char *name,
vnode_t *new_vp = NULL;
error = VOP_LOOKUP(vp, (char *) name, &new_vp, NULL, 0, NULL,
&cred, NULL, NULL, NULL);
if (error) {
- error = ENOATTR;
+ error = EDOM;
goto out;
}
VN_RELE(vp);
@@ -445,7 +445,7 @@ out:
VN_RELE(dvp);
ZFS_EXIT(zfsvfs);
if (error == ENOENT)
- error = ENOATTR;
+ error = EDOM;
fuse_reply_err(req,error);
}
--
To post to this group, send email to
zfs-...@googlegroups.com
To visit our Web site, click on
http://zfs-fuse.net/