diff options
Diffstat (limited to 'fs/xfs/xfs_iops.c')
-rw-r--r-- | fs/xfs/xfs_iops.c | 71 |
1 files changed, 8 insertions, 63 deletions
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index ab302539e5b9..3011b879f850 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c | |||
@@ -50,65 +50,15 @@ | |||
50 | #include <linux/fiemap.h> | 50 | #include <linux/fiemap.h> |
51 | #include <linux/slab.h> | 51 | #include <linux/slab.h> |
52 | 52 | ||
53 | /* | 53 | static int |
54 | * Bring the timestamps in the XFS inode uptodate. | 54 | xfs_initxattrs( |
55 | * | 55 | struct inode *inode, |
56 | * Used before writing the inode to disk. | 56 | const struct xattr *xattr_array, |
57 | */ | 57 | void *fs_info) |
58 | void | ||
59 | xfs_synchronize_times( | ||
60 | xfs_inode_t *ip) | ||
61 | { | ||
62 | struct inode *inode = VFS_I(ip); | ||
63 | |||
64 | ip->i_d.di_atime.t_sec = (__int32_t)inode->i_atime.tv_sec; | ||
65 | ip->i_d.di_atime.t_nsec = (__int32_t)inode->i_atime.tv_nsec; | ||
66 | ip->i_d.di_ctime.t_sec = (__int32_t)inode->i_ctime.tv_sec; | ||
67 | ip->i_d.di_ctime.t_nsec = (__int32_t)inode->i_ctime.tv_nsec; | ||
68 | ip->i_d.di_mtime.t_sec = (__int32_t)inode->i_mtime.tv_sec; | ||
69 | ip->i_d.di_mtime.t_nsec = (__int32_t)inode->i_mtime.tv_nsec; | ||
70 | } | ||
71 | |||
72 | /* | ||
73 | * If the linux inode is valid, mark it dirty, else mark the dirty state | ||
74 | * in the XFS inode to make sure we pick it up when reclaiming the inode. | ||
75 | */ | ||
76 | void | ||
77 | xfs_mark_inode_dirty_sync( | ||
78 | xfs_inode_t *ip) | ||
79 | { | ||
80 | struct inode *inode = VFS_I(ip); | ||
81 | |||
82 | if (!(inode->i_state & (I_WILL_FREE|I_FREEING))) | ||
83 | mark_inode_dirty_sync(inode); | ||
84 | else { | ||
85 | barrier(); | ||
86 | ip->i_update_core = 1; | ||
87 | } | ||
88 | } | ||
89 | |||
90 | void | ||
91 | xfs_mark_inode_dirty( | ||
92 | xfs_inode_t *ip) | ||
93 | { | ||
94 | struct inode *inode = VFS_I(ip); | ||
95 | |||
96 | if (!(inode->i_state & (I_WILL_FREE|I_FREEING))) | ||
97 | mark_inode_dirty(inode); | ||
98 | else { | ||
99 | barrier(); | ||
100 | ip->i_update_core = 1; | ||
101 | } | ||
102 | |||
103 | } | ||
104 | |||
105 | |||
106 | int xfs_initxattrs(struct inode *inode, const struct xattr *xattr_array, | ||
107 | void *fs_info) | ||
108 | { | 58 | { |
109 | const struct xattr *xattr; | 59 | const struct xattr *xattr; |
110 | struct xfs_inode *ip = XFS_I(inode); | 60 | struct xfs_inode *ip = XFS_I(inode); |
111 | int error = 0; | 61 | int error = 0; |
112 | 62 | ||
113 | for (xattr = xattr_array; xattr->name != NULL; xattr++) { | 63 | for (xattr = xattr_array; xattr->name != NULL; xattr++) { |
114 | error = xfs_attr_set(ip, xattr->name, xattr->value, | 64 | error = xfs_attr_set(ip, xattr->name, xattr->value, |
@@ -678,19 +628,16 @@ xfs_setattr_nonsize( | |||
678 | inode->i_atime = iattr->ia_atime; | 628 | inode->i_atime = iattr->ia_atime; |
679 | ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec; | 629 | ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec; |
680 | ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec; | 630 | ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec; |
681 | ip->i_update_core = 1; | ||
682 | } | 631 | } |
683 | if (mask & ATTR_CTIME) { | 632 | if (mask & ATTR_CTIME) { |
684 | inode->i_ctime = iattr->ia_ctime; | 633 | inode->i_ctime = iattr->ia_ctime; |
685 | ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; | 634 | ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; |
686 | ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec; | 635 | ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec; |
687 | ip->i_update_core = 1; | ||
688 | } | 636 | } |
689 | if (mask & ATTR_MTIME) { | 637 | if (mask & ATTR_MTIME) { |
690 | inode->i_mtime = iattr->ia_mtime; | 638 | inode->i_mtime = iattr->ia_mtime; |
691 | ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec; | 639 | ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec; |
692 | ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec; | 640 | ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec; |
693 | ip->i_update_core = 1; | ||
694 | } | 641 | } |
695 | 642 | ||
696 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); | 643 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); |
@@ -918,13 +865,11 @@ xfs_setattr_size( | |||
918 | inode->i_ctime = iattr->ia_ctime; | 865 | inode->i_ctime = iattr->ia_ctime; |
919 | ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; | 866 | ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; |
920 | ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec; | 867 | ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec; |
921 | ip->i_update_core = 1; | ||
922 | } | 868 | } |
923 | if (mask & ATTR_MTIME) { | 869 | if (mask & ATTR_MTIME) { |
924 | inode->i_mtime = iattr->ia_mtime; | 870 | inode->i_mtime = iattr->ia_mtime; |
925 | ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec; | 871 | ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec; |
926 | ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec; | 872 | ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec; |
927 | ip->i_update_core = 1; | ||
928 | } | 873 | } |
929 | 874 | ||
930 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); | 875 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); |