42 #include <linux/capability.h>
43 #include <linux/xattr.h>
48 #include <linux/slab.h>
53 const struct xattr *xattr_array,
57 struct xfs_inode *
ip = XFS_I(inode);
60 for (xattr = xattr_array; xattr->
name !=
NULL; xattr++) {
83 &xfs_initxattrs,
NULL);
108 xfs_dentry_to_name(&teardown, dentry);
110 xfs_remove(XFS_I(dir), &teardown, XFS_I(inode));
122 struct xfs_inode *ip =
NULL;
134 rdev = sysv_encode_dev(rdev);
141 if (IS_ERR(default_acl))
142 return PTR_ERR(default_acl);
148 xfs_dentry_to_name(&name, dentry);
149 error =
xfs_create(XFS_I(dir), &name, mode, rdev, &ip);
157 goto out_cleanup_inode;
163 goto out_cleanup_inode;
173 posix_acl_release(default_acl);
202 struct xfs_inode *cip;
209 xfs_dentry_to_name(&name, dentry);
213 return ERR_PTR(-error);
227 struct xfs_inode *
ip;
236 xfs_dentry_to_name(&xname, dentry);
237 error =
xfs_lookup(XFS_I(dir), &xname, &ip, &ci_name);
240 return ERR_PTR(-error);
255 dname.len = ci_name.
len;
256 dentry =
d_add_ci(dentry, VFS_I(ip), &dname);
263 struct dentry *old_dentry,
267 struct inode *inode = old_dentry->
d_inode;
271 xfs_dentry_to_name(&name, dentry);
273 error =
xfs_link(XFS_I(dir), XFS_I(inode), &name);
290 xfs_dentry_to_name(&name, dentry);
301 if (xfs_sb_version_hasasciici(&
XFS_M(dir->
i_sb)->m_sb))
313 struct xfs_inode *cip =
NULL;
320 xfs_dentry_to_name(&name, dentry);
322 error =
xfs_symlink(XFS_I(dir), &name, symname, mode, &cip);
330 goto out_cleanup_inode;
352 xfs_dentry_to_name(&oname, odentry);
353 xfs_dentry_to_name(&nname, ndentry);
356 XFS_I(ndir), &nname, new_inode ?
357 XFS_I(new_inode) :
NULL);
381 nd_set_link(nd, link);
387 nd_set_link(nd, ERR_PTR(error));
397 char *
s = nd_get_link(nd);
409 struct inode *inode = dentry->
d_inode;
410 struct xfs_inode *ip = XFS_I(inode);
411 struct xfs_mount *
mp = ip->i_mount;
413 trace_xfs_getattr(ip);
415 if (XFS_FORCED_SHUTDOWN(mp))
418 stat->
size = XFS_ISIZE(ip);
419 stat->
dev = inode->
i_sb->s_dev;
420 stat->
mode = ip->i_d.di_mode;
421 stat->
nlink = ip->i_d.di_nlink;
422 stat->
uid = ip->i_d.di_uid;
423 stat->
gid = ip->i_d.di_gid;
424 stat->
ino = ip->i_ino;
436 stat->
rdev =
MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff,
437 sysv_minor(ip->i_df.if_u2.if_rdev));
449 stat->
blksize = xfs_preferred_iosize(mp);
459 struct xfs_inode *ip,
463 xfs_mount_t *
mp = ip->i_mount;
464 struct inode *inode = VFS_I(ip);
473 trace_xfs_setattr(ip);
475 if (mp->m_flags & XFS_MOUNT_RDONLY)
478 if (XFS_FORCED_SHUTDOWN(mp))
502 uid = ip->i_d.di_uid;
508 gid = ip->i_d.di_gid;
519 qflags, &udqp, &gdqp);
541 iuid = ip->i_d.di_uid;
542 igid = ip->i_d.di_gid;
558 goto out_trans_cancel;
587 &ip->i_udquot, udqp);
589 ip->i_d.di_uid =
uid;
598 &ip->i_gdquot, gdqp);
600 ip->i_d.di_gid =
gid;
614 ip->i_d.di_mode &=
S_IFMT;
615 ip->i_d.di_mode |= mode & ~
S_IFMT;
626 ip->i_d.di_atime.t_sec = iattr->
ia_atime.tv_sec;
627 ip->i_d.di_atime.t_nsec = iattr->
ia_atime.tv_nsec;
631 ip->i_d.di_ctime.t_sec = iattr->
ia_ctime.tv_sec;
632 ip->i_d.di_ctime.t_nsec = iattr->
ia_ctime.tv_nsec;
636 ip->i_d.di_mtime.t_sec = iattr->
ia_mtime.tv_sec;
637 ip->i_d.di_mtime.t_nsec = iattr->
ia_mtime.tv_nsec;
644 if (mp->m_flags & XFS_MOUNT_WSYNC)
645 xfs_trans_set_sync(tp);
690 struct xfs_inode *ip,
694 struct xfs_mount *
mp = ip->i_mount;
695 struct inode *inode = VFS_I(ip);
697 xfs_off_t oldsize, newsize;
698 struct xfs_trans *tp;
701 uint commit_flags = 0;
703 trace_xfs_setattr(ip);
705 if (mp->m_flags & XFS_MOUNT_RDONLY)
708 if (XFS_FORCED_SHUTDOWN(mp))
721 lock_flags |= XFS_IOLOCK_EXCL;
731 if (newsize == 0 && oldsize == 0 && ip->i_d.di_nextents == 0) {
757 if (newsize > oldsize) {
781 if (oldsize != ip->i_d.di_size && newsize > ip->i_d.di_size) {
802 goto out_trans_cancel;
807 lock_flags |= XFS_ILOCK_EXCL;
841 ip->i_d.di_size = newsize;
844 if (newsize <= oldsize) {
847 goto out_trans_abort;
856 xfs_iflags_set(ip, XFS_ITRUNCATED);
861 ip->i_d.di_ctime.t_sec = iattr->
ia_ctime.tv_sec;
862 ip->i_d.di_ctime.t_nsec = iattr->
ia_ctime.tv_nsec;
866 ip->i_d.di_mtime.t_sec = iattr->
ia_mtime.tv_sec;
867 ip->i_d.di_mtime.t_nsec = iattr->
ia_mtime.tv_nsec;
874 if (mp->m_flags & XFS_MOUNT_WSYNC)
875 xfs_trans_set_sync(tp);
906 struct xfs_inode *ip = XFS_I(inode);
907 struct xfs_mount *
mp = ip->i_mount;
908 struct xfs_trans *tp;
911 trace_xfs_update_time(ip);
923 ip->i_d.di_ctime.t_sec = (__int32_t)now->
tv_sec;
924 ip->i_d.di_ctime.t_nsec = (__int32_t)now->
tv_nsec;
928 ip->i_d.di_mtime.t_sec = (__int32_t)now->
tv_sec;
929 ip->i_d.di_mtime.t_nsec = (__int32_t)now->
tv_nsec;
933 ip->i_d.di_atime.t_sec = (__int32_t)now->
tv_sec;
934 ip->i_d.di_atime.t_nsec = (__int32_t)now->
tv_nsec;
941 #define XFS_FIEMAP_FLAGS (FIEMAP_FLAG_SYNC|FIEMAP_FLAG_XATTR)
955 u32 fiemap_flags = 0;
976 length, fiemap_flags);
992 xfs_inode_t *ip = XFS_I(inode);
1106 struct inode *inode,
1107 struct xfs_inode *ip)
1141 struct xfs_inode *ip)
1143 struct inode *inode = &ip->i_vnode;
1145 inode->
i_ino = ip->i_ino;
1150 hlist_add_fake(&inode->
i_hash);
1152 inode->
i_mode = ip->i_d.di_mode;
1154 inode->
i_uid = ip->i_d.di_uid;
1155 inode->
i_gid = ip->i_d.di_gid;
1161 MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff,
1162 sysv_minor(ip->i_df.if_u2.if_rdev));
1170 i_size_write(inode, ip->i_d.di_size);
1171 inode->
i_atime.tv_sec = ip->i_d.di_atime.t_sec;
1172 inode->
i_atime.tv_nsec = ip->i_d.di_atime.t_nsec;
1173 inode->
i_mtime.tv_sec = ip->i_d.di_mtime.t_sec;
1174 inode->
i_mtime.tv_nsec = ip->i_d.di_mtime.t_nsec;
1175 inode->
i_ctime.tv_sec = ip->i_d.di_ctime.t_sec;
1176 inode->
i_ctime.tv_nsec = ip->i_d.di_ctime.t_nsec;
1181 inode->
i_op = &xfs_inode_operations;
1186 if (xfs_sb_version_hasasciici(&
XFS_M(inode->
i_sb)->m_sb))
1187 inode->
i_op = &xfs_dir_ci_inode_operations;
1189 inode->
i_op = &xfs_dir_inode_operations;
1193 inode->
i_op = &xfs_symlink_inode_operations;
1198 inode->
i_op = &xfs_inode_operations;
1208 inode_has_no_xattr(inode);
1209 cache_no_acl(inode);
1212 xfs_iflags_clear(ip, XFS_INEW);