• Home
  • Raw
  • Download

Lines Matching +full:tp +full:- +full:link

1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2006 Silicon Graphics, Inc.
4 * Copyright (c) 2012-2013 Red Hat, Inc.
25 /* ----- Kernel only functions below ----- */
29 char *link) in xfs_readlink_bmap_ilocked() argument
31 struct xfs_mount *mp = ip->i_mount; in xfs_readlink_bmap_ilocked()
36 int pathlen = ip->i_d.di_size; in xfs_readlink_bmap_ilocked()
56 error = xfs_buf_read(mp->m_ddev_targp, d, BTOBB(byte_cnt), 0, in xfs_readlink_bmap_ilocked()
64 cur_chunk = bp->b_addr; in xfs_readlink_bmap_ilocked()
65 if (xfs_sb_version_hascrc(&mp->m_sb)) { in xfs_readlink_bmap_ilocked()
66 if (!xfs_symlink_hdr_ok(ip->i_ino, offset, in xfs_readlink_bmap_ilocked()
68 error = -EFSCORRUPTED; in xfs_readlink_bmap_ilocked()
71 offset, byte_cnt, ip->i_ino); in xfs_readlink_bmap_ilocked()
80 memcpy(link + offset, cur_chunk, byte_cnt); in xfs_readlink_bmap_ilocked()
82 pathlen -= byte_cnt; in xfs_readlink_bmap_ilocked()
89 link[ip->i_d.di_size] = '\0'; in xfs_readlink_bmap_ilocked()
99 char *link) in xfs_readlink() argument
101 struct xfs_mount *mp = ip->i_mount; in xfs_readlink()
107 ASSERT(!(ip->i_df.if_flags & XFS_IFINLINE)); in xfs_readlink()
110 return -EIO; in xfs_readlink()
114 pathlen = ip->i_d.di_size; in xfs_readlink()
120 __func__, (unsigned long long) ip->i_ino, in xfs_readlink()
123 error = -EFSCORRUPTED; in xfs_readlink()
128 error = xfs_readlink_bmap_ilocked(ip, link); in xfs_readlink()
143 struct xfs_mount *mp = dp->i_mount; in xfs_symlink()
144 struct xfs_trans *tp = NULL; in xfs_symlink() local
169 return -EIO; in xfs_symlink()
176 return -ENAMETOOLONG; in xfs_symlink()
198 resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); in xfs_symlink()
200 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_symlink, resblks, 0, 0, &tp); in xfs_symlink()
210 if (dp->i_d.di_flags & XFS_DIFLAG_NOSYMLINKS) { in xfs_symlink()
211 error = -EPERM; in xfs_symlink()
218 error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, in xfs_symlink()
226 error = xfs_dir_ialloc(&tp, dp, S_IFLNK | (mode & ~S_IFMT), 1, 0, in xfs_symlink()
238 xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); in xfs_symlink()
244 xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); in xfs_symlink()
246 resblks -= XFS_IALLOC_SPACE_RES(mp); in xfs_symlink()
253 ip->i_d.di_size = pathlen; in xfs_symlink()
254 ip->i_df.if_format = XFS_DINODE_FMT_LOCAL; in xfs_symlink()
255 xfs_trans_log_inode(tp, ip, XFS_ILOG_DDATA | XFS_ILOG_CORE); in xfs_symlink()
262 error = xfs_bmapi_write(tp, ip, first_fsb, fs_blocks, in xfs_symlink()
267 resblks -= fs_blocks; in xfs_symlink()
268 ip->i_d.di_size = pathlen; in xfs_symlink()
269 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_symlink()
278 error = xfs_trans_get_buf(tp, mp->m_ddev_targp, d, in xfs_symlink()
282 bp->b_ops = &xfs_symlink_buf_ops; in xfs_symlink()
287 buf = bp->b_addr; in xfs_symlink()
288 buf += xfs_symlink_hdr_set(mp, ip->i_ino, offset, in xfs_symlink()
294 pathlen -= byte_cnt; in xfs_symlink()
297 xfs_trans_buf_set_type(tp, bp, XFS_BLFT_SYMLINK_BUF); in xfs_symlink()
298 xfs_trans_log_buf(tp, bp, 0, (buf + byte_cnt - 1) - in xfs_symlink()
299 (char *)bp->b_addr); in xfs_symlink()
303 i_size_write(VFS_I(ip), ip->i_d.di_size); in xfs_symlink()
308 error = xfs_dir_createname(tp, dp, link_name, ip->i_ino, resblks); in xfs_symlink()
311 xfs_trans_ichgtime(tp, dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); in xfs_symlink()
312 xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE); in xfs_symlink()
319 if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) { in xfs_symlink()
320 xfs_trans_set_sync(tp); in xfs_symlink()
323 error = xfs_trans_commit(tp); in xfs_symlink()
335 xfs_trans_cancel(tp); in xfs_symlink()
363 * but allows us to catch corrupt zero-length symlinks in the verifiers.
377 xfs_trans_t *tp; in xfs_inactive_symlink_rmt() local
379 mp = ip->i_mount; in xfs_inactive_symlink_rmt()
380 ASSERT(ip->i_df.if_flags & XFS_IFEXTENTS); in xfs_inactive_symlink_rmt()
388 ASSERT(ip->i_df.if_nextents > 0 && ip->i_df.if_nextents <= 2); in xfs_inactive_symlink_rmt()
390 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate, 0, 0, 0, &tp); in xfs_inactive_symlink_rmt()
395 xfs_trans_ijoin(tp, ip, 0); in xfs_inactive_symlink_rmt()
403 size = (int)ip->i_d.di_size; in xfs_inactive_symlink_rmt()
404 ip->i_d.di_size = 0; in xfs_inactive_symlink_rmt()
405 VFS_I(ip)->i_mode = (VFS_I(ip)->i_mode & ~S_IFMT) | S_IFREG; in xfs_inactive_symlink_rmt()
406 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_inactive_symlink_rmt()
420 error = xfs_trans_get_buf(tp, mp->m_ddev_targp, in xfs_inactive_symlink_rmt()
426 xfs_trans_binval(tp, bp); in xfs_inactive_symlink_rmt()
431 error = xfs_bunmapi(tp, ip, 0, size, 0, nmaps, &done); in xfs_inactive_symlink_rmt()
440 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_inactive_symlink_rmt()
441 error = xfs_trans_commit(tp); in xfs_inactive_symlink_rmt()
450 if (ip->i_df.if_bytes) in xfs_inactive_symlink_rmt()
451 xfs_idata_realloc(ip, -ip->i_df.if_bytes, XFS_DATA_FORK); in xfs_inactive_symlink_rmt()
452 ASSERT(ip->i_df.if_bytes == 0); in xfs_inactive_symlink_rmt()
458 xfs_trans_cancel(tp); in xfs_inactive_symlink_rmt()
465 * xfs_inactive_symlink - free a symlink
471 struct xfs_mount *mp = ip->i_mount; in xfs_inactive_symlink()
477 return -EIO; in xfs_inactive_symlink()
480 pathlen = (int)ip->i_d.di_size; in xfs_inactive_symlink()
485 __func__, (unsigned long long)ip->i_ino, pathlen); in xfs_inactive_symlink()
488 return -EFSCORRUPTED; in xfs_inactive_symlink()
495 if (ip->i_df.if_flags & XFS_IFINLINE) { in xfs_inactive_symlink()