mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Teach zpool scrub to scrub only blocks in error log
Added a flag '-e' in zpool scrub to scrub only blocks in error log. A user can pause, resume and cancel the error scrub by passing additional command line arguments -p -s just like a regular scrub. This involves adding a new flag, creating new libzfs interfaces, a new ioctl, and the actual iteration and read-issuing logic. Error scrubbing is executed in multiple txg to make sure pool performance is not affected. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Co-authored-by: TulsiJain tulsi.jain@delphix.com Signed-off-by: George Amanakis <gamanakis@gmail.com> Closes #8995 Closes #12355
This commit is contained in:
committed by
Brian Behlendorf
parent
e34e15ed6d
commit
482eeef804
@@ -27,6 +27,7 @@
|
||||
#include <sys/vdev_impl.h>
|
||||
#include <sys/zfs_ioctl.h>
|
||||
#include <sys/zfs_bootenv.h>
|
||||
#include <sys/fs/zfs.h>
|
||||
|
||||
/*
|
||||
* Test the nvpair inputs for the non-legacy zfs ioctl commands.
|
||||
@@ -688,6 +689,17 @@ test_vdev_trim(const char *pool)
|
||||
nvlist_free(required);
|
||||
}
|
||||
|
||||
/* Test with invalid values */
|
||||
static void
|
||||
test_scrub(const char *pool)
|
||||
{
|
||||
nvlist_t *required = fnvlist_alloc();
|
||||
fnvlist_add_uint64(required, "scan_type", POOL_SCAN_FUNCS + 1);
|
||||
fnvlist_add_uint64(required, "scan_command", POOL_SCRUB_FLAGS_END + 1);
|
||||
IOC_INPUT_TEST(ZFS_IOC_POOL_SCRUB, pool, required, NULL, EINVAL);
|
||||
nvlist_free(required);
|
||||
}
|
||||
|
||||
static int
|
||||
zfs_destroy(const char *dataset)
|
||||
{
|
||||
@@ -868,6 +880,8 @@ zfs_ioc_input_tests(const char *pool)
|
||||
test_set_bootenv(pool);
|
||||
test_get_bootenv(pool);
|
||||
|
||||
test_scrub(pool);
|
||||
|
||||
/*
|
||||
* cleanup
|
||||
*/
|
||||
@@ -1022,6 +1036,7 @@ validate_ioc_values(void)
|
||||
CHECK(ZFS_IOC_BASE + 82 == ZFS_IOC_GET_BOOKMARK_PROPS);
|
||||
CHECK(ZFS_IOC_BASE + 83 == ZFS_IOC_WAIT);
|
||||
CHECK(ZFS_IOC_BASE + 84 == ZFS_IOC_WAIT_FS);
|
||||
CHECK(ZFS_IOC_BASE + 87 == ZFS_IOC_POOL_SCRUB);
|
||||
CHECK(ZFS_IOC_PLATFORM_BASE + 1 == ZFS_IOC_EVENTS_NEXT);
|
||||
CHECK(ZFS_IOC_PLATFORM_BASE + 2 == ZFS_IOC_EVENTS_CLEAR);
|
||||
CHECK(ZFS_IOC_PLATFORM_BASE + 3 == ZFS_IOC_EVENTS_SEEK);
|
||||
|
||||
Reference in New Issue
Block a user