Lines Matching full:rp
189 struct xrep_parent *rp)
191 xrep_findparent_scan_teardown(&rp->pscan);
192 kvfree(rp->xattr_name);
193 rp->xattr_name = NULL;
194 kvfree(rp->xattr_value);
195 rp->xattr_value = NULL;
196 if (rp->xattr_blobs)
197 xfblob_destroy(rp->xattr_blobs);
198 rp->xattr_blobs = NULL;
199 if (rp->xattr_records)
200 xfarray_destroy(rp->xattr_records);
201 rp->xattr_records = NULL;
202 if (rp->pptr_names)
203 xfblob_destroy(rp->pptr_names);
204 rp->pptr_names = NULL;
205 if (rp->pptr_recs)
206 xfarray_destroy(rp->pptr_recs);
207 rp->pptr_recs = NULL;
215 struct xrep_parent *rp;
220 rp = kvzalloc(sizeof(struct xrep_parent), XCHK_GFP_FLAGS);
221 if (!rp)
223 rp->sc = sc;
224 rp->xname.name = rp->namebuf;
225 sc->buf = rp;
240 struct xrep_parent *rp)
242 struct xfs_scrub *sc = rp->sc;
257 xrep_findparent_scan_finish_early(&rp->pscan, ino);
273 xrep_findparent_scan_finish_early(&rp->pscan, ino);
279 error = xrep_findparent_scan(&rp->pscan);
293 struct xrep_parent *rp,
297 struct xfs_scrub *sc = rp->sc;
306 &pptr->pptr_rec, &rp->pptr_args);
313 &pptr->pptr_rec, &rp->pptr_args);
330 struct xrep_parent *rp)
335 mutex_lock(&rp->pscan.lock);
336 foreach_xfarray_idx(rp->pptr_recs, array_cur) {
339 error = xfarray_load(rp->pptr_recs, array_cur, &pptr);
343 error = xfblob_loadname(rp->pptr_names, pptr.name_cookie,
344 &rp->xname, pptr.namelen);
347 rp->xname.len = pptr.namelen;
348 mutex_unlock(&rp->pscan.lock);
350 error = xrep_parent_replay_update(rp, &rp->xname, &pptr);
354 mutex_lock(&rp->pscan.lock);
358 xfarray_truncate(rp->pptr_recs);
359 xfblob_truncate(rp->pptr_names);
360 mutex_unlock(&rp->pscan.lock);
363 mutex_unlock(&rp->pscan.lock);
373 struct xrep_parent *rp,
383 trace_xrep_parent_stash_parentadd(rp->sc->tempip, dp, name);
386 error = xfblob_storename(rp->pptr_names, &pptr.name_cookie, name);
390 return xfarray_append(rp->pptr_recs, &pptr);
399 struct xrep_parent *rp,
409 trace_xrep_parent_stash_parentremove(rp->sc->tempip, dp, name);
412 error = xfblob_storename(rp->pptr_names, &pptr.name_cookie, name);
416 return xfarray_append(rp->pptr_recs, &pptr);
433 struct xrep_parent *rp = priv;
437 if (ino != rp->sc->ip->i_ino)
457 mutex_lock(&rp->pscan.lock);
458 error = xrep_parent_stash_parentadd(rp, name, dp);
459 mutex_unlock(&rp->pscan.lock);
469 struct xrep_parent *rp,
472 return ip != rp->sc->ip && !xrep_is_tempfile(ip);
483 struct xrep_parent *rp,
489 if (!xrep_parent_want_scan(rp, ip))
508 struct xrep_parent *rp,
514 lock_mode = xrep_parent_scan_ilock(rp, ip);
516 if (!xrep_parent_want_scan(rp, ip))
529 error = xchk_dir_walk(rp->sc, ip, xrep_parent_scan_dirent, rp);
535 xchk_iscan_mark_visited(&rp->pscan.iscan, ip);
543 struct xrep_parent *rp)
547 bytes = xfarray_bytes(rp->pptr_recs) + xfblob_bytes(rp->pptr_names);
557 struct xrep_parent *rp)
559 struct xfs_scrub *sc = rp->sc;
574 while ((error = xchk_iscan_iter(&rp->pscan.iscan, &ip)) == 1) {
577 error = xrep_parent_scan_file(rp, ip);
583 mutex_lock(&rp->pscan.lock);
584 flush = xrep_parent_want_flush_stashed(rp);
585 mutex_unlock(&rp->pscan.lock);
593 error = xrep_parent_replay_updates(rp);
604 xchk_iscan_iter_finish(&rp->pscan.iscan);
621 xchk_ilock(rp->sc, XFS_ILOCK_EXCL);
636 struct xrep_parent *rp;
640 rp = container_of(nb, struct xrep_parent, pscan.dhook.dirent_hook.nb);
641 sc = rp->sc;
649 xchk_iscan_want_live_update(&rp->pscan.iscan, p->dp->i_ino)) {
650 mutex_lock(&rp->pscan.lock);
652 error = xrep_parent_stash_parentadd(rp, p->name, p->dp);
654 error = xrep_parent_stash_parentremove(rp, p->name,
657 rp->saw_pptr_updates = true;
658 mutex_unlock(&rp->pscan.lock);
665 xchk_iscan_abort(&rp->pscan.iscan);
672 struct xrep_parent *rp)
674 struct xfs_scrub *sc = rp->sc;
682 if (error || ino == rp->pscan.parent_ino)
687 trace_xrep_parent_reset_dotdot(sc->ip, rp->pscan.parent_ino);
701 rp->pscan.parent_ino, spaceres);
771 struct xrep_parent *rp)
773 struct xfs_scrub *sc = rp->sc;
817 error = xrep_adoption_trans_alloc(sc, &rp->adoption);
821 error = xrep_adoption_compute_name(&rp->adoption, &rp->xname);
845 error = xrep_adoption_move(&rp->adoption);
854 error = xrep_adoption_trans_roll(&rp->adoption);
866 struct xrep_parent *rp,
871 if (rp->xattr_value_sz >= bufsize)
874 if (rp->xattr_value) {
875 kvfree(rp->xattr_value);
876 rp->xattr_value = NULL;
877 rp->xattr_value_sz = 0;
884 rp->xattr_value = new_val;
885 rp->xattr_value_sz = bufsize;
892 struct xrep_parent *rp,
899 struct xfs_scrub *sc = rp->sc;
917 error = xrep_parent_alloc_xattr_value(rp, valuelen);
923 args.value = rp->xattr_value;
945 struct xrep_parent *rp = priv;
952 error = xrep_parent_fetch_xattr_remote(rp, ip, attr_flags,
957 value = rp->xattr_value;
960 trace_xrep_parent_stash_xattr(rp->sc->tempip, key.flags, (void *)name,
963 error = xfblob_store(rp->xattr_blobs, &key.name_cookie, name,
968 error = xfblob_store(rp->xattr_blobs, &key.value_cookie, value,
973 return xfarray_append(rp->xattr_records, &key);
979 struct xrep_parent *rp,
983 .dp = rp->sc->tempip,
987 .owner = rp->sc->ip->i_ino,
988 .geo = rp->sc->mp->m_attr_geo,
1000 args.name = rp->xattr_name;
1001 args.value = rp->xattr_value;
1007 rp->xattr_name[XATTR_NAME_MAX] = 0;
1009 error = xfblob_load(rp->xattr_blobs, key->name_cookie, rp->xattr_name,
1014 error = xfblob_free(rp->xattr_blobs, key->name_cookie);
1018 error = xfblob_load(rp->xattr_blobs, key->value_cookie, args.value,
1023 error = xfblob_free(rp->xattr_blobs, key->value_cookie);
1027 rp->xattr_name[key->namelen] = 0;
1029 trace_xrep_parent_insert_xattr(rp->sc->tempip, key->flags,
1030 rp->xattr_name, key->namelen, key->valuelen);
1043 struct xrep_parent *rp)
1065 xchk_trans_cancel(rp->sc);
1066 xchk_iunlock(rp->sc, XFS_ILOCK_EXCL);
1074 error = xrep_tempfile_iolock_polled(rp->sc);
1079 foreach_xfarray_idx(rp->xattr_records, array_cur) {
1082 error = xfarray_load(rp->xattr_records, array_cur, &key);
1086 error = xrep_parent_insert_xattr(rp, &key);
1092 xfarray_truncate(rp->xattr_records);
1093 xfblob_truncate(rp->xattr_blobs);
1095 xrep_tempfile_iounlock(rp->sc);
1098 xchk_trans_alloc_empty(rp->sc);
1099 xchk_ilock(rp->sc, XFS_ILOCK_EXCL);
1106 struct xrep_parent *rp)
1110 bytes = xfarray_bytes(rp->xattr_records) +
1111 xfblob_bytes(rp->xattr_blobs);
1121 struct xrep_parent *rp = priv;
1124 if (!xrep_parent_want_flush_xattrs(rp))
1127 error = xrep_parent_flush_xattrs(rp);
1139 mutex_lock(&rp->pscan.lock);
1140 if (rp->saw_pptr_updates)
1142 mutex_unlock(&rp->pscan.lock);
1149 struct xrep_parent *rp)
1151 struct xfs_scrub *sc = rp->sc;
1158 mutex_lock(&rp->pscan.lock);
1159 rp->saw_pptr_updates = false;
1160 mutex_unlock(&rp->pscan.lock);
1164 xrep_parent_try_flush_xattrs, rp);
1175 NULL, rp);
1181 if (xfarray_bytes(rp->xattr_records) == 0)
1184 return xrep_parent_flush_xattrs(rp);
1199 struct xrep_parent *rp)
1201 struct xfs_scrub *sc = rp->sc;
1218 struct xrep_parent *rp)
1220 struct xfs_scrub *sc = rp->sc;
1230 error = xrep_parent_replay_updates(rp);
1234 error = xrep_parent_ensure_attr_fork(rp);
1238 error = xrep_tempexch_trans_alloc(sc, XFS_ATTR_FORK, &rp->tx);
1242 if (xfarray_length(rp->pptr_recs) == 0)
1258 struct xrep_parent *rp)
1260 struct xfs_scrub *sc = rp->sc;
1272 error = xrep_parent_copy_xattrs(rp);
1293 error = xrep_parent_finalize_tempfile(rp);
1301 if (xchk_iscan_aborted(&rp->pscan.iscan))
1308 error = xrep_xattr_swap(sc, &rp->tx);
1332 xrep_findparent_scan_found(&rp->pscan, sc->ip->i_ino);
1338 xrep_findparent_scan_found(&rp->pscan, parent_ino);
1349 struct xrep_parent *rp)
1351 struct xfs_scrub *sc = rp->sc;
1356 error = xrep_parent_rebuild_pptrs(rp);
1366 try_adoption = rp->pscan.parent_ino == NULLFSINO;
1379 return xrep_parent_move_to_orphanage(rp);
1385 return xrep_parent_reset_dotdot(rp);
1402 struct xrep_parent *rp = priv;
1413 rp->parents++;
1424 struct xrep_parent *rp)
1426 struct xfs_scrub *sc = rp->sc;
1433 rp->parents = 0;
1434 error = xchk_xattr_walk(sc, ip, xrep_parent_count_pptr, NULL, rp);
1444 rp->parents++;
1446 if (rp->parents > 0 && xfs_inode_on_unlinked_list(ip)) {
1464 } else if (rp->parents == 0 && !xfs_inode_on_unlinked_list(ip)) {
1478 if (VFS_I(ip)->i_nlink != rp->parents) {
1484 set_nlink(VFS_I(ip), min_t(unsigned long long, rp->parents,
1497 struct xrep_parent *rp)
1499 struct xfs_scrub *sc = rp->sc;
1506 return xrep_findparent_scan_start(sc, &rp->pscan);
1509 rp->xattr_name = kvmalloc(XATTR_NAME_MAX + 1, XCHK_GFP_FLAGS);
1510 if (!rp->xattr_name)
1523 error = xrep_parent_alloc_xattr_value(rp, max_len);
1530 &rp->pptr_recs);
1536 error = xfblob_create(descr, &rp->pptr_names);
1545 &rp->xattr_records);
1552 error = xfblob_create(descr, &rp->xattr_blobs);
1557 error = __xrep_findparent_scan_start(sc, &rp->pscan,
1565 xfblob_destroy(rp->xattr_blobs);
1566 rp->xattr_blobs = NULL;
1568 xfarray_destroy(rp->xattr_records);
1569 rp->xattr_records = NULL;
1571 xfblob_destroy(rp->pptr_names);
1572 rp->pptr_names = NULL;
1574 xfarray_destroy(rp->pptr_recs);
1575 rp->pptr_recs = NULL;
1577 kvfree(rp->xattr_value);
1578 rp->xattr_value = NULL;
1580 kvfree(rp->xattr_name);
1581 rp->xattr_name = NULL;
1589 struct xrep_parent *rp = sc->buf;
1604 error = xrep_parent_setup_scan(rp);
1609 error = xrep_parent_scan_dirtree(rp);
1611 error = xrep_parent_find_dotdot(rp);
1619 error = xrep_parent_rebuild_tree(rp);
1623 error = xrep_parent_set_nondir_nlink(rp);
1631 xrep_parent_teardown(rp);