Lines Matching full:rx
165 struct xrep_xattr *rx, in xrep_xattr_want_salvage() argument
181 return xfs_parent_valuecheck(rx->sc->mp, value, valuelen); in xrep_xattr_want_salvage()
189 struct xrep_xattr *rx, in xrep_xattr_salvage_key() argument
203 if (xchk_should_terminate(rx->sc, &error)) in xrep_xattr_salvage_key()
213 trace_xrep_xattr_salvage_pptr(rx->sc->ip, flags, name, in xrep_xattr_salvage_key()
222 trace_xrep_xattr_salvage_rec(rx->sc->ip, flags, name, in xrep_xattr_salvage_key()
226 error = xfblob_store(rx->xattr_blobs, &key.name_cookie, name, in xrep_xattr_salvage_key()
231 error = xfblob_store(rx->xattr_blobs, &key.value_cookie, value, in xrep_xattr_salvage_key()
236 error = xfarray_append(rx->xattr_records, &key); in xrep_xattr_salvage_key()
240 rx->attrs_found++; in xrep_xattr_salvage_key()
250 struct xrep_xattr *rx, in xrep_xattr_salvage_sf_attr() argument
254 struct xfs_scrub *sc = rx->sc; in xrep_xattr_salvage_sf_attr()
267 if (!xrep_xattr_want_salvage(rx, sfe->flags, sfe->nameval, in xrep_xattr_salvage_sf_attr()
271 return xrep_xattr_salvage_key(rx, sfe->flags, sfe->nameval, in xrep_xattr_salvage_sf_attr()
281 struct xrep_xattr *rx, in xrep_xattr_salvage_local_attr() argument
287 struct xchk_xattr_buf *ab = rx->sc->buf; in xrep_xattr_salvage_local_attr()
301 if (!xrep_xattr_want_salvage(rx, ent->flags, lentry->nameval, in xrep_xattr_salvage_local_attr()
304 if (!xchk_xattr_set_map(rx->sc, ab->usedmap, nameidx, namesize)) in xrep_xattr_salvage_local_attr()
308 return xrep_xattr_salvage_key(rx, ent->flags, lentry->nameval, in xrep_xattr_salvage_local_attr()
318 struct xrep_xattr *rx, in xrep_xattr_salvage_remote_attr() argument
326 struct xchk_xattr_buf *ab = rx->sc->buf; in xrep_xattr_salvage_remote_attr()
328 .trans = rx->sc->tp, in xrep_xattr_salvage_remote_attr()
329 .dp = rx->sc->ip, in xrep_xattr_salvage_remote_attr()
331 .geo = rx->sc->mp->m_attr_geo, in xrep_xattr_salvage_remote_attr()
332 .owner = rx->sc->ip->i_ino, in xrep_xattr_salvage_remote_attr()
351 !xrep_xattr_want_salvage(rx, ent->flags, rentry->name, in xrep_xattr_salvage_remote_attr()
354 if (!xchk_xattr_set_map(rx->sc, ab->usedmap, nameidx, namesize)) in xrep_xattr_salvage_remote_attr()
361 error = xchk_setup_xattr_buf(rx->sc, args.valuelen); in xrep_xattr_salvage_remote_attr()
377 error = xrep_xattr_salvage_key(rx, ent->flags, rentry->name, in xrep_xattr_salvage_remote_attr()
389 struct xrep_xattr *rx, in xrep_xattr_recover_leaf() argument
393 struct xfs_scrub *sc = rx->sc; in xrep_xattr_recover_leaf()
400 struct xchk_xattr_buf *ab = rx->sc->buf; in xrep_xattr_recover_leaf()
436 error = xrep_xattr_salvage_local_attr(rx, ent, nameidx, in xrep_xattr_recover_leaf()
440 error = xrep_xattr_salvage_remote_attr(rx, ent, nameidx, in xrep_xattr_recover_leaf()
453 struct xrep_xattr *rx) in xrep_xattr_recover_sf() argument
455 struct xfs_scrub *sc = rx->sc; in xrep_xattr_recover_sf()
465 ifp = xfs_ifork_ptr(rx->sc->ip, XFS_ATTR_FORK); in xrep_xattr_recover_sf()
491 error = xrep_xattr_salvage_sf_attr(rx, hdr, sfe); in xrep_xattr_recover_sf()
568 struct xrep_xattr *rx, in xrep_xattr_recover_block() argument
578 error = xrep_xattr_find_buf(rx->sc->mp, fsbno, max_len, true, &bp); in xrep_xattr_recover_block()
582 *actual_len = XFS_BB_TO_FSB(rx->sc->mp, bp->b_length); in xrep_xattr_recover_block()
584 trace_xrep_xattr_recover_leafblock(rx->sc->ip, dabno, in xrep_xattr_recover_block()
593 xfs_attr3_leaf_header_check(bp, rx->sc->ip->i_ino) == NULL) in xrep_xattr_recover_block()
594 error = xrep_xattr_recover_leaf(rx, bp); in xrep_xattr_recover_block()
612 struct xrep_xattr *rx, in xrep_xattr_insert_rec() argument
616 .dp = rx->sc->tempip, in xrep_xattr_insert_rec()
620 .owner = rx->sc->ip->i_ino, in xrep_xattr_insert_rec()
621 .geo = rx->sc->mp->m_attr_geo, in xrep_xattr_insert_rec()
625 struct xchk_xattr_buf *ab = rx->sc->buf; in xrep_xattr_insert_rec()
641 error = xfblob_load(rx->xattr_blobs, key->name_cookie, ab->name, in xrep_xattr_insert_rec()
646 error = xfblob_free(rx->xattr_blobs, key->name_cookie); in xrep_xattr_insert_rec()
650 error = xfblob_load(rx->xattr_blobs, key->value_cookie, args.value, in xrep_xattr_insert_rec()
655 error = xfblob_free(rx->xattr_blobs, key->value_cookie); in xrep_xattr_insert_rec()
662 trace_xrep_xattr_insert_pptr(rx->sc->tempip, key->flags, in xrep_xattr_insert_rec()
667 trace_xrep_xattr_insert_rec(rx->sc->tempip, key->flags, in xrep_xattr_insert_rec()
690 struct xrep_xattr *rx) in xrep_xattr_flush_stashed() argument
714 error = xrep_trans_commit(rx->sc); in xrep_xattr_flush_stashed()
717 xchk_iunlock(rx->sc, XFS_ILOCK_EXCL); in xrep_xattr_flush_stashed()
725 error = xrep_tempfile_iolock_polled(rx->sc); in xrep_xattr_flush_stashed()
730 foreach_xfarray_idx(rx->xattr_records, array_cur) { in xrep_xattr_flush_stashed()
733 error = xfarray_load(rx->xattr_records, array_cur, &key); in xrep_xattr_flush_stashed()
737 error = xrep_xattr_insert_rec(rx, &key); in xrep_xattr_flush_stashed()
743 xfarray_truncate(rx->xattr_records); in xrep_xattr_flush_stashed()
744 xfblob_truncate(rx->xattr_blobs); in xrep_xattr_flush_stashed()
746 xrep_tempfile_iounlock(rx->sc); in xrep_xattr_flush_stashed()
749 error = xchk_trans_alloc(rx->sc, 0); in xrep_xattr_flush_stashed()
752 xchk_ilock(rx->sc, XFS_ILOCK_EXCL); in xrep_xattr_flush_stashed()
759 struct xrep_xattr *rx) in xrep_xattr_want_flush_stashed() argument
763 if (!rx->can_flush) in xrep_xattr_want_flush_stashed()
766 bytes = xfarray_bytes(rx->xattr_records) + in xrep_xattr_want_flush_stashed()
767 xfblob_bytes(rx->xattr_blobs); in xrep_xattr_want_flush_stashed()
777 struct xrep_xattr *rx) in xrep_xattr_saw_pptr_conflict() argument
781 ASSERT(rx->can_flush); in xrep_xattr_saw_pptr_conflict()
783 if (!xfs_has_parent(rx->sc->mp)) in xrep_xattr_saw_pptr_conflict()
786 xfs_assert_ilocked(rx->sc->ip, XFS_ILOCK_EXCL); in xrep_xattr_saw_pptr_conflict()
788 mutex_lock(&rx->lock); in xrep_xattr_saw_pptr_conflict()
789 ret = xfarray_bytes(rx->pptr_recs) > 0; in xrep_xattr_saw_pptr_conflict()
790 mutex_unlock(&rx->lock); in xrep_xattr_saw_pptr_conflict()
803 struct xrep_xattr *rx) in xrep_xattr_full_reset() argument
805 struct xfs_scrub *sc = rx->sc; in xrep_xattr_full_reset()
824 xchk_iunlock(rx->sc, XFS_ILOCK_EXCL); in xrep_xattr_full_reset()
866 mutex_lock(&rx->lock); in xrep_xattr_full_reset()
867 xfarray_truncate(rx->pptr_recs); in xrep_xattr_full_reset()
868 xfblob_truncate(rx->pptr_names); in xrep_xattr_full_reset()
869 mutex_unlock(&rx->lock); in xrep_xattr_full_reset()
871 rx->can_flush = false; in xrep_xattr_full_reset()
872 rx->attrs_found = 0; in xrep_xattr_full_reset()
874 ASSERT(xfarray_bytes(rx->xattr_records) == 0); in xrep_xattr_full_reset()
875 ASSERT(xfblob_bytes(rx->xattr_blobs) == 0); in xrep_xattr_full_reset()
882 struct xrep_xattr *rx) in xrep_xattr_recover() argument
885 struct xfs_scrub *sc = rx->sc; in xrep_xattr_recover()
917 if (xchk_should_terminate(rx->sc, &error)) in xrep_xattr_recover()
922 error = xrep_xattr_recover_block(rx, dabno, in xrep_xattr_recover()
928 if (xrep_xattr_want_flush_stashed(rx)) { in xrep_xattr_recover()
929 error = xrep_xattr_flush_stashed(rx); in xrep_xattr_recover()
933 if (xrep_xattr_saw_pptr_conflict(rx)) { in xrep_xattr_recover()
934 error = xrep_xattr_full_reset(rx); in xrep_xattr_recover()
1062 struct xrep_xattr *rx) in xrep_xattr_salvage_attributes() argument
1064 struct xfs_inode *ip = rx->sc->ip; in xrep_xattr_salvage_attributes()
1068 if (rx->sc->ip->i_af.if_format == XFS_DINODE_FMT_LOCAL) { in xrep_xattr_salvage_attributes()
1069 error = xrep_xattr_recover_sf(rx); in xrep_xattr_salvage_attributes()
1073 return xrep_xattr_flush_stashed(rx); in xrep_xattr_salvage_attributes()
1084 error = xfs_trans_roll(&rx->sc->tp); in xrep_xattr_salvage_attributes()
1088 error = xfs_iread_extents(rx->sc->tp, ip, XFS_ATTR_FORK); in xrep_xattr_salvage_attributes()
1092 error = xrep_xattr_recover(rx); in xrep_xattr_salvage_attributes()
1096 return xrep_xattr_flush_stashed(rx); in xrep_xattr_salvage_attributes()
1106 struct xrep_xattr *rx, in xrep_xattr_replay_pptr_update() argument
1110 struct xfs_scrub *sc = rx->sc; in xrep_xattr_replay_pptr_update()
1120 &pptr->pptr_rec, &rx->pptr_args); in xrep_xattr_replay_pptr_update()
1129 &pptr->pptr_rec, &rx->pptr_args); in xrep_xattr_replay_pptr_update()
1148 struct xrep_xattr *rx) in xrep_xattr_replay_pptr_updates() argument
1153 mutex_lock(&rx->lock); in xrep_xattr_replay_pptr_updates()
1154 foreach_xfarray_idx(rx->pptr_recs, array_cur) { in xrep_xattr_replay_pptr_updates()
1157 error = xfarray_load(rx->pptr_recs, array_cur, &pptr); in xrep_xattr_replay_pptr_updates()
1161 error = xfblob_loadname(rx->pptr_names, pptr.name_cookie, in xrep_xattr_replay_pptr_updates()
1162 &rx->xname, pptr.namelen); in xrep_xattr_replay_pptr_updates()
1165 mutex_unlock(&rx->lock); in xrep_xattr_replay_pptr_updates()
1167 error = xrep_xattr_replay_pptr_update(rx, &rx->xname, &pptr); in xrep_xattr_replay_pptr_updates()
1171 mutex_lock(&rx->lock); in xrep_xattr_replay_pptr_updates()
1175 xfarray_truncate(rx->pptr_recs); in xrep_xattr_replay_pptr_updates()
1176 xfblob_truncate(rx->pptr_names); in xrep_xattr_replay_pptr_updates()
1177 mutex_unlock(&rx->lock); in xrep_xattr_replay_pptr_updates()
1180 mutex_unlock(&rx->lock); in xrep_xattr_replay_pptr_updates()
1190 struct xrep_xattr *rx, in xrep_xattr_stash_parentadd() argument
1200 trace_xrep_xattr_stash_parentadd(rx->sc->tempip, dp, name); in xrep_xattr_stash_parentadd()
1203 error = xfblob_storename(rx->pptr_names, &pptr.name_cookie, name); in xrep_xattr_stash_parentadd()
1207 return xfarray_append(rx->pptr_recs, &pptr); in xrep_xattr_stash_parentadd()
1216 struct xrep_xattr *rx, in xrep_xattr_stash_parentremove() argument
1226 trace_xrep_xattr_stash_parentremove(rx->sc->tempip, dp, name); in xrep_xattr_stash_parentremove()
1229 error = xfblob_storename(rx->pptr_names, &pptr.name_cookie, name); in xrep_xattr_stash_parentremove()
1233 return xfarray_append(rx->pptr_recs, &pptr); in xrep_xattr_stash_parentremove()
1247 struct xrep_xattr *rx; in xrep_xattr_live_dirent_update() local
1251 rx = container_of(nb, struct xrep_xattr, dhook.dirent_hook.nb); in xrep_xattr_live_dirent_update()
1252 sc = rx->sc; in xrep_xattr_live_dirent_update()
1262 mutex_lock(&rx->lock); in xrep_xattr_live_dirent_update()
1264 error = xrep_xattr_stash_parentadd(rx, p->name, p->dp); in xrep_xattr_live_dirent_update()
1266 error = xrep_xattr_stash_parentremove(rx, p->name, p->dp); in xrep_xattr_live_dirent_update()
1268 rx->live_update_aborted = true; in xrep_xattr_live_dirent_update()
1269 mutex_unlock(&rx->lock); in xrep_xattr_live_dirent_update()
1383 struct xrep_xattr *rx) in xrep_xattr_finalize_tempfile() argument
1385 struct xfs_scrub *sc = rx->sc; in xrep_xattr_finalize_tempfile()
1389 return xrep_tempexch_trans_alloc(sc, XFS_ATTR_FORK, &rx->tx); in xrep_xattr_finalize_tempfile()
1398 error = xrep_xattr_replay_pptr_updates(rx); in xrep_xattr_finalize_tempfile()
1402 error = xrep_tempexch_trans_alloc(sc, XFS_ATTR_FORK, &rx->tx); in xrep_xattr_finalize_tempfile()
1406 if (xfarray_length(rx->pptr_recs) == 0) in xrep_xattr_finalize_tempfile()
1421 struct xrep_xattr *rx) in xrep_xattr_rebuild_tree() argument
1423 struct xfs_scrub *sc = rx->sc; in xrep_xattr_rebuild_tree()
1430 if (rx->attrs_found == 0) { in xrep_xattr_rebuild_tree()
1463 error = xrep_tempfile_iolock_polled(rx->sc); in xrep_xattr_rebuild_tree()
1472 error = xrep_xattr_finalize_tempfile(rx); in xrep_xattr_rebuild_tree()
1481 error = xrep_xattr_swap(sc, &rx->tx); in xrep_xattr_rebuild_tree()
1511 struct xrep_xattr *rx) in xrep_xattr_teardown() argument
1513 if (xfs_has_parent(rx->sc->mp)) in xrep_xattr_teardown()
1514 xfs_dir_hook_del(rx->sc->mp, &rx->dhook); in xrep_xattr_teardown()
1515 if (rx->pptr_names) in xrep_xattr_teardown()
1516 xfblob_destroy(rx->pptr_names); in xrep_xattr_teardown()
1517 if (rx->pptr_recs) in xrep_xattr_teardown()
1518 xfarray_destroy(rx->pptr_recs); in xrep_xattr_teardown()
1519 xfblob_destroy(rx->xattr_blobs); in xrep_xattr_teardown()
1520 xfarray_destroy(rx->xattr_records); in xrep_xattr_teardown()
1521 mutex_destroy(&rx->lock); in xrep_xattr_teardown()
1522 kfree(rx); in xrep_xattr_teardown()
1531 struct xrep_xattr *rx; in xrep_xattr_setup_scan() local
1536 rx = kzalloc(sizeof(struct xrep_xattr), XCHK_GFP_FLAGS); in xrep_xattr_setup_scan()
1537 if (!rx) in xrep_xattr_setup_scan()
1539 rx->sc = sc; in xrep_xattr_setup_scan()
1540 rx->can_flush = true; in xrep_xattr_setup_scan()
1541 rx->xname.name = rx->namebuf; in xrep_xattr_setup_scan()
1543 mutex_init(&rx->lock); in xrep_xattr_setup_scan()
1551 error = xchk_setup_xattr_buf(rx->sc, max_len); in xrep_xattr_setup_scan()
1560 &rx->xattr_records); in xrep_xattr_setup_scan()
1566 error = xfblob_create(descr, &rx->xattr_blobs); in xrep_xattr_setup_scan()
1578 &rx->pptr_recs); in xrep_xattr_setup_scan()
1585 error = xfblob_create(descr, &rx->pptr_names); in xrep_xattr_setup_scan()
1590 xfs_dir_hook_setup(&rx->dhook, xrep_xattr_live_dirent_update); in xrep_xattr_setup_scan()
1591 error = xfs_dir_hook_add(sc->mp, &rx->dhook); in xrep_xattr_setup_scan()
1596 *rxp = rx; in xrep_xattr_setup_scan()
1599 xfblob_destroy(rx->pptr_names); in xrep_xattr_setup_scan()
1601 xfarray_destroy(rx->pptr_recs); in xrep_xattr_setup_scan()
1603 xfblob_destroy(rx->xattr_blobs); in xrep_xattr_setup_scan()
1605 xfarray_destroy(rx->xattr_records); in xrep_xattr_setup_scan()
1607 mutex_destroy(&rx->lock); in xrep_xattr_setup_scan()
1608 kfree(rx); in xrep_xattr_setup_scan()
1624 struct xrep_xattr *rx = NULL; in xrep_xattr() local
1637 error = xrep_xattr_setup_scan(sc, &rx); in xrep_xattr()
1643 error = xrep_xattr_salvage_attributes(rx); in xrep_xattr()
1647 if (rx->live_update_aborted) { in xrep_xattr()
1656 error = xrep_xattr_rebuild_tree(rx); in xrep_xattr()
1661 xrep_xattr_teardown(rx); in xrep_xattr()