Lines Matching full:sc
56 struct xfs_scrub *sc, in xrep_setup_symlink() argument
59 struct xfs_mount *mp = sc->mp; in xrep_setup_symlink()
63 error = xrep_tempfile_create(sc, S_IFLNK); in xrep_setup_symlink()
80 blocks = xfs_symlink_blocks(sc->mp, XFS_SYMLINK_MAXLEN); in xrep_setup_symlink()
95 struct xfs_scrub *sc) in xrep_symlink_salvage_remote() argument
98 struct xfs_inode *ip = sc->ip; in xrep_symlink_salvage_remote()
100 char *target_buf = sc->buf; in xrep_symlink_salvage_remote()
115 fsblocks = xfs_symlink_blocks(sc->mp, len); in xrep_symlink_salvage_remote()
123 d = XFS_FSB_TO_DADDR(sc->mp, mval[n].br_startblock); in xrep_symlink_salvage_remote()
126 error = xfs_trans_read_buf(sc->mp, sc->tp, sc->mp->m_ddev_targp, in xrep_symlink_salvage_remote()
127 d, XFS_FSB_TO_BB(sc->mp, mval[n].br_blockcount), in xrep_symlink_salvage_remote()
134 byte_cnt = XFS_FSB_TO_B(sc->mp, mval[n].br_blockcount); in xrep_symlink_salvage_remote()
135 byte_cnt = XFS_SYMLINK_BUF_SPACE(sc->mp, byte_cnt); in xrep_symlink_salvage_remote()
165 struct xfs_scrub *sc) in xrep_symlink_salvage_inline() argument
167 struct xfs_inode *ip = sc->ip; in xrep_symlink_salvage_inline()
168 char *target_buf = sc->buf; in xrep_symlink_salvage_inline()
183 if (xfs_inode_has_sickness(sc->ip, XFS_SICK_INO_SYMLINK_ZAPPED) && in xrep_symlink_salvage_inline()
184 sc->ip->i_disk_size == 1 && old_target[0] == '?') in xrep_symlink_salvage_inline()
203 struct xfs_scrub *sc) in xrep_symlink_salvage() argument
205 char *target_buf = sc->buf; in xrep_symlink_salvage()
214 if (!(sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)) { in xrep_symlink_salvage()
215 if (sc->ip->i_df.if_format == XFS_DINODE_FMT_LOCAL) in xrep_symlink_salvage()
216 buflen = xrep_symlink_salvage_inline(sc); in xrep_symlink_salvage()
218 buflen = xrep_symlink_salvage_remote(sc); in xrep_symlink_salvage()
228 if (strlen(target_buf) != sc->ip->i_disk_size) in xrep_symlink_salvage()
237 xchk_mark_healthy_if_clean(sc, XFS_SICK_INO_SYMLINK_ZAPPED); in xrep_symlink_salvage()
241 trace_xrep_symlink_salvage_target(sc->ip, target_buf, in xrep_symlink_salvage()
254 struct xfs_scrub *sc = priv; in xrep_symlink_local_to_remote() local
259 if (!xfs_has_crc(sc->mp)) in xrep_symlink_local_to_remote()
262 dsl->sl_owner = cpu_to_be64(sc->ip->i_ino); in xrep_symlink_local_to_remote()
274 struct xfs_scrub *sc, in xrep_symlink_swap_prep() argument
287 error = xfs_bmap_local_to_extents(sc->tp, sc->tempip, 1, in xrep_symlink_swap_prep()
290 sc); in xrep_symlink_swap_prep()
294 xfs_trans_log_inode(sc->tp, sc->ip, 0); in xrep_symlink_swap_prep()
296 error = xfs_defer_finish(&sc->tp); in xrep_symlink_swap_prep()
309 ifp = xfs_ifork_ptr(sc->ip, XFS_DATA_FORK); in xrep_symlink_swap_prep()
317 xfs_trans_log_inode(sc->tp, sc->ip, in xrep_symlink_swap_prep()
327 struct xfs_scrub *sc) in xrep_symlink_swap() argument
329 struct xrep_tempexch *tx = sc->buf; in xrep_symlink_swap()
333 ip_local = sc->ip->i_df.if_format == XFS_DINODE_FMT_LOCAL; in xrep_symlink_swap()
334 temp_local = sc->tempip->i_df.if_format == XFS_DINODE_FMT_LOCAL; in xrep_symlink_swap()
342 sc->tempip->i_disk_size <= xfs_inode_data_fork_size(sc->ip)) { in xrep_symlink_swap()
343 xrep_tempfile_copyout_local(sc, XFS_DATA_FORK); in xrep_symlink_swap()
348 error = xrep_symlink_swap_prep(sc, temp_local, ip_local); in xrep_symlink_swap()
352 return xrep_tempexch_contents(sc, tx); in xrep_symlink_swap()
362 struct xfs_scrub *sc) in xrep_symlink_reset_fork() argument
364 struct xfs_ifork *ifp = xfs_ifork_ptr(sc->tempip, XFS_DATA_FORK); in xrep_symlink_reset_fork()
369 error = xrep_reap_ifork(sc, sc->tempip, XFS_DATA_FORK); in xrep_symlink_reset_fork()
374 trace_xrep_symlink_reset_fork(sc->tempip); in xrep_symlink_reset_fork()
378 return xfs_symlink_write_target(sc->tp, sc->tempip, sc->tempip->i_ino, in xrep_symlink_reset_fork()
388 struct xfs_scrub *sc) in xrep_symlink_rebuild() argument
391 char *target_buf = sc->buf; in xrep_symlink_rebuild()
403 trace_xrep_symlink_rebuild(sc->ip); in xrep_symlink_rebuild()
415 xchk_iunlock(sc, XFS_ILOCK_EXCL); in xrep_symlink_rebuild()
416 xrep_tempfile_ilock(sc); in xrep_symlink_rebuild()
417 xfs_trans_ijoin(sc->tp, sc->tempip, 0); in xrep_symlink_rebuild()
424 fs_blocks = xfs_symlink_blocks(sc->mp, target_len); in xrep_symlink_rebuild()
425 resblks = xfs_symlink_space_res(sc->mp, target_len, fs_blocks); in xrep_symlink_rebuild()
426 error = xfs_trans_reserve_quota_nblks(sc->tp, sc->tempip, resblks, 0, in xrep_symlink_rebuild()
432 xfs_idestroy_fork(&sc->tempip->i_df); in xrep_symlink_rebuild()
433 sc->tempip->i_df.if_bytes = 0; in xrep_symlink_rebuild()
434 sc->tempip->i_df.if_format = XFS_DINODE_FMT_EXTENTS; in xrep_symlink_rebuild()
437 error = xfs_symlink_write_target(sc->tp, sc->tempip, sc->ip->i_ino, in xrep_symlink_rebuild()
448 error = xrep_trans_commit(sc); in xrep_symlink_rebuild()
453 if (xchk_should_terminate(sc, &error)) in xrep_symlink_rebuild()
456 xrep_tempfile_iunlock(sc); in xrep_symlink_rebuild()
462 tx = sc->buf; in xrep_symlink_rebuild()
463 error = xrep_tempexch_trans_alloc(sc, XFS_DATA_FORK, tx); in xrep_symlink_rebuild()
472 error = xrep_symlink_swap(sc); in xrep_symlink_rebuild()
481 return xrep_symlink_reset_fork(sc); in xrep_symlink_rebuild()
487 struct xfs_scrub *sc) in xrep_symlink() argument
492 if (!xfs_has_rmapbt(sc->mp)) in xrep_symlink()
495 if (!xfs_has_exchange_range(sc->mp)) in xrep_symlink()
498 ASSERT(sc->ilock_flags & XFS_ILOCK_EXCL); in xrep_symlink()
500 error = xrep_symlink_salvage(sc); in xrep_symlink()
505 error = xrep_symlink_rebuild(sc); in xrep_symlink()
509 return xrep_trans_commit(sc); in xrep_symlink()