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

1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
39 * held. For regular files, the lock order is the other way around - the
57 for (xattr = xattr_array; xattr->name != NULL; xattr++) { in xfs_initxattrs()
61 .name = xattr->name, in xfs_initxattrs()
62 .namelen = strlen(xattr->name), in xfs_initxattrs()
63 .value = xattr->value, in xfs_initxattrs()
64 .valuelen = xattr->value_len, in xfs_initxattrs()
94 namep->name = dentry->d_name.name; in xfs_dentry_to_name()
95 namep->len = dentry->d_name.len; in xfs_dentry_to_name()
96 namep->type = XFS_DIR3_FT_UNKNOWN; in xfs_dentry_to_name()
105 namep->name = dentry->d_name.name; in xfs_dentry_mode_to_name()
106 namep->len = dentry->d_name.len; in xfs_dentry_mode_to_name()
107 namep->type = xfs_mode_to_ftype(mode); in xfs_dentry_mode_to_name()
109 if (unlikely(namep->type == XFS_DIR3_FT_UNKNOWN)) in xfs_dentry_mode_to_name()
110 return -EFSCORRUPTED; in xfs_dentry_mode_to_name()
141 * LSMs that add a sb->s_security structure to the superblock. Hence if security
142 * is enabled and sb->s_security is set, we have a pretty good idea that we are
157 if (dir->i_sb->s_security) in xfs_create_need_xattr()
185 return -EINVAL; in xfs_generic_create()
211 error = xfs_inode_init_security(inode, dir, &dentry->d_name); in xfs_generic_create()
300 if (dentry->d_name.len >= MAXNAMELEN) in xfs_vn_lookup()
301 return ERR_PTR(-ENAMETOOLONG); in xfs_vn_lookup()
307 else if (likely(error == -ENOENT)) in xfs_vn_lookup()
326 if (dentry->d_name.len >= MAXNAMELEN) in xfs_vn_ci_lookup()
327 return ERR_PTR(-ENAMETOOLONG); in xfs_vn_ci_lookup()
332 if (unlikely(error != -ENOENT)) in xfs_vn_ci_lookup()
346 /* else case-insensitive match... */ in xfs_vn_ci_lookup()
364 error = xfs_dentry_mode_to_name(&name, dentry, inode->i_mode); in xfs_vn_link()
393 * but still hashed. This is incompatible with case-insensitive in xfs_vn_unlink()
394 * mode, so invalidate (unhash) the dentry in CI-mode. in xfs_vn_unlink()
396 if (xfs_has_asciici(XFS_M(dir->i_sb))) in xfs_vn_unlink()
426 error = xfs_inode_init_security(inode, dir, &dentry->d_name); in xfs_vn_symlink()
460 return -EINVAL; in xfs_vn_rename()
464 omode = d_inode(ndentry)->i_mode; in xfs_vn_rename()
471 d_inode(odentry)->i_mode); in xfs_vn_rename()
481 * careful here - this function can get called recursively, so
491 char *link; in xfs_vn_get_link() local
492 int error = -ENOMEM; in xfs_vn_get_link()
495 return ERR_PTR(-ECHILD); in xfs_vn_get_link()
497 link = kmalloc(XFS_SYMLINK_MAXLEN+1, GFP_KERNEL); in xfs_vn_get_link()
498 if (!link) in xfs_vn_get_link()
501 error = xfs_readlink(XFS_I(d_inode(dentry)), link); in xfs_vn_get_link()
505 set_delayed_call(done, kfree_link, link); in xfs_vn_get_link()
506 return link; in xfs_vn_get_link()
509 kfree(link); in xfs_vn_get_link()
518 struct xfs_mount *mp = ip->i_mount; in xfs_stat_blksize()
541 if (mp->m_swidth) in xfs_stat_blksize()
542 return XFS_FSB_TO_B(mp, mp->m_swidth); in xfs_stat_blksize()
544 return 1U << mp->m_allocsize_log; in xfs_stat_blksize()
558 struct inode *inode = d_inode(path->dentry); in xfs_vn_getattr()
560 struct xfs_mount *mp = ip->i_mount; in xfs_vn_getattr()
567 return -EIO; in xfs_vn_getattr()
569 stat->size = XFS_ISIZE(ip); in xfs_vn_getattr()
570 stat->dev = inode->i_sb->s_dev; in xfs_vn_getattr()
571 stat->mode = inode->i_mode; in xfs_vn_getattr()
572 stat->nlink = inode->i_nlink; in xfs_vn_getattr()
573 stat->uid = vfsuid_into_kuid(vfsuid); in xfs_vn_getattr()
574 stat->gid = vfsgid_into_kgid(vfsgid); in xfs_vn_getattr()
575 stat->ino = ip->i_ino; in xfs_vn_getattr()
576 stat->atime = inode->i_atime; in xfs_vn_getattr()
577 stat->mtime = inode->i_mtime; in xfs_vn_getattr()
578 stat->ctime = inode_get_ctime(inode); in xfs_vn_getattr()
579 stat->blocks = XFS_FSB_TO_BB(mp, ip->i_nblocks + ip->i_delayed_blks); in xfs_vn_getattr()
583 stat->result_mask |= STATX_BTIME; in xfs_vn_getattr()
584 stat->btime = ip->i_crtime; in xfs_vn_getattr()
589 stat->change_cookie = inode_query_iversion(inode); in xfs_vn_getattr()
590 stat->result_mask |= STATX_CHANGE_COOKIE; in xfs_vn_getattr()
597 if (ip->i_diflags & XFS_DIFLAG_IMMUTABLE) in xfs_vn_getattr()
598 stat->attributes |= STATX_ATTR_IMMUTABLE; in xfs_vn_getattr()
599 if (ip->i_diflags & XFS_DIFLAG_APPEND) in xfs_vn_getattr()
600 stat->attributes |= STATX_ATTR_APPEND; in xfs_vn_getattr()
601 if (ip->i_diflags & XFS_DIFLAG_NODUMP) in xfs_vn_getattr()
602 stat->attributes |= STATX_ATTR_NODUMP; in xfs_vn_getattr()
604 stat->attributes_mask |= (STATX_ATTR_IMMUTABLE | in xfs_vn_getattr()
608 switch (inode->i_mode & S_IFMT) { in xfs_vn_getattr()
611 stat->blksize = BLKDEV_IOSIZE; in xfs_vn_getattr()
612 stat->rdev = inode->i_rdev; in xfs_vn_getattr()
617 struct block_device *bdev = target->bt_bdev; in xfs_vn_getattr()
619 stat->result_mask |= STATX_DIOALIGN; in xfs_vn_getattr()
620 stat->dio_mem_align = bdev_dma_alignment(bdev) + 1; in xfs_vn_getattr()
621 stat->dio_offset_align = bdev_logical_block_size(bdev); in xfs_vn_getattr()
625 stat->blksize = xfs_stat_blksize(ip); in xfs_vn_getattr()
626 stat->rdev = 0; in xfs_vn_getattr()
639 struct xfs_mount *mp = XFS_I(d_inode(dentry))->i_mount; in xfs_vn_change_ok()
642 return -EROFS; in xfs_vn_change_ok()
645 return -EIO; in xfs_vn_change_ok()
651 * Set non-size attributes of an inode.
663 xfs_mount_t *mp = ip->i_mount; in xfs_setattr_nonsize()
665 int mask = iattr->ia_valid; in xfs_setattr_nonsize()
666 xfs_trans_t *tp; in xfs_setattr_nonsize() local
688 iattr->ia_vfsuid); in xfs_setattr_nonsize()
691 uid = inode->i_uid; in xfs_setattr_nonsize()
695 iattr->ia_vfsgid); in xfs_setattr_nonsize()
698 gid = inode->i_gid; in xfs_setattr_nonsize()
708 error = xfs_qm_vop_dqalloc(ip, uid, gid, ip->i_projid, in xfs_setattr_nonsize()
715 has_capability_noaudit(current, CAP_FOWNER), &tp); in xfs_setattr_nonsize()
729 old_udqp = xfs_qm_vop_chown(tp, ip, &ip->i_udquot, udqp); in xfs_setattr_nonsize()
735 old_gdqp = xfs_qm_vop_chown(tp, ip, &ip->i_gdquot, gdqp); in xfs_setattr_nonsize()
739 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_setattr_nonsize()
744 xfs_trans_set_sync(tp); in xfs_setattr_nonsize()
745 error = xfs_trans_commit(tp); in xfs_setattr_nonsize()
766 error = posix_acl_chmod(idmap, dentry, inode->i_mode); in xfs_setattr_nonsize()
792 struct xfs_mount *mp = ip->i_mount; in xfs_setattr_size()
795 struct xfs_trans *tp; in xfs_setattr_size() local
802 ASSERT(S_ISREG(inode->i_mode)); in xfs_setattr_size()
803 ASSERT((iattr->ia_valid & (ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| in xfs_setattr_size()
806 oldsize = inode->i_size; in xfs_setattr_size()
807 newsize = iattr->ia_size; in xfs_setattr_size()
812 if (newsize == 0 && oldsize == 0 && ip->i_df.if_nextents == 0) { in xfs_setattr_size()
813 if (!(iattr->ia_valid & (ATTR_CTIME|ATTR_MTIME))) in xfs_setattr_size()
819 iattr->ia_valid &= ~ATTR_SIZE; in xfs_setattr_size()
846 trace_xfs_zero_eof(ip, oldsize, newsize - oldsize); in xfs_setattr_size()
847 error = xfs_zero_range(ip, oldsize, newsize - oldsize, in xfs_setattr_size()
853 * newly post-EOF portion of the page. Flush the new EOF to in xfs_setattr_size()
856 error = filemap_write_and_wait_range(inode->i_mapping, newsize, in xfs_setattr_size()
871 * PTEs on extending truncates and hence ensures sub-page block size in xfs_setattr_size()
875 * transaction context as the "lock" order is page lock->log space in xfs_setattr_size()
878 * having already truncated the in-memory version of the file (i.e. made in xfs_setattr_size()
883 * And we update in-core i_size and truncate page cache beyond newsize in xfs_setattr_size()
898 (newsize > ip->i_disk_size && oldsize != ip->i_disk_size)) { in xfs_setattr_size()
899 error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, in xfs_setattr_size()
900 ip->i_disk_size, newsize - 1); in xfs_setattr_size()
905 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate, 0, 0, 0, &tp); in xfs_setattr_size()
911 xfs_trans_ijoin(tp, ip, 0); in xfs_setattr_size()
924 !(iattr->ia_valid & (ATTR_CTIME | ATTR_MTIME))) { in xfs_setattr_size()
925 iattr->ia_ctime = iattr->ia_mtime = in xfs_setattr_size()
927 iattr->ia_valid |= ATTR_CTIME | ATTR_MTIME; in xfs_setattr_size()
942 ip->i_disk_size = newsize; in xfs_setattr_size()
943 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_setattr_size()
946 error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, newsize); in xfs_setattr_size()
952 * here - if we delay flushing for a long time, we expose in xfs_setattr_size()
959 /* A truncate down always removes post-EOF blocks. */ in xfs_setattr_size()
963 ASSERT(!(iattr->ia_valid & (ATTR_UID | ATTR_GID))); in xfs_setattr_size()
965 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_setattr_size()
970 xfs_trans_set_sync(tp); in xfs_setattr_size()
972 error = xfs_trans_commit(tp); in xfs_setattr_size()
979 xfs_trans_cancel(tp); in xfs_setattr_size()
1010 if (iattr->ia_valid & ATTR_SIZE) { in xfs_vn_setattr()
1041 struct xfs_mount *mp = ip->i_mount; in xfs_vn_update_time()
1043 struct xfs_trans *tp; in xfs_vn_update_time() local
1049 if (inode->i_sb->s_flags & SB_LAZYTIME) { in xfs_vn_update_time()
1060 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_fsyncts, 0, 0, 0, &tp); in xfs_vn_update_time()
1071 inode->i_mtime = now; in xfs_vn_update_time()
1073 inode->i_atime = now; in xfs_vn_update_time()
1075 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); in xfs_vn_update_time()
1076 xfs_trans_log_inode(tp, ip, log_flags); in xfs_vn_update_time()
1077 return xfs_trans_commit(tp); in xfs_vn_update_time()
1090 if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) { in xfs_vn_fiemap()
1091 fieinfo->fi_flags &= ~FIEMAP_FLAG_XATTR; in xfs_vn_fiemap()
1110 int err = xfs_generic_create(idmap, dir, file->f_path.dentry, mode, 0, file); in xfs_vn_tmpfile()
1130 .link = xfs_vn_link,
1157 .link = xfs_vn_link,
1194 struct xfs_mount *mp = ip->i_mount; in xfs_inode_supports_dax()
1197 if (!S_ISREG(VFS_I(ip)->i_mode)) in xfs_inode_supports_dax()
1201 if (mp->m_sb.sb_blocksize != PAGE_SIZE) in xfs_inode_supports_dax()
1205 return xfs_inode_buftarg(ip)->bt_daxdev != NULL; in xfs_inode_supports_dax()
1214 if (xfs_has_dax_never(ip->i_mount)) in xfs_inode_should_enable_dax()
1218 if (xfs_has_dax_always(ip->i_mount)) in xfs_inode_should_enable_dax()
1220 if (ip->i_diflags2 & XFS_DIFLAG2_DAX) in xfs_inode_should_enable_dax()
1251 inode->i_flags &= ~(S_IMMUTABLE | S_APPEND | S_SYNC | S_NOATIME); in xfs_diflags_to_iflags()
1252 inode->i_flags |= flags; in xfs_diflags_to_iflags()
1267 struct inode *inode = &ip->i_vnode; in xfs_setup_inode()
1270 inode->i_ino = ip->i_ino; in xfs_setup_inode()
1271 inode->i_state |= I_NEW; in xfs_setup_inode()
1277 i_size_write(inode, ip->i_disk_size); in xfs_setup_inode()
1280 if (S_ISDIR(inode->i_mode)) { in xfs_setup_inode()
1287 lockdep_set_class(&inode->i_rwsem, in xfs_setup_inode()
1288 &inode->i_sb->s_type->i_mutex_dir_key); in xfs_setup_inode()
1289 lockdep_set_class(&ip->i_lock.mr_lock, &xfs_dir_ilock_class); in xfs_setup_inode()
1291 lockdep_set_class(&ip->i_lock.mr_lock, &xfs_nondir_ilock_class); in xfs_setup_inode()
1299 gfp_mask = mapping_gfp_mask(inode->i_mapping); in xfs_setup_inode()
1300 mapping_set_gfp_mask(inode->i_mapping, (gfp_mask & ~(__GFP_FS))); in xfs_setup_inode()
1303 * For real-time inodes update the stable write flags to that of the RT in xfs_setup_inode()
1306 if (S_ISREG(inode->i_mode) && XFS_IS_REALTIME_INODE(ip)) in xfs_setup_inode()
1323 struct inode *inode = &ip->i_vnode; in xfs_setup_iops()
1325 switch (inode->i_mode & S_IFMT) { in xfs_setup_iops()
1327 inode->i_op = &xfs_inode_operations; in xfs_setup_iops()
1328 inode->i_fop = &xfs_file_operations; in xfs_setup_iops()
1330 inode->i_mapping->a_ops = &xfs_dax_aops; in xfs_setup_iops()
1332 inode->i_mapping->a_ops = &xfs_address_space_operations; in xfs_setup_iops()
1335 if (xfs_has_asciici(XFS_M(inode->i_sb))) in xfs_setup_iops()
1336 inode->i_op = &xfs_dir_ci_inode_operations; in xfs_setup_iops()
1338 inode->i_op = &xfs_dir_inode_operations; in xfs_setup_iops()
1339 inode->i_fop = &xfs_dir_file_operations; in xfs_setup_iops()
1342 inode->i_op = &xfs_symlink_inode_operations; in xfs_setup_iops()
1345 inode->i_op = &xfs_inode_operations; in xfs_setup_iops()
1346 init_special_inode(inode, inode->i_mode, inode->i_rdev); in xfs_setup_iops()