diff options
author | Christoph Hellwig <hch@infradead.org> | 2013-12-12 19:00:43 -0500 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2013-12-12 19:00:43 -0500 |
commit | ce9641d6c981aad0463b2d1455f0b60e5c8671c5 (patch) | |
tree | f5b07df05879ff2612d39a38b858f881d172fa3a | |
parent | 7aeb72224120e0c49ba4c93d75f8f0d6a87f6afd (diff) |
xfs: refactor xfs_inode_item_size
Split out two helpers to size the data and attribute to make the
function more readable.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
-rw-r--r-- | fs/xfs/xfs_inode_item.c | 62 |
1 files changed, 35 insertions, 27 deletions
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c index 7c0d391f9a6e..050d2540f7b4 100644 --- a/fs/xfs/xfs_inode_item.c +++ b/fs/xfs/xfs_inode_item.c | |||
@@ -39,27 +39,14 @@ static inline struct xfs_inode_log_item *INODE_ITEM(struct xfs_log_item *lip) | |||
39 | return container_of(lip, struct xfs_inode_log_item, ili_item); | 39 | return container_of(lip, struct xfs_inode_log_item, ili_item); |
40 | } | 40 | } |
41 | 41 | ||
42 | |||
43 | /* | ||
44 | * This returns the number of iovecs needed to log the given inode item. | ||
45 | * | ||
46 | * We need one iovec for the inode log format structure, one for the | ||
47 | * inode core, and possibly one for the inode data/extents/b-tree root | ||
48 | * and one for the inode attribute data/extents/b-tree root. | ||
49 | */ | ||
50 | STATIC void | 42 | STATIC void |
51 | xfs_inode_item_size( | 43 | xfs_inode_item_data_fork_size( |
52 | struct xfs_log_item *lip, | 44 | struct xfs_inode_log_item *iip, |
53 | int *nvecs, | 45 | int *nvecs, |
54 | int *nbytes) | 46 | int *nbytes) |
55 | { | 47 | { |
56 | struct xfs_inode_log_item *iip = INODE_ITEM(lip); | ||
57 | struct xfs_inode *ip = iip->ili_inode; | 48 | struct xfs_inode *ip = iip->ili_inode; |
58 | 49 | ||
59 | *nvecs += 2; | ||
60 | *nbytes += sizeof(struct xfs_inode_log_format) + | ||
61 | xfs_icdinode_size(ip->i_d.di_version); | ||
62 | |||
63 | switch (ip->i_d.di_format) { | 50 | switch (ip->i_d.di_format) { |
64 | case XFS_DINODE_FMT_EXTENTS: | 51 | case XFS_DINODE_FMT_EXTENTS: |
65 | if ((iip->ili_fields & XFS_ILOG_DEXT) && | 52 | if ((iip->ili_fields & XFS_ILOG_DEXT) && |
@@ -70,7 +57,6 @@ xfs_inode_item_size( | |||
70 | *nvecs += 1; | 57 | *nvecs += 1; |
71 | } | 58 | } |
72 | break; | 59 | break; |
73 | |||
74 | case XFS_DINODE_FMT_BTREE: | 60 | case XFS_DINODE_FMT_BTREE: |
75 | if ((iip->ili_fields & XFS_ILOG_DBROOT) && | 61 | if ((iip->ili_fields & XFS_ILOG_DBROOT) && |
76 | ip->i_df.if_broot_bytes > 0) { | 62 | ip->i_df.if_broot_bytes > 0) { |
@@ -78,7 +64,6 @@ xfs_inode_item_size( | |||
78 | *nvecs += 1; | 64 | *nvecs += 1; |
79 | } | 65 | } |
80 | break; | 66 | break; |
81 | |||
82 | case XFS_DINODE_FMT_LOCAL: | 67 | case XFS_DINODE_FMT_LOCAL: |
83 | if ((iip->ili_fields & XFS_ILOG_DDATA) && | 68 | if ((iip->ili_fields & XFS_ILOG_DDATA) && |
84 | ip->i_df.if_bytes > 0) { | 69 | ip->i_df.if_bytes > 0) { |
@@ -90,19 +75,20 @@ xfs_inode_item_size( | |||
90 | case XFS_DINODE_FMT_DEV: | 75 | case XFS_DINODE_FMT_DEV: |
91 | case XFS_DINODE_FMT_UUID: | 76 | case XFS_DINODE_FMT_UUID: |
92 | break; | 77 | break; |
93 | |||
94 | default: | 78 | default: |
95 | ASSERT(0); | 79 | ASSERT(0); |
96 | break; | 80 | break; |
97 | } | 81 | } |
82 | } | ||
98 | 83 | ||
99 | if (!XFS_IFORK_Q(ip)) | 84 | STATIC void |
100 | return; | 85 | xfs_inode_item_attr_fork_size( |
101 | 86 | struct xfs_inode_log_item *iip, | |
87 | int *nvecs, | ||
88 | int *nbytes) | ||
89 | { | ||
90 | struct xfs_inode *ip = iip->ili_inode; | ||
102 | 91 | ||
103 | /* | ||
104 | * Log any necessary attribute data. | ||
105 | */ | ||
106 | switch (ip->i_d.di_aformat) { | 92 | switch (ip->i_d.di_aformat) { |
107 | case XFS_DINODE_FMT_EXTENTS: | 93 | case XFS_DINODE_FMT_EXTENTS: |
108 | if ((iip->ili_fields & XFS_ILOG_AEXT) && | 94 | if ((iip->ili_fields & XFS_ILOG_AEXT) && |
@@ -113,7 +99,6 @@ xfs_inode_item_size( | |||
113 | *nvecs += 1; | 99 | *nvecs += 1; |
114 | } | 100 | } |
115 | break; | 101 | break; |
116 | |||
117 | case XFS_DINODE_FMT_BTREE: | 102 | case XFS_DINODE_FMT_BTREE: |
118 | if ((iip->ili_fields & XFS_ILOG_ABROOT) && | 103 | if ((iip->ili_fields & XFS_ILOG_ABROOT) && |
119 | ip->i_afp->if_broot_bytes > 0) { | 104 | ip->i_afp->if_broot_bytes > 0) { |
@@ -121,7 +106,6 @@ xfs_inode_item_size( | |||
121 | *nvecs += 1; | 106 | *nvecs += 1; |
122 | } | 107 | } |
123 | break; | 108 | break; |
124 | |||
125 | case XFS_DINODE_FMT_LOCAL: | 109 | case XFS_DINODE_FMT_LOCAL: |
126 | if ((iip->ili_fields & XFS_ILOG_ADATA) && | 110 | if ((iip->ili_fields & XFS_ILOG_ADATA) && |
127 | ip->i_afp->if_bytes > 0) { | 111 | ip->i_afp->if_bytes > 0) { |
@@ -129,7 +113,6 @@ xfs_inode_item_size( | |||
129 | *nvecs += 1; | 113 | *nvecs += 1; |
130 | } | 114 | } |
131 | break; | 115 | break; |
132 | |||
133 | default: | 116 | default: |
134 | ASSERT(0); | 117 | ASSERT(0); |
135 | break; | 118 | break; |
@@ -137,6 +120,31 @@ xfs_inode_item_size( | |||
137 | } | 120 | } |
138 | 121 | ||
139 | /* | 122 | /* |
123 | * This returns the number of iovecs needed to log the given inode item. | ||
124 | * | ||
125 | * We need one iovec for the inode log format structure, one for the | ||
126 | * inode core, and possibly one for the inode data/extents/b-tree root | ||
127 | * and one for the inode attribute data/extents/b-tree root. | ||
128 | */ | ||
129 | STATIC void | ||
130 | xfs_inode_item_size( | ||
131 | struct xfs_log_item *lip, | ||
132 | int *nvecs, | ||
133 | int *nbytes) | ||
134 | { | ||
135 | struct xfs_inode_log_item *iip = INODE_ITEM(lip); | ||
136 | struct xfs_inode *ip = iip->ili_inode; | ||
137 | |||
138 | *nvecs += 2; | ||
139 | *nbytes += sizeof(struct xfs_inode_log_format) + | ||
140 | xfs_icdinode_size(ip->i_d.di_version); | ||
141 | |||
142 | xfs_inode_item_data_fork_size(iip, nvecs, nbytes); | ||
143 | if (XFS_IFORK_Q(ip)) | ||
144 | xfs_inode_item_attr_fork_size(iip, nvecs, nbytes); | ||
145 | } | ||
146 | |||
147 | /* | ||
140 | * xfs_inode_item_format_extents - convert in-core extents to on-disk form | 148 | * xfs_inode_item_format_extents - convert in-core extents to on-disk form |
141 | * | 149 | * |
142 | * For either the data or attr fork in extent format, we need to endian convert | 150 | * For either the data or attr fork in extent format, we need to endian convert |