Lines Matching refs:ds

31 	struct xchk_da_btree	*ds,
35 struct xfs_scrub *sc = ds->sc;
52 trace_xchk_file_op_error(sc, ds->dargs.whichfork,
53 xfs_dir2_da_to_db(ds->dargs.geo,
54 ds->state->path.blk[level].blkno),
67 struct xchk_da_btree *ds,
70 struct xfs_scrub *sc = ds->sc;
74 trace_xchk_fblock_error(sc, ds->dargs.whichfork,
75 xfs_dir2_da_to_db(ds->dargs.geo,
76 ds->state->path.blk[level].blkno),
82 struct xchk_da_btree *ds,
85 struct xfs_da_state_blk *blk = &ds->state->path.blk[level];
90 xfs_da3_node_hdr_from_disk(ds->sc->mp, &hdr, blk->bp->b_addr);
97 struct xchk_da_btree *ds,
107 if (hash < ds->hashes[level])
108 xchk_da_set_corrupt(ds, level);
109 ds->hashes[level] = hash;
115 entry = xchk_da_btree_node_entry(ds, level - 1);
118 xchk_da_set_corrupt(ds, level);
129 struct xchk_da_btree *ds,
133 if (blkno < ds->lowest || (ds->highest != 0 && blkno >= ds->highest)) {
134 xchk_da_set_corrupt(ds, level);
217 struct xchk_da_btree *ds,
222 struct xfs_da_state_path *path = &ds->state->path;
223 struct xfs_da_state_path *altpath = &ds->state->altpath;
228 memcpy(altpath, path, sizeof(ds->state->altpath));
235 error = xfs_da3_path_shift(ds->state, altpath, direction,
238 xchk_da_set_corrupt(ds, level);
244 error = xfs_da3_path_shift(ds->state, altpath, direction, false,
246 if (!xchk_da_process_error(ds, level, &error))
249 xchk_da_set_corrupt(ds, level);
253 xchk_buffer_recheck(ds->sc, altpath->blk[level].bp);
257 xchk_da_set_corrupt(ds, level);
267 xfs_trans_brelse(ds->dargs.trans, altpath->blk[plevel].bp);
277 struct xchk_da_btree *ds,
291 xchk_da_set_corrupt(ds, level);
299 error = xchk_da_btree_block_check_sibling(ds, level, 0, back);
302 error = xchk_da_btree_block_check_sibling(ds, level, 1, forw);
305 memset(&ds->state->altpath, 0, sizeof(ds->state->altpath));
312 struct xchk_da_btree *ds,
320 struct xfs_da_args *dargs = &ds->dargs;
321 struct xfs_inode *ip = ds->dargs.dp;
327 blk = &ds->state->path.blk[level];
328 ds->state->path.active = level + 1;
338 if (!xchk_da_btree_ptr_ok(ds, level, blkno))
345 if (!xchk_da_process_error(ds, level, &error))
348 xchk_buffer_recheck(ds->sc, blk->bp);
355 if (ds->dargs.whichfork == XFS_DATA_FORK && level == 0 &&
361 xchk_da_set_corrupt(ds, level);
367 pmaxrecs = &ds->maxrecs[level];
370 if (xfs_sb_version_hascrc(&ds->sc->mp->m_sb) && hdr3->hdr.pad)
371 xchk_da_set_corrupt(ds, level);
377 xchk_da_set_corrupt(ds, level);
381 error = xchk_da_btree_block_check_siblings(ds, level, &hdr3->hdr);
393 if (ds->tree_level != 0)
394 xchk_da_set_corrupt(ds, level);
402 if (ds->tree_level != 0)
403 xchk_da_set_corrupt(ds, level);
411 if (ds->tree_level != 0)
412 xchk_da_set_corrupt(ds, level);
426 xchk_da_set_corrupt(ds, level);
429 ds->tree_level = nodehdr.level;
431 if (ds->tree_level != nodehdr.level) {
432 xchk_da_set_corrupt(ds, level);
440 xchk_da_set_corrupt(ds, level);
451 key = xchk_da_btree_node_entry(ds, level - 1);
453 xchk_da_set_corrupt(ds, level);
476 struct xchk_da_btree ds = {};
489 ds.dargs.dp = sc->ip;
490 ds.dargs.whichfork = whichfork;
491 ds.dargs.trans = sc->tp;
492 ds.dargs.op_flags = XFS_DA_OP_OKNOENT;
493 ds.state = xfs_da_state_alloc(&ds.dargs);
494 ds.sc = sc;
495 ds.private = private;
497 ds.dargs.geo = mp->m_attr_geo;
498 ds.lowest = 0;
499 ds.highest = 0;
501 ds.dargs.geo = mp->m_dir_geo;
502 ds.lowest = ds.dargs.geo->leafblk;
503 ds.highest = ds.dargs.geo->freeblk;
505 blkno = ds.lowest;
509 blks = ds.state->path.blk;
510 error = xchk_da_btree_block(&ds, level, blkno);
514 * We didn't find a block at ds.lowest, which means that there's
526 if (blks[level].index >= ds.maxrecs[level]) {
529 ds.tree_level++;
535 error = scrub_fn(&ds, level);
548 if (blks[level].index >= ds.maxrecs[level]) {
551 ds.tree_level++;
557 key = xchk_da_btree_node_entry(&ds, level);
558 error = xchk_da_btree_hash(&ds, level, &key->hashval);
567 xchk_da_set_corrupt(&ds, level - 1);
570 ds.tree_level--;
571 error = xchk_da_btree_block(&ds, level, blkno);
590 xfs_da_state_free(ds.state);