Lines Matching full:rp

189 	struct xrep_parent	*rp)  in xrep_parent_teardown()  argument
191 xrep_findparent_scan_teardown(&rp->pscan); in xrep_parent_teardown()
192 kvfree(rp->xattr_name); in xrep_parent_teardown()
193 rp->xattr_name = NULL; in xrep_parent_teardown()
194 kvfree(rp->xattr_value); in xrep_parent_teardown()
195 rp->xattr_value = NULL; in xrep_parent_teardown()
196 if (rp->xattr_blobs) in xrep_parent_teardown()
197 xfblob_destroy(rp->xattr_blobs); in xrep_parent_teardown()
198 rp->xattr_blobs = NULL; in xrep_parent_teardown()
199 if (rp->xattr_records) in xrep_parent_teardown()
200 xfarray_destroy(rp->xattr_records); in xrep_parent_teardown()
201 rp->xattr_records = NULL; in xrep_parent_teardown()
202 if (rp->pptr_names) in xrep_parent_teardown()
203 xfblob_destroy(rp->pptr_names); in xrep_parent_teardown()
204 rp->pptr_names = NULL; in xrep_parent_teardown()
205 if (rp->pptr_recs) in xrep_parent_teardown()
206 xfarray_destroy(rp->pptr_recs); in xrep_parent_teardown()
207 rp->pptr_recs = NULL; in xrep_parent_teardown()
215 struct xrep_parent *rp; in xrep_setup_parent() local
220 rp = kvzalloc(sizeof(struct xrep_parent), XCHK_GFP_FLAGS); in xrep_setup_parent()
221 if (!rp) in xrep_setup_parent()
223 rp->sc = sc; in xrep_setup_parent()
224 rp->xname.name = rp->namebuf; in xrep_setup_parent()
225 sc->buf = rp; in xrep_setup_parent()
240 struct xrep_parent *rp) in xrep_parent_find_dotdot() argument
242 struct xfs_scrub *sc = rp->sc; in xrep_parent_find_dotdot()
257 xrep_findparent_scan_finish_early(&rp->pscan, ino); in xrep_parent_find_dotdot()
273 xrep_findparent_scan_finish_early(&rp->pscan, ino); in xrep_parent_find_dotdot()
279 error = xrep_findparent_scan(&rp->pscan); in xrep_parent_find_dotdot()
293 struct xrep_parent *rp, in xrep_parent_replay_update() argument
297 struct xfs_scrub *sc = rp->sc; in xrep_parent_replay_update()
306 &pptr->pptr_rec, &rp->pptr_args); in xrep_parent_replay_update()
313 &pptr->pptr_rec, &rp->pptr_args); in xrep_parent_replay_update()
330 struct xrep_parent *rp) in xrep_parent_replay_updates() argument
335 mutex_lock(&rp->pscan.lock); in xrep_parent_replay_updates()
336 foreach_xfarray_idx(rp->pptr_recs, array_cur) { in xrep_parent_replay_updates()
339 error = xfarray_load(rp->pptr_recs, array_cur, &pptr); in xrep_parent_replay_updates()
343 error = xfblob_loadname(rp->pptr_names, pptr.name_cookie, in xrep_parent_replay_updates()
344 &rp->xname, pptr.namelen); in xrep_parent_replay_updates()
347 rp->xname.len = pptr.namelen; in xrep_parent_replay_updates()
348 mutex_unlock(&rp->pscan.lock); in xrep_parent_replay_updates()
350 error = xrep_parent_replay_update(rp, &rp->xname, &pptr); in xrep_parent_replay_updates()
354 mutex_lock(&rp->pscan.lock); in xrep_parent_replay_updates()
358 xfarray_truncate(rp->pptr_recs); in xrep_parent_replay_updates()
359 xfblob_truncate(rp->pptr_names); in xrep_parent_replay_updates()
360 mutex_unlock(&rp->pscan.lock); in xrep_parent_replay_updates()
363 mutex_unlock(&rp->pscan.lock); in xrep_parent_replay_updates()
373 struct xrep_parent *rp, in xrep_parent_stash_parentadd() argument
383 trace_xrep_parent_stash_parentadd(rp->sc->tempip, dp, name); in xrep_parent_stash_parentadd()
386 error = xfblob_storename(rp->pptr_names, &pptr.name_cookie, name); in xrep_parent_stash_parentadd()
390 return xfarray_append(rp->pptr_recs, &pptr); in xrep_parent_stash_parentadd()
399 struct xrep_parent *rp, in xrep_parent_stash_parentremove() argument
409 trace_xrep_parent_stash_parentremove(rp->sc->tempip, dp, name); in xrep_parent_stash_parentremove()
412 error = xfblob_storename(rp->pptr_names, &pptr.name_cookie, name); in xrep_parent_stash_parentremove()
416 return xfarray_append(rp->pptr_recs, &pptr); in xrep_parent_stash_parentremove()
433 struct xrep_parent *rp = priv; in xrep_parent_scan_dirent() local
437 if (ino != rp->sc->ip->i_ino) in xrep_parent_scan_dirent()
457 mutex_lock(&rp->pscan.lock); in xrep_parent_scan_dirent()
458 error = xrep_parent_stash_parentadd(rp, name, dp); in xrep_parent_scan_dirent()
459 mutex_unlock(&rp->pscan.lock); in xrep_parent_scan_dirent()
469 struct xrep_parent *rp, in xrep_parent_want_scan() argument
472 return ip != rp->sc->ip && !xrep_is_tempfile(ip); in xrep_parent_want_scan()
483 struct xrep_parent *rp, in xrep_parent_scan_ilock() argument
489 if (!xrep_parent_want_scan(rp, ip)) in xrep_parent_scan_ilock()
508 struct xrep_parent *rp, in xrep_parent_scan_file() argument
514 lock_mode = xrep_parent_scan_ilock(rp, ip); in xrep_parent_scan_file()
516 if (!xrep_parent_want_scan(rp, ip)) in xrep_parent_scan_file()
529 error = xchk_dir_walk(rp->sc, ip, xrep_parent_scan_dirent, rp); in xrep_parent_scan_file()
535 xchk_iscan_mark_visited(&rp->pscan.iscan, ip); in xrep_parent_scan_file()
543 struct xrep_parent *rp) in xrep_parent_want_flush_stashed() argument
547 bytes = xfarray_bytes(rp->pptr_recs) + xfblob_bytes(rp->pptr_names); in xrep_parent_want_flush_stashed()
557 struct xrep_parent *rp) in xrep_parent_scan_dirtree() argument
559 struct xfs_scrub *sc = rp->sc; in xrep_parent_scan_dirtree()
576 while ((error = xchk_iscan_iter(&rp->pscan.iscan, &ip)) == 1) { in xrep_parent_scan_dirtree()
579 error = xrep_parent_scan_file(rp, ip); in xrep_parent_scan_dirtree()
585 mutex_lock(&rp->pscan.lock); in xrep_parent_scan_dirtree()
586 flush = xrep_parent_want_flush_stashed(rp); in xrep_parent_scan_dirtree()
587 mutex_unlock(&rp->pscan.lock); in xrep_parent_scan_dirtree()
595 error = xrep_parent_replay_updates(rp); in xrep_parent_scan_dirtree()
608 xchk_iscan_iter_finish(&rp->pscan.iscan); in xrep_parent_scan_dirtree()
625 xchk_ilock(rp->sc, XFS_ILOCK_EXCL); in xrep_parent_scan_dirtree()
640 struct xrep_parent *rp; in xrep_parent_live_update() local
644 rp = container_of(nb, struct xrep_parent, pscan.dhook.dirent_hook.nb); in xrep_parent_live_update()
645 sc = rp->sc; in xrep_parent_live_update()
653 xchk_iscan_want_live_update(&rp->pscan.iscan, p->dp->i_ino)) { in xrep_parent_live_update()
654 mutex_lock(&rp->pscan.lock); in xrep_parent_live_update()
656 error = xrep_parent_stash_parentadd(rp, p->name, p->dp); in xrep_parent_live_update()
658 error = xrep_parent_stash_parentremove(rp, p->name, in xrep_parent_live_update()
661 rp->saw_pptr_updates = true; in xrep_parent_live_update()
662 mutex_unlock(&rp->pscan.lock); in xrep_parent_live_update()
669 xchk_iscan_abort(&rp->pscan.iscan); in xrep_parent_live_update()
676 struct xrep_parent *rp) in xrep_parent_reset_dotdot() argument
678 struct xfs_scrub *sc = rp->sc; in xrep_parent_reset_dotdot()
686 if (error || ino == rp->pscan.parent_ino) in xrep_parent_reset_dotdot()
691 trace_xrep_parent_reset_dotdot(sc->ip, rp->pscan.parent_ino); in xrep_parent_reset_dotdot()
705 rp->pscan.parent_ino, spaceres); in xrep_parent_reset_dotdot()
775 struct xrep_parent *rp) in xrep_parent_move_to_orphanage() argument
777 struct xfs_scrub *sc = rp->sc; in xrep_parent_move_to_orphanage()
821 error = xrep_adoption_trans_alloc(sc, &rp->adoption); in xrep_parent_move_to_orphanage()
825 error = xrep_adoption_compute_name(&rp->adoption, &rp->xname); in xrep_parent_move_to_orphanage()
849 error = xrep_adoption_move(&rp->adoption); in xrep_parent_move_to_orphanage()
858 error = xrep_adoption_trans_roll(&rp->adoption); in xrep_parent_move_to_orphanage()
870 struct xrep_parent *rp, in xrep_parent_alloc_xattr_value() argument
875 if (rp->xattr_value_sz >= bufsize) in xrep_parent_alloc_xattr_value()
878 if (rp->xattr_value) { in xrep_parent_alloc_xattr_value()
879 kvfree(rp->xattr_value); in xrep_parent_alloc_xattr_value()
880 rp->xattr_value = NULL; in xrep_parent_alloc_xattr_value()
881 rp->xattr_value_sz = 0; in xrep_parent_alloc_xattr_value()
888 rp->xattr_value = new_val; in xrep_parent_alloc_xattr_value()
889 rp->xattr_value_sz = bufsize; in xrep_parent_alloc_xattr_value()
896 struct xrep_parent *rp, in xrep_parent_fetch_xattr_remote() argument
903 struct xfs_scrub *sc = rp->sc; in xrep_parent_fetch_xattr_remote()
921 error = xrep_parent_alloc_xattr_value(rp, valuelen); in xrep_parent_fetch_xattr_remote()
927 args.value = rp->xattr_value; in xrep_parent_fetch_xattr_remote()
949 struct xrep_parent *rp = priv; in xrep_parent_stash_xattr() local
956 error = xrep_parent_fetch_xattr_remote(rp, ip, attr_flags, in xrep_parent_stash_xattr()
961 value = rp->xattr_value; in xrep_parent_stash_xattr()
964 trace_xrep_parent_stash_xattr(rp->sc->tempip, key.flags, (void *)name, in xrep_parent_stash_xattr()
967 error = xfblob_store(rp->xattr_blobs, &key.name_cookie, name, in xrep_parent_stash_xattr()
972 error = xfblob_store(rp->xattr_blobs, &key.value_cookie, value, in xrep_parent_stash_xattr()
977 return xfarray_append(rp->xattr_records, &key); in xrep_parent_stash_xattr()
983 struct xrep_parent *rp, in xrep_parent_insert_xattr() argument
987 .dp = rp->sc->tempip, in xrep_parent_insert_xattr()
991 .owner = rp->sc->ip->i_ino, in xrep_parent_insert_xattr()
992 .geo = rp->sc->mp->m_attr_geo, in xrep_parent_insert_xattr()
1004 args.name = rp->xattr_name; in xrep_parent_insert_xattr()
1005 args.value = rp->xattr_value; in xrep_parent_insert_xattr()
1011 rp->xattr_name[XATTR_NAME_MAX] = 0; in xrep_parent_insert_xattr()
1013 error = xfblob_load(rp->xattr_blobs, key->name_cookie, rp->xattr_name, in xrep_parent_insert_xattr()
1018 error = xfblob_free(rp->xattr_blobs, key->name_cookie); in xrep_parent_insert_xattr()
1022 error = xfblob_load(rp->xattr_blobs, key->value_cookie, args.value, in xrep_parent_insert_xattr()
1027 error = xfblob_free(rp->xattr_blobs, key->value_cookie); in xrep_parent_insert_xattr()
1031 rp->xattr_name[key->namelen] = 0; in xrep_parent_insert_xattr()
1033 trace_xrep_parent_insert_xattr(rp->sc->tempip, key->flags, in xrep_parent_insert_xattr()
1034 rp->xattr_name, key->namelen, key->valuelen); in xrep_parent_insert_xattr()
1047 struct xrep_parent *rp) in xrep_parent_flush_xattrs() argument
1069 xchk_trans_cancel(rp->sc); in xrep_parent_flush_xattrs()
1070 xchk_iunlock(rp->sc, XFS_ILOCK_EXCL); in xrep_parent_flush_xattrs()
1078 error = xrep_tempfile_iolock_polled(rp->sc); in xrep_parent_flush_xattrs()
1083 foreach_xfarray_idx(rp->xattr_records, array_cur) { in xrep_parent_flush_xattrs()
1086 error = xfarray_load(rp->xattr_records, array_cur, &key); in xrep_parent_flush_xattrs()
1090 error = xrep_parent_insert_xattr(rp, &key); in xrep_parent_flush_xattrs()
1096 xfarray_truncate(rp->xattr_records); in xrep_parent_flush_xattrs()
1097 xfblob_truncate(rp->xattr_blobs); in xrep_parent_flush_xattrs()
1099 xrep_tempfile_iounlock(rp->sc); in xrep_parent_flush_xattrs()
1102 error = xchk_trans_alloc_empty(rp->sc); in xrep_parent_flush_xattrs()
1105 xchk_ilock(rp->sc, XFS_ILOCK_EXCL); in xrep_parent_flush_xattrs()
1112 struct xrep_parent *rp) in xrep_parent_want_flush_xattrs() argument
1116 bytes = xfarray_bytes(rp->xattr_records) + in xrep_parent_want_flush_xattrs()
1117 xfblob_bytes(rp->xattr_blobs); in xrep_parent_want_flush_xattrs()
1127 struct xrep_parent *rp = priv; in xrep_parent_try_flush_xattrs() local
1130 if (!xrep_parent_want_flush_xattrs(rp)) in xrep_parent_try_flush_xattrs()
1133 error = xrep_parent_flush_xattrs(rp); in xrep_parent_try_flush_xattrs()
1145 mutex_lock(&rp->pscan.lock); in xrep_parent_try_flush_xattrs()
1146 if (rp->saw_pptr_updates) in xrep_parent_try_flush_xattrs()
1148 mutex_unlock(&rp->pscan.lock); in xrep_parent_try_flush_xattrs()
1155 struct xrep_parent *rp) in xrep_parent_copy_xattrs() argument
1157 struct xfs_scrub *sc = rp->sc; in xrep_parent_copy_xattrs()
1164 mutex_lock(&rp->pscan.lock); in xrep_parent_copy_xattrs()
1165 rp->saw_pptr_updates = false; in xrep_parent_copy_xattrs()
1166 mutex_unlock(&rp->pscan.lock); in xrep_parent_copy_xattrs()
1170 xrep_parent_try_flush_xattrs, rp); in xrep_parent_copy_xattrs()
1181 NULL, rp); in xrep_parent_copy_xattrs()
1187 if (xfarray_bytes(rp->xattr_records) == 0) in xrep_parent_copy_xattrs()
1190 return xrep_parent_flush_xattrs(rp); in xrep_parent_copy_xattrs()
1205 struct xrep_parent *rp) in xrep_parent_ensure_attr_fork() argument
1207 struct xfs_scrub *sc = rp->sc; in xrep_parent_ensure_attr_fork()
1224 struct xrep_parent *rp) in xrep_parent_finalize_tempfile() argument
1226 struct xfs_scrub *sc = rp->sc; in xrep_parent_finalize_tempfile()
1236 error = xrep_parent_replay_updates(rp); in xrep_parent_finalize_tempfile()
1240 error = xrep_parent_ensure_attr_fork(rp); in xrep_parent_finalize_tempfile()
1244 error = xrep_tempexch_trans_alloc(sc, XFS_ATTR_FORK, &rp->tx); in xrep_parent_finalize_tempfile()
1248 if (xfarray_length(rp->pptr_recs) == 0) in xrep_parent_finalize_tempfile()
1264 struct xrep_parent *rp) in xrep_parent_rebuild_pptrs() argument
1266 struct xfs_scrub *sc = rp->sc; in xrep_parent_rebuild_pptrs()
1278 error = xrep_parent_copy_xattrs(rp); in xrep_parent_rebuild_pptrs()
1299 error = xrep_parent_finalize_tempfile(rp); in xrep_parent_rebuild_pptrs()
1307 if (xchk_iscan_aborted(&rp->pscan.iscan)) in xrep_parent_rebuild_pptrs()
1314 error = xrep_xattr_swap(sc, &rp->tx); in xrep_parent_rebuild_pptrs()
1338 xrep_findparent_scan_found(&rp->pscan, sc->ip->i_ino); in xrep_parent_rebuild_pptrs()
1344 xrep_findparent_scan_found(&rp->pscan, parent_ino); in xrep_parent_rebuild_pptrs()
1355 struct xrep_parent *rp) in xrep_parent_rebuild_tree() argument
1357 struct xfs_scrub *sc = rp->sc; in xrep_parent_rebuild_tree()
1362 error = xrep_parent_rebuild_pptrs(rp); in xrep_parent_rebuild_tree()
1372 try_adoption = rp->pscan.parent_ino == NULLFSINO; in xrep_parent_rebuild_tree()
1385 return xrep_parent_move_to_orphanage(rp); in xrep_parent_rebuild_tree()
1391 return xrep_parent_reset_dotdot(rp); in xrep_parent_rebuild_tree()
1408 struct xrep_parent *rp = priv; in xrep_parent_count_pptr() local
1419 rp->parents++; in xrep_parent_count_pptr()
1430 struct xrep_parent *rp) in xrep_parent_set_nondir_nlink() argument
1432 struct xfs_scrub *sc = rp->sc; in xrep_parent_set_nondir_nlink()
1439 rp->parents = 0; in xrep_parent_set_nondir_nlink()
1440 error = xchk_xattr_walk(sc, ip, xrep_parent_count_pptr, NULL, rp); in xrep_parent_set_nondir_nlink()
1450 rp->parents++; in xrep_parent_set_nondir_nlink()
1452 if (rp->parents > 0 && xfs_inode_on_unlinked_list(ip)) { in xrep_parent_set_nondir_nlink()
1470 } else if (rp->parents == 0 && !xfs_inode_on_unlinked_list(ip)) { in xrep_parent_set_nondir_nlink()
1484 if (VFS_I(ip)->i_nlink != rp->parents) { in xrep_parent_set_nondir_nlink()
1490 set_nlink(VFS_I(ip), min_t(unsigned long long, rp->parents, in xrep_parent_set_nondir_nlink()
1503 struct xrep_parent *rp) in xrep_parent_setup_scan() argument
1505 struct xfs_scrub *sc = rp->sc; in xrep_parent_setup_scan()
1512 return xrep_findparent_scan_start(sc, &rp->pscan); in xrep_parent_setup_scan()
1515 rp->xattr_name = kvmalloc(XATTR_NAME_MAX + 1, XCHK_GFP_FLAGS); in xrep_parent_setup_scan()
1516 if (!rp->xattr_name) in xrep_parent_setup_scan()
1529 error = xrep_parent_alloc_xattr_value(rp, max_len); in xrep_parent_setup_scan()
1536 &rp->pptr_recs); in xrep_parent_setup_scan()
1542 error = xfblob_create(descr, &rp->pptr_names); in xrep_parent_setup_scan()
1551 &rp->xattr_records); in xrep_parent_setup_scan()
1558 error = xfblob_create(descr, &rp->xattr_blobs); in xrep_parent_setup_scan()
1563 error = __xrep_findparent_scan_start(sc, &rp->pscan, in xrep_parent_setup_scan()
1571 xfblob_destroy(rp->xattr_blobs); in xrep_parent_setup_scan()
1572 rp->xattr_blobs = NULL; in xrep_parent_setup_scan()
1574 xfarray_destroy(rp->xattr_records); in xrep_parent_setup_scan()
1575 rp->xattr_records = NULL; in xrep_parent_setup_scan()
1577 xfblob_destroy(rp->pptr_names); in xrep_parent_setup_scan()
1578 rp->pptr_names = NULL; in xrep_parent_setup_scan()
1580 xfarray_destroy(rp->pptr_recs); in xrep_parent_setup_scan()
1581 rp->pptr_recs = NULL; in xrep_parent_setup_scan()
1583 kvfree(rp->xattr_value); in xrep_parent_setup_scan()
1584 rp->xattr_value = NULL; in xrep_parent_setup_scan()
1586 kvfree(rp->xattr_name); in xrep_parent_setup_scan()
1587 rp->xattr_name = NULL; in xrep_parent_setup_scan()
1595 struct xrep_parent *rp = sc->buf; in xrep_parent() local
1610 error = xrep_parent_setup_scan(rp); in xrep_parent()
1615 error = xrep_parent_scan_dirtree(rp); in xrep_parent()
1617 error = xrep_parent_find_dotdot(rp); in xrep_parent()
1625 error = xrep_parent_rebuild_tree(rp); in xrep_parent()
1629 error = xrep_parent_set_nondir_nlink(rp); in xrep_parent()
1637 xrep_parent_teardown(rp); in xrep_parent()