diff options
author | Gu Zheng <guz.fnst@cn.fujitsu.com> | 2013-07-15 05:57:38 -0400 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk.kim@samsung.com> | 2013-07-30 02:17:02 -0400 |
commit | 4559071063270999d016c92a0b9241692cbbb522 (patch) | |
tree | 06e530ac8b0d5e80c4bd15011f019f666689279b /fs/f2fs/node.h | |
parent | 963d4f7d7be6f9dba77362941921c33034fee91e (diff) |
f2fs: introduce help function F2FS_NODE()
Introduce help function F2FS_NODE() to simplify the conversion of node_page to
f2fs_node.
Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Diffstat (limited to 'fs/f2fs/node.h')
-rw-r--r-- | fs/f2fs/node.h | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h index c65fb4f4230f..87349c4ea0ef 100644 --- a/fs/f2fs/node.h +++ b/fs/f2fs/node.h | |||
@@ -155,8 +155,7 @@ static inline void set_to_next_nat(struct f2fs_nm_info *nm_i, nid_t start_nid) | |||
155 | static inline void fill_node_footer(struct page *page, nid_t nid, | 155 | static inline void fill_node_footer(struct page *page, nid_t nid, |
156 | nid_t ino, unsigned int ofs, bool reset) | 156 | nid_t ino, unsigned int ofs, bool reset) |
157 | { | 157 | { |
158 | void *kaddr = page_address(page); | 158 | struct f2fs_node *rn = F2FS_NODE(page); |
159 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | ||
160 | if (reset) | 159 | if (reset) |
161 | memset(rn, 0, sizeof(*rn)); | 160 | memset(rn, 0, sizeof(*rn)); |
162 | rn->footer.nid = cpu_to_le32(nid); | 161 | rn->footer.nid = cpu_to_le32(nid); |
@@ -166,10 +165,8 @@ static inline void fill_node_footer(struct page *page, nid_t nid, | |||
166 | 165 | ||
167 | static inline void copy_node_footer(struct page *dst, struct page *src) | 166 | static inline void copy_node_footer(struct page *dst, struct page *src) |
168 | { | 167 | { |
169 | void *src_addr = page_address(src); | 168 | struct f2fs_node *src_rn = F2FS_NODE(src); |
170 | void *dst_addr = page_address(dst); | 169 | struct f2fs_node *dst_rn = F2FS_NODE(dst); |
171 | struct f2fs_node *src_rn = (struct f2fs_node *)src_addr; | ||
172 | struct f2fs_node *dst_rn = (struct f2fs_node *)dst_addr; | ||
173 | memcpy(&dst_rn->footer, &src_rn->footer, sizeof(struct node_footer)); | 170 | memcpy(&dst_rn->footer, &src_rn->footer, sizeof(struct node_footer)); |
174 | } | 171 | } |
175 | 172 | ||
@@ -177,45 +174,40 @@ static inline void fill_node_footer_blkaddr(struct page *page, block_t blkaddr) | |||
177 | { | 174 | { |
178 | struct f2fs_sb_info *sbi = F2FS_SB(page->mapping->host->i_sb); | 175 | struct f2fs_sb_info *sbi = F2FS_SB(page->mapping->host->i_sb); |
179 | struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); | 176 | struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); |
180 | void *kaddr = page_address(page); | 177 | struct f2fs_node *rn = F2FS_NODE(page); |
181 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | 178 | |
182 | rn->footer.cp_ver = ckpt->checkpoint_ver; | 179 | rn->footer.cp_ver = ckpt->checkpoint_ver; |
183 | rn->footer.next_blkaddr = cpu_to_le32(blkaddr); | 180 | rn->footer.next_blkaddr = cpu_to_le32(blkaddr); |
184 | } | 181 | } |
185 | 182 | ||
186 | static inline nid_t ino_of_node(struct page *node_page) | 183 | static inline nid_t ino_of_node(struct page *node_page) |
187 | { | 184 | { |
188 | void *kaddr = page_address(node_page); | 185 | struct f2fs_node *rn = F2FS_NODE(node_page); |
189 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | ||
190 | return le32_to_cpu(rn->footer.ino); | 186 | return le32_to_cpu(rn->footer.ino); |
191 | } | 187 | } |
192 | 188 | ||
193 | static inline nid_t nid_of_node(struct page *node_page) | 189 | static inline nid_t nid_of_node(struct page *node_page) |
194 | { | 190 | { |
195 | void *kaddr = page_address(node_page); | 191 | struct f2fs_node *rn = F2FS_NODE(node_page); |
196 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | ||
197 | return le32_to_cpu(rn->footer.nid); | 192 | return le32_to_cpu(rn->footer.nid); |
198 | } | 193 | } |
199 | 194 | ||
200 | static inline unsigned int ofs_of_node(struct page *node_page) | 195 | static inline unsigned int ofs_of_node(struct page *node_page) |
201 | { | 196 | { |
202 | void *kaddr = page_address(node_page); | 197 | struct f2fs_node *rn = F2FS_NODE(node_page); |
203 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | ||
204 | unsigned flag = le32_to_cpu(rn->footer.flag); | 198 | unsigned flag = le32_to_cpu(rn->footer.flag); |
205 | return flag >> OFFSET_BIT_SHIFT; | 199 | return flag >> OFFSET_BIT_SHIFT; |
206 | } | 200 | } |
207 | 201 | ||
208 | static inline unsigned long long cpver_of_node(struct page *node_page) | 202 | static inline unsigned long long cpver_of_node(struct page *node_page) |
209 | { | 203 | { |
210 | void *kaddr = page_address(node_page); | 204 | struct f2fs_node *rn = F2FS_NODE(node_page); |
211 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | ||
212 | return le64_to_cpu(rn->footer.cp_ver); | 205 | return le64_to_cpu(rn->footer.cp_ver); |
213 | } | 206 | } |
214 | 207 | ||
215 | static inline block_t next_blkaddr_of_node(struct page *node_page) | 208 | static inline block_t next_blkaddr_of_node(struct page *node_page) |
216 | { | 209 | { |
217 | void *kaddr = page_address(node_page); | 210 | struct f2fs_node *rn = F2FS_NODE(node_page); |
218 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | ||
219 | return le32_to_cpu(rn->footer.next_blkaddr); | 211 | return le32_to_cpu(rn->footer.next_blkaddr); |
220 | } | 212 | } |
221 | 213 | ||
@@ -250,7 +242,7 @@ static inline bool IS_DNODE(struct page *node_page) | |||
250 | 242 | ||
251 | static inline void set_nid(struct page *p, int off, nid_t nid, bool i) | 243 | static inline void set_nid(struct page *p, int off, nid_t nid, bool i) |
252 | { | 244 | { |
253 | struct f2fs_node *rn = (struct f2fs_node *)page_address(p); | 245 | struct f2fs_node *rn = F2FS_NODE(p); |
254 | 246 | ||
255 | wait_on_page_writeback(p); | 247 | wait_on_page_writeback(p); |
256 | 248 | ||
@@ -263,7 +255,8 @@ static inline void set_nid(struct page *p, int off, nid_t nid, bool i) | |||
263 | 255 | ||
264 | static inline nid_t get_nid(struct page *p, int off, bool i) | 256 | static inline nid_t get_nid(struct page *p, int off, bool i) |
265 | { | 257 | { |
266 | struct f2fs_node *rn = (struct f2fs_node *)page_address(p); | 258 | struct f2fs_node *rn = F2FS_NODE(p); |
259 | |||
267 | if (i) | 260 | if (i) |
268 | return le32_to_cpu(rn->i.i_nid[off - NODE_DIR1_BLOCK]); | 261 | return le32_to_cpu(rn->i.i_nid[off - NODE_DIR1_BLOCK]); |
269 | return le32_to_cpu(rn->in.nid[off]); | 262 | return le32_to_cpu(rn->in.nid[off]); |
@@ -314,8 +307,7 @@ static inline void clear_cold_data(struct page *page) | |||
314 | 307 | ||
315 | static inline int is_node(struct page *page, int type) | 308 | static inline int is_node(struct page *page, int type) |
316 | { | 309 | { |
317 | void *kaddr = page_address(page); | 310 | struct f2fs_node *rn = F2FS_NODE(page); |
318 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | ||
319 | return le32_to_cpu(rn->footer.flag) & (1 << type); | 311 | return le32_to_cpu(rn->footer.flag) & (1 << type); |
320 | } | 312 | } |
321 | 313 | ||
@@ -325,7 +317,7 @@ static inline int is_node(struct page *page, int type) | |||
325 | 317 | ||
326 | static inline void set_cold_node(struct inode *inode, struct page *page) | 318 | static inline void set_cold_node(struct inode *inode, struct page *page) |
327 | { | 319 | { |
328 | struct f2fs_node *rn = (struct f2fs_node *)page_address(page); | 320 | struct f2fs_node *rn = F2FS_NODE(page); |
329 | unsigned int flag = le32_to_cpu(rn->footer.flag); | 321 | unsigned int flag = le32_to_cpu(rn->footer.flag); |
330 | 322 | ||
331 | if (S_ISDIR(inode->i_mode)) | 323 | if (S_ISDIR(inode->i_mode)) |
@@ -337,7 +329,7 @@ static inline void set_cold_node(struct inode *inode, struct page *page) | |||
337 | 329 | ||
338 | static inline void set_mark(struct page *page, int mark, int type) | 330 | static inline void set_mark(struct page *page, int mark, int type) |
339 | { | 331 | { |
340 | struct f2fs_node *rn = (struct f2fs_node *)page_address(page); | 332 | struct f2fs_node *rn = F2FS_NODE(page); |
341 | unsigned int flag = le32_to_cpu(rn->footer.flag); | 333 | unsigned int flag = le32_to_cpu(rn->footer.flag); |
342 | if (mark) | 334 | if (mark) |
343 | flag |= (0x1 << type); | 335 | flag |= (0x1 << type); |