Bug#780308: zfs-fuse: zfs list -t snapshot missing entries
Package: zfs-fuse Version: 0.7.0-12 Severity: important Tags: upstream patch Dear Maintainer, I see exactly the behavior described in https://groups.google.com/forum/#!topic/zfs-fuse/-BtjGFUPOyk: Removing the com.sun:auto-snapshot-desc property as descibed in the command by user hornowitz did not help for me, though. # zfs list -r -t snapshot -H zpool | wc -l 504 # zdb -d zpool | grep ^Dataset .*@ | wc -l 913 I can list any property of the missing snapshots if I name the snapshot on the command line, it exists but is just missing in the output of zfs list -t snapshot fs. After some debugging, I found the root cause in src/lib/libzfs/libzfs_dataset.c: 2425 static int 2426 zfs_do_list_ioctl(zfs_handle_t *zhp, int arg, zfs_cmd_t *zc) 2427 { 2428 int rc; 2429 uint64_torig_cookie; 2430 2431 orig_cookie = zc-zc_cookie; 2432 top: 2433 (void) strlcpy(zc-zc_name, zhp-zfs_name, sizeof (zc-zc_name)); 2434 rc = ioctl(zhp-zfs_hdl-libzfs_fd, arg, zc); 2435 2436 if (rc == -1) { 2437 switch (errno) { 2438 case ENOMEM: 2439 /* expand nvlist memory and try again */ 2440 if (zcmd_expand_dst_nvlist(zhp-zfs_hdl, zc) != 0) { 2441 zcmd_free_nvlists(zc); 2442 return (-1); 2443 } This code assumes ioctl() returns either 0 or -1, but I'm occasionally getting 12 (=ENOMEM) here. After changing the condition in line 2436 to just if (rc) and recompiling the zfs command the output of zfs list -r -t snapshot matches the output of zdb. Kind regards, Michael -- System Information: Debian Release: 7.8 APT prefers stable APT policy: (500, 'stable') Architecture: armhf (armv7l) Kernel: Linux 3.4.104+ (SMP w/2 CPU cores; PREEMPT) Locale: LANG=C, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages zfs-fuse depends on: ii fuse 2.9.0-2+deb7u1 ii libaio1 0.3.109-3 ii libc62.13-38+deb7u8 ii libfuse2 2.9.0-2+deb7u1 ii libgcc1 1:4.7.2-5 ii libssl1.0.0 1.0.1e-2+deb7u14 ii lsb-base 4.1+Debian8+deb7u1 ii zlib1g 1:1.2.7.dfsg-13 zfs-fuse recommends no packages. Versions of packages zfs-fuse suggests: pn kpartx none ii nfs-kernel-server 1:1.2.6-4 -- Configuration Files: /etc/zfs/zfsrc changed [not included] -- no debconf information --- ./src/lib/libzfs/libzfs_dataset.c.orig 2015-03-11 21:36:13.0 +0100 +++ ./src/lib/libzfs/libzfs_dataset.c 2015-03-11 21:36:24.0 +0100 @@ -2433,7 +2433,7 @@ (void) strlcpy(zc-zc_name, zhp-zfs_name, sizeof (zc-zc_name)); rc = ioctl(zhp-zfs_hdl-libzfs_fd, arg, zc); -if (rc == -1) { +if (rc) { switch (errno) { case ENOMEM: /* expand nvlist memory and try again */
Bug#780308: zfs-fuse: zfs list -t snapshot missing entries
Hello Michael, Thanks for this. I will include the patch in next release. On Thu, Mar 12, 2015 at 4:56 AM, Michael Klein michael.kl...@puffin.lb.shuttle.de wrote: Package: zfs-fuse Version: 0.7.0-12 Severity: important Tags: upstream patch Dear Maintainer, I see exactly the behavior described in https://groups.google.com/forum/#!topic/zfs-fuse/-BtjGFUPOyk: Removing the com.sun:auto-snapshot-desc property as descibed in the command by user hornowitz did not help for me, though. # zfs list -r -t snapshot -H zpool | wc -l 504 # zdb -d zpool | grep ^Dataset .*@ | wc -l 913 I can list any property of the missing snapshots if I name the snapshot on the command line, it exists but is just missing in the output of zfs list -t snapshot fs. After some debugging, I found the root cause in src/lib/libzfs/libzfs_dataset.c: 2425 static int 2426 zfs_do_list_ioctl(zfs_handle_t *zhp, int arg, zfs_cmd_t *zc) 2427 { 2428 int rc; 2429 uint64_torig_cookie; 2430 2431 orig_cookie = zc-zc_cookie; 2432 top: 2433 (void) strlcpy(zc-zc_name, zhp-zfs_name, sizeof (zc-zc_name)); 2434 rc = ioctl(zhp-zfs_hdl-libzfs_fd, arg, zc); 2435 2436 if (rc == -1) { 2437 switch (errno) { 2438 case ENOMEM: 2439 /* expand nvlist memory and try again */ 2440 if (zcmd_expand_dst_nvlist(zhp-zfs_hdl, zc) != 0) { 2441 zcmd_free_nvlists(zc); 2442 return (-1); 2443 } This code assumes ioctl() returns either 0 or -1, but I'm occasionally getting 12 (=ENOMEM) here. After changing the condition in line 2436 to just if (rc) and recompiling the zfs command the output of zfs list -r -t snapshot matches the output of zdb. Kind regards, Michael -- System Information: Debian Release: 7.8 APT prefers stable APT policy: (500, 'stable') Architecture: armhf (armv7l) Kernel: Linux 3.4.104+ (SMP w/2 CPU cores; PREEMPT) Locale: LANG=C, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages zfs-fuse depends on: ii fuse 2.9.0-2+deb7u1 ii libaio1 0.3.109-3 ii libc62.13-38+deb7u8 ii libfuse2 2.9.0-2+deb7u1 ii libgcc1 1:4.7.2-5 ii libssl1.0.0 1.0.1e-2+deb7u14 ii lsb-base 4.1+Debian8+deb7u1 ii zlib1g 1:1.2.7.dfsg-13 zfs-fuse recommends no packages. Versions of packages zfs-fuse suggests: pn kpartx none ii nfs-kernel-server 1:1.2.6-4 -- Configuration Files: /etc/zfs/zfsrc changed [not included] -- no debconf information -- Asias -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org