Path: blob/main/sys/contrib/openzfs/lib/libzdb/libzdb.c
48378 views
#include <stdio.h>1#include <unistd.h>2#include <stdlib.h>3#include <ctype.h>4#include <getopt.h>5#include <openssl/evp.h>6#include <sys/zfs_context.h>7#include <sys/spa.h>8#include <sys/spa_impl.h>9#include <sys/dmu.h>10#include <sys/zap.h>11#include <sys/fs/zfs.h>12#include <sys/zfs_znode.h>13#include <sys/zfs_sa.h>14#include <sys/sa.h>15#include <sys/sa_impl.h>16#include <sys/vdev.h>17#include <sys/vdev_impl.h>18#include <sys/metaslab_impl.h>19#include <sys/dmu_objset.h>20#include <sys/dsl_dir.h>21#include <sys/dsl_dataset.h>22#include <sys/dsl_pool.h>23#include <sys/dsl_bookmark.h>24#include <sys/dbuf.h>25#include <sys/zil.h>26#include <sys/zil_impl.h>27#include <sys/stat.h>28#include <sys/resource.h>29#include <sys/dmu_send.h>30#include <sys/dmu_traverse.h>31#include <sys/zio_checksum.h>32#include <sys/zio_compress.h>33#include <sys/zfs_fuid.h>34#include <sys/arc.h>35#include <sys/arc_impl.h>36#include <sys/ddt.h>37#include <sys/zfeature.h>38#include <sys/abd.h>39#include <sys/blkptr.h>40#include <sys/dsl_crypt.h>41#include <sys/dsl_scan.h>42#include <sys/btree.h>43#include <sys/brt.h>44#include <sys/brt_impl.h>45#include <zfs_comutil.h>46#include <sys/zstd/zstd.h>4748#include <libnvpair.h>49#include <libzutil.h>5051#include <libzdb.h>5253const char *54zdb_ot_name(dmu_object_type_t type)55{56if (type < DMU_OT_NUMTYPES)57return (dmu_ot[type].ot_name);58else if ((type & DMU_OT_NEWTYPE) &&59((type & DMU_OT_BYTESWAP_MASK) < DMU_BSWAP_NUMFUNCS))60return (dmu_ot_byteswap[type & DMU_OT_BYTESWAP_MASK].ob_name);61else62return ("UNKNOWN");63}6465int66livelist_compare(const void *larg, const void *rarg)67{68const blkptr_t *l = larg;69const blkptr_t *r = rarg;7071/* Sort them according to dva[0] */72uint64_t l_dva0_vdev, r_dva0_vdev;73l_dva0_vdev = DVA_GET_VDEV(&l->blk_dva[0]);74r_dva0_vdev = DVA_GET_VDEV(&r->blk_dva[0]);75if (l_dva0_vdev < r_dva0_vdev)76return (-1);77else if (l_dva0_vdev > r_dva0_vdev)78return (+1);7980/* if vdevs are equal, sort by offsets. */81uint64_t l_dva0_offset;82uint64_t r_dva0_offset;83l_dva0_offset = DVA_GET_OFFSET(&l->blk_dva[0]);84r_dva0_offset = DVA_GET_OFFSET(&r->blk_dva[0]);85if (l_dva0_offset < r_dva0_offset) {86return (-1);87} else if (l_dva0_offset > r_dva0_offset) {88return (+1);89}9091/*92* Since we're storing blkptrs without cancelling FREE/ALLOC pairs,93* it's possible the offsets are equal. In that case, sort by txg94*/95if (BP_GET_BIRTH(l) < BP_GET_BIRTH(r)) {96return (-1);97} else if (BP_GET_BIRTH(l) > BP_GET_BIRTH(r)) {98return (+1);99}100return (0);101}102103104