]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: pass the owner to xfs_symlink_write_target
authorDarrick J. Wong <djwong@kernel.org>
Mon, 15 Apr 2024 21:54:59 +0000 (14:54 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Mon, 15 Apr 2024 21:58:57 +0000 (14:58 -0700)
Require callers of xfs_symlink_write_target to pass the owner number
explicitly.  This sets us up for online repair to be able to write a
remote symlink target to sc->tempip with sc->ip's inumber in the block
heaader.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/libxfs/xfs_symlink_remote.c
fs/xfs/libxfs/xfs_symlink_remote.h
fs/xfs/xfs_symlink.c

index d150576ddd0af297f1d9bc7a01a6566b31bb2b4f..f228127a88ff26cf3aaf1774da1fc5c0ff07916e 100644 (file)
@@ -311,6 +311,7 @@ int
 xfs_symlink_write_target(
        struct xfs_trans        *tp,
        struct xfs_inode        *ip,
+       xfs_ino_t               owner,
        const char              *target_path,
        int                     pathlen,
        xfs_fsblock_t           fs_blocks,
@@ -365,8 +366,7 @@ xfs_symlink_write_target(
                byte_cnt = min(byte_cnt, pathlen);
 
                buf = bp->b_addr;
-               buf += xfs_symlink_hdr_set(mp, ip->i_ino, offset, byte_cnt,
-                               bp);
+               buf += xfs_symlink_hdr_set(mp, owner, offset, byte_cnt, bp);
 
                memcpy(buf, cur_chunk, byte_cnt);
 
index 83b89a1deb9f2c542e029dd9a76a7e3d9eec3516..c1672fe1f17bb29b997b12285a800f2c8a1c1202 100644 (file)
@@ -21,8 +21,8 @@ void xfs_symlink_local_to_remote(struct xfs_trans *tp, struct xfs_buf *bp,
 xfs_failaddr_t xfs_symlink_shortform_verify(void *sfp, int64_t size);
 int xfs_symlink_remote_read(struct xfs_inode *ip, char *link);
 int xfs_symlink_write_target(struct xfs_trans *tp, struct xfs_inode *ip,
-               const char *target_path, int pathlen, xfs_fsblock_t fs_blocks,
-               uint resblks);
+               xfs_ino_t owner, const char *target_path, int pathlen,
+               xfs_fsblock_t fs_blocks, uint resblks);
 int xfs_symlink_remote_truncate(struct xfs_trans *tp, struct xfs_inode *ip);
 
 #endif /* __XFS_SYMLINK_REMOTE_H */
index 3daeebff4bb47082984f8b011f0b7af51bac76f3..fb060aaf6d40fe54ee79e562e3576adb0098eaa5 100644 (file)
@@ -181,8 +181,8 @@ xfs_symlink(
        xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp);
 
        resblks -= XFS_IALLOC_SPACE_RES(mp);
-       error = xfs_symlink_write_target(tp, ip, target_path, pathlen,
-                       fs_blocks, resblks);
+       error = xfs_symlink_write_target(tp, ip, ip->i_ino, target_path,
+                       pathlen, fs_blocks, resblks);
        if (error)
                goto out_trans_cancel;
        resblks -= fs_blocks;