From: Vladimir 'phcoder' Serbinenko Date: Thu, 27 Oct 2011 00:49:50 +0000 (+0200) Subject: ZFS multi-device and version 33 support. X-Git-Tag: 2.00~1054 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1869edb5bc15813773ed42562d703a4f8cca76d3;p=thirdparty%2Fgrub.git ZFS multi-device and version 33 support. * Makefile.util.def (libgrubkern): Add grub-core/fs/zfs/zfsinfo.c. * grub-core/fs/zfs/zfs.c (grub_zfs_device_desc): New struct. (grub_zfs_data): Add multidev-ice-related fields. (zio_checksum_verify): Zero-pad printed values. Print checksum name. (dva_get_offset): Make dva const. (zfs_fetch_nvlist): New function. (fill_vdev_info_real): Likewise. (fill_vdev_info): Likewise. (check_pool_label): Likewise. (scan_disk): Likewise. (scan_devices): Likewise. (read_device): Likewise. (read_dva): Likewise. (zio_read_gang): Use read_dva. (zio_read_data): Likewise. (zap_leaf_lookup): Add missing endian conversion. (zap_verify): Add missing endian conversion. All users updated. (fzap_lookup): Likewise. (fzap_iterate): Likewise. (dnode_get_path): Handle SA bonus. (nvlist_find_value): Make input const. All users updated. (unmount_device): New function. (zfs_unmount): Use unmount_device. (zfs_mount): Use scan_disk. (zfs_mtime): New function. (grub_zfs_open): Handle system attributes. (fill_fs_info): Likewise. (grub_zfs_dir): Likewise. (grub_zfs_fs): Add mtime. * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Add missing return. * include/grub/zfs/sa_impl.h (SA_TYPE_OFFSET): New definition. (SA_MTIME_OFFSET): Likewise. (SA_SYMLINK_OFFSET): Likewise. * include/grub/zfs/zfs.h (SPA_VERSION): Increase to 33. * util/grub-fstest.c (CMD_ZFSINFO): New enum value. (fstest): Support zfsinfo. (argp_parser): Likewise. --- 1869edb5bc15813773ed42562d703a4f8cca76d3 diff --cc ChangeLog index 084131202,9787d8f9e..1abd5daa2 --- a/ChangeLog +++ b/ChangeLog @@@ -1,9 -1,4 +1,51 @@@ -2011-10-25 Vladimir Serbinenko ++2011-10-26 Vladimir Serbinenko ++ ++ ZFS multi-device and version 33 support. ++ ++ * Makefile.util.def (libgrubkern): Add grub-core/fs/zfs/zfsinfo.c. ++ * grub-core/fs/zfs/zfs.c (grub_zfs_device_desc): New struct. ++ (grub_zfs_data): Add multidev-ice-related fields. ++ (zio_checksum_verify): Zero-pad printed values. Print checksum name. ++ (dva_get_offset): Make dva const. ++ (zfs_fetch_nvlist): New function. ++ (fill_vdev_info_real): Likewise. ++ (fill_vdev_info): Likewise. ++ (check_pool_label): Likewise. ++ (scan_disk): Likewise. ++ (scan_devices): Likewise. ++ (read_device): Likewise. ++ (read_dva): Likewise. ++ (zio_read_gang): Use read_dva. ++ (zio_read_data): Likewise. ++ (zap_leaf_lookup): Add missing endian conversion. ++ (zap_verify): Add missing endian conversion. All users updated. ++ (fzap_lookup): Likewise. ++ (fzap_iterate): Likewise. ++ (dnode_get_path): Handle SA bonus. ++ (nvlist_find_value): Make input const. All users updated. ++ (unmount_device): New function. ++ (zfs_unmount): Use unmount_device. ++ (zfs_mount): Use scan_disk. ++ (zfs_mtime): New function. ++ (grub_zfs_open): Handle system attributes. ++ (fill_fs_info): Likewise. ++ (grub_zfs_dir): Likewise. ++ (grub_zfs_fs): Add mtime. ++ * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Add missing return. ++ * include/grub/zfs/sa_impl.h (SA_TYPE_OFFSET): New definition. ++ (SA_MTIME_OFFSET): Likewise. ++ (SA_SYMLINK_OFFSET): Likewise. ++ * include/grub/zfs/zfs.h (SPA_VERSION): Increase to 33. ++ * util/grub-fstest.c (CMD_ZFSINFO): New enum value. ++ (fstest): Support zfsinfo. ++ (argp_parser): Likewise. ++ +2011-10-26 Vladimir Serbinenko + + * include/grub/datetime.h (grub_datetime2unixtime): Fix off-by-one + error. + +2011-10-26 Vladimir Serbinenko ZFS fixes. diff --cc grub-core/fs/zfs/zfs.c index 6721cddc1,b4deba5c0..3253457c7 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@@ -966,10 -1483,11 +1483,12 @@@ fzap_iterate (dnode_end_t * zap_dnode, } for (idx = 0; idx < (1ULL << zap->zap_ptrtbl.zt_shift); idx++) { - blkid = ((grub_uint64_t *) zap)[idx + (1 << (blksft - 3 - 1))]; + blkid = grub_zfs_to_cpu64 (((grub_uint64_t *) zap)[idx + (1 << (blksft - 3 - 1))], + zap_dnode->endian); for (idx2 = 0; idx2 < idx; idx2++) -- if (blkid == ((grub_uint64_t *) zap)[idx2 + (1 << (blksft - 3 - 1))]) ++ if (blkid == grub_zfs_to_cpu64 (((grub_uint64_t *) zap)[idx2 + (1 << (blksft - 3 - 1))], ++ zap_dnode->endian)) break; if (idx2 != idx) continue;