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.
This commit is contained in:
commit
1869edb5bc
7 changed files with 879 additions and 315 deletions
42
ChangeLog
42
ChangeLog
|
@ -1,3 +1,45 @@
|
||||||
|
2011-10-26 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
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 <phcoder@gmail.com>
|
2011-10-26 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* include/grub/datetime.h (grub_datetime2unixtime): Fix off-by-one
|
* include/grub/datetime.h (grub_datetime2unixtime): Fix off-by-one
|
||||||
|
|
|
@ -84,6 +84,7 @@ library = {
|
||||||
common = grub-core/fs/ufs.c;
|
common = grub-core/fs/ufs.c;
|
||||||
common = grub-core/fs/xfs.c;
|
common = grub-core/fs/xfs.c;
|
||||||
common = grub-core/fs/zfs/zfs.c;
|
common = grub-core/fs/zfs/zfs.c;
|
||||||
|
common = grub-core/fs/zfs/zfsinfo.c;
|
||||||
common = grub-core/fs/zfs/zfs_lzjb.c;
|
common = grub-core/fs/zfs/zfs_lzjb.c;
|
||||||
common = grub-core/fs/zfs/zfs_sha256.c;
|
common = grub-core/fs/zfs/zfs_sha256.c;
|
||||||
common = grub-core/fs/zfs/zfs_fletcher.c;
|
common = grub-core/fs/zfs/zfs_fletcher.c;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -141,7 +141,6 @@ print_vdev_info (char *nvlist, int tab)
|
||||||
}
|
}
|
||||||
grub_printf ("Mirror VDEV with %d children\n", nelm);
|
grub_printf ("Mirror VDEV with %d children\n", nelm);
|
||||||
print_state (nvlist, tab);
|
print_state (nvlist, tab);
|
||||||
|
|
||||||
for (i = 0; i < nelm; i++)
|
for (i = 0; i < nelm; i++)
|
||||||
{
|
{
|
||||||
char *child;
|
char *child;
|
||||||
|
@ -161,6 +160,7 @@ print_vdev_info (char *nvlist, int tab)
|
||||||
|
|
||||||
grub_free (child);
|
grub_free (child);
|
||||||
}
|
}
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
print_tabs (tab);
|
print_tabs (tab);
|
||||||
|
|
|
@ -29,6 +29,9 @@ typedef struct sa_hdr_phys {
|
||||||
} sa_hdr_phys_t;
|
} sa_hdr_phys_t;
|
||||||
|
|
||||||
#define SA_HDR_SIZE(hdr) BF32_GET_SB(hdr->sa_layout_info, 10, 16, 3, 0)
|
#define SA_HDR_SIZE(hdr) BF32_GET_SB(hdr->sa_layout_info, 10, 16, 3, 0)
|
||||||
|
#define SA_TYPE_OFFSET 0x0
|
||||||
#define SA_SIZE_OFFSET 0x8
|
#define SA_SIZE_OFFSET 0x8
|
||||||
|
#define SA_MTIME_OFFSET 0x38
|
||||||
|
#define SA_SYMLINK_OFFSET 0xa0
|
||||||
|
|
||||||
#endif /* _SYS_SA_IMPL_H */
|
#endif /* _SYS_SA_IMPL_H */
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
/*
|
/*
|
||||||
* On-disk version number.
|
* On-disk version number.
|
||||||
*/
|
*/
|
||||||
#define SPA_VERSION 28ULL
|
#define SPA_VERSION 33ULL
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following are configuration names used in the nvlist describing a pool's
|
* The following are configuration names used in the nvlist describing a pool's
|
||||||
|
@ -112,12 +112,14 @@ grub_err_t grub_zfs_fetch_nvlist (grub_device_t dev, char **nvlist);
|
||||||
grub_err_t grub_zfs_getmdnobj (grub_device_t dev, const char *fsfilename,
|
grub_err_t grub_zfs_getmdnobj (grub_device_t dev, const char *fsfilename,
|
||||||
grub_uint64_t *mdnobj);
|
grub_uint64_t *mdnobj);
|
||||||
|
|
||||||
char *grub_zfs_nvlist_lookup_string (char *nvlist, char *name);
|
char *grub_zfs_nvlist_lookup_string (const char *nvlist, const char *name);
|
||||||
char *grub_zfs_nvlist_lookup_nvlist (char *nvlist, char *name);
|
char *grub_zfs_nvlist_lookup_nvlist (const char *nvlist, const char *name);
|
||||||
int grub_zfs_nvlist_lookup_uint64 (char *nvlist, char *name,
|
int grub_zfs_nvlist_lookup_uint64 (const char *nvlist, const char *name,
|
||||||
grub_uint64_t *out);
|
grub_uint64_t *out);
|
||||||
char *grub_zfs_nvlist_lookup_nvlist_array (char *nvlist, char *name,
|
char *grub_zfs_nvlist_lookup_nvlist_array (const char *nvlist,
|
||||||
|
const char *name,
|
||||||
grub_size_t index);
|
grub_size_t index);
|
||||||
int grub_zfs_nvlist_lookup_nvlist_array_get_nelm (char *nvlist, char *name);
|
int grub_zfs_nvlist_lookup_nvlist_array_get_nelm (const char *nvlist,
|
||||||
|
const char *name);
|
||||||
|
|
||||||
#endif /* ! GRUB_ZFS_HEADER */
|
#endif /* ! GRUB_ZFS_HEADER */
|
||||||
|
|
|
@ -62,9 +62,9 @@ enum {
|
||||||
CMD_HEX,
|
CMD_HEX,
|
||||||
CMD_CRC,
|
CMD_CRC,
|
||||||
CMD_BLOCKLIST,
|
CMD_BLOCKLIST,
|
||||||
CMD_TESTLOAD
|
CMD_TESTLOAD,
|
||||||
|
CMD_ZFSINFO
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BUF_SIZE 32256
|
#define BUF_SIZE 32256
|
||||||
|
|
||||||
static grub_disk_addr_t skip, leng;
|
static grub_disk_addr_t skip, leng;
|
||||||
|
@ -354,6 +354,9 @@ fstest (int n, char **args)
|
||||||
case CMD_LS:
|
case CMD_LS:
|
||||||
execute_command ("ls", n, args);
|
execute_command ("ls", n, args);
|
||||||
break;
|
break;
|
||||||
|
case CMD_ZFSINFO:
|
||||||
|
execute_command ("zfsinfo", n, args);
|
||||||
|
break;
|
||||||
case CMD_CP:
|
case CMD_CP:
|
||||||
cmd_cp (args[0], args[1]);
|
cmd_cp (args[0], args[1]);
|
||||||
break;
|
break;
|
||||||
|
@ -516,6 +519,10 @@ argp_parser (int key, char *arg, struct argp_state *state)
|
||||||
{
|
{
|
||||||
cmd = CMD_LS;
|
cmd = CMD_LS;
|
||||||
}
|
}
|
||||||
|
else if (!grub_strcmp (arg, "zfsinfo"))
|
||||||
|
{
|
||||||
|
cmd = CMD_ZFSINFO;
|
||||||
|
}
|
||||||
else if (!grub_strcmp (arg, "cp"))
|
else if (!grub_strcmp (arg, "cp"))
|
||||||
{
|
{
|
||||||
cmd = CMD_CP;
|
cmd = CMD_CP;
|
||||||
|
|
Loading…
Reference in a new issue