]> git.proxmox.com Git - mirror_zfs.git/blobdiff - cmd/zdb/zdb_il.c
Implementation of block cloning for ZFS
[mirror_zfs.git] / cmd / zdb / zdb_il.c
index 55df1f559f6e218378de3132e65b52b19175e5c9..970c45c9b3bbe979e4b1dd2ec50cc645a639b68e 100644 (file)
@@ -307,6 +307,23 @@ zil_prt_rec_acl(zilog_t *zilog, int txtype, const void *arg)
            (u_longlong_t)lr->lr_foid, (u_longlong_t)lr->lr_aclcnt);
 }
 
+static void
+zil_prt_rec_clone_range(zilog_t *zilog, int txtype, const void *arg)
+{
+       (void) zilog, (void) txtype;
+       const lr_clone_range_t *lr = arg;
+
+       (void) printf("%sfoid %llu, offset %llx, length %llx, blksize %llx\n",
+           tab_prefix, (u_longlong_t)lr->lr_foid, (u_longlong_t)lr->lr_offset,
+           (u_longlong_t)lr->lr_length, (u_longlong_t)lr->lr_blksz);
+
+       for (unsigned int i = 0; i < lr->lr_nbps; i++) {
+               (void) printf("%s[%u/%llu] ", tab_prefix, i + 1,
+                   (u_longlong_t)lr->lr_nbps);
+               print_log_bp(&lr->lr_bps[i], "");
+       }
+}
+
 typedef void (*zil_prt_rec_func_t)(zilog_t *, int, const void *);
 typedef struct zil_rec_info {
        zil_prt_rec_func_t      zri_print;
@@ -340,6 +357,8 @@ static zil_rec_info_t zil_rec_info[TX_MAX_TYPE] = {
            .zri_name = "TX_SETSAXATTR      "},
        {.zri_print = zil_prt_rec_rename,   .zri_name = "TX_RENAME_EXCHANGE "},
        {.zri_print = zil_prt_rec_rename,   .zri_name = "TX_RENAME_WHITEOUT "},
+       {.zri_print = zil_prt_rec_clone_range,
+           .zri_name = "TX_CLONE_RANGE     "},
 };
 
 static int