diff options
Diffstat (limited to 'fs/f2fs/node.h')
-rw-r--r-- | fs/f2fs/node.h | 68 |
1 files changed, 23 insertions, 45 deletions
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h index 0a2d72f0024d..c65fb4f4230f 100644 --- a/fs/f2fs/node.h +++ b/fs/f2fs/node.h | |||
@@ -275,25 +275,27 @@ static inline nid_t get_nid(struct page *p, int off, bool i) | |||
275 | * - Mark cold node blocks in their node footer | 275 | * - Mark cold node blocks in their node footer |
276 | * - Mark cold data pages in page cache | 276 | * - Mark cold data pages in page cache |
277 | */ | 277 | */ |
278 | static inline int is_cold_file(struct inode *inode) | 278 | static inline int is_file(struct inode *inode, int type) |
279 | { | 279 | { |
280 | return F2FS_I(inode)->i_advise & FADVISE_COLD_BIT; | 280 | return F2FS_I(inode)->i_advise & type; |
281 | } | 281 | } |
282 | 282 | ||
283 | static inline void set_cold_file(struct inode *inode) | 283 | static inline void set_file(struct inode *inode, int type) |
284 | { | 284 | { |
285 | F2FS_I(inode)->i_advise |= FADVISE_COLD_BIT; | 285 | F2FS_I(inode)->i_advise |= type; |
286 | } | 286 | } |
287 | 287 | ||
288 | static inline int is_cp_file(struct inode *inode) | 288 | static inline void clear_file(struct inode *inode, int type) |
289 | { | 289 | { |
290 | return F2FS_I(inode)->i_advise & FADVISE_CP_BIT; | 290 | F2FS_I(inode)->i_advise &= ~type; |
291 | } | 291 | } |
292 | 292 | ||
293 | static inline void set_cp_file(struct inode *inode) | 293 | #define file_is_cold(inode) is_file(inode, FADVISE_COLD_BIT) |
294 | { | 294 | #define file_wrong_pino(inode) is_file(inode, FADVISE_LOST_PINO_BIT) |
295 | F2FS_I(inode)->i_advise |= FADVISE_CP_BIT; | 295 | #define file_set_cold(inode) set_file(inode, FADVISE_COLD_BIT) |
296 | } | 296 | #define file_lost_pino(inode) set_file(inode, FADVISE_LOST_PINO_BIT) |
297 | #define file_clear_cold(inode) clear_file(inode, FADVISE_COLD_BIT) | ||
298 | #define file_got_pino(inode) clear_file(inode, FADVISE_LOST_PINO_BIT) | ||
297 | 299 | ||
298 | static inline int is_cold_data(struct page *page) | 300 | static inline int is_cold_data(struct page *page) |
299 | { | 301 | { |
@@ -310,29 +312,16 @@ static inline void clear_cold_data(struct page *page) | |||
310 | ClearPageChecked(page); | 312 | ClearPageChecked(page); |
311 | } | 313 | } |
312 | 314 | ||
313 | static inline int is_cold_node(struct page *page) | 315 | static inline int is_node(struct page *page, int type) |
314 | { | 316 | { |
315 | void *kaddr = page_address(page); | 317 | void *kaddr = page_address(page); |
316 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | 318 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; |
317 | unsigned int flag = le32_to_cpu(rn->footer.flag); | 319 | return le32_to_cpu(rn->footer.flag) & (1 << type); |
318 | return flag & (0x1 << COLD_BIT_SHIFT); | ||
319 | } | 320 | } |
320 | 321 | ||
321 | static inline unsigned char is_fsync_dnode(struct page *page) | 322 | #define is_cold_node(page) is_node(page, COLD_BIT_SHIFT) |
322 | { | 323 | #define is_fsync_dnode(page) is_node(page, FSYNC_BIT_SHIFT) |
323 | void *kaddr = page_address(page); | 324 | #define is_dent_dnode(page) is_node(page, DENT_BIT_SHIFT) |
324 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | ||
325 | unsigned int flag = le32_to_cpu(rn->footer.flag); | ||
326 | return flag & (0x1 << FSYNC_BIT_SHIFT); | ||
327 | } | ||
328 | |||
329 | static inline unsigned char is_dent_dnode(struct page *page) | ||
330 | { | ||
331 | void *kaddr = page_address(page); | ||
332 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | ||
333 | unsigned int flag = le32_to_cpu(rn->footer.flag); | ||
334 | return flag & (0x1 << DENT_BIT_SHIFT); | ||
335 | } | ||
336 | 325 | ||
337 | static inline void set_cold_node(struct inode *inode, struct page *page) | 326 | static inline void set_cold_node(struct inode *inode, struct page *page) |
338 | { | 327 | { |
@@ -346,26 +335,15 @@ static inline void set_cold_node(struct inode *inode, struct page *page) | |||
346 | rn->footer.flag = cpu_to_le32(flag); | 335 | rn->footer.flag = cpu_to_le32(flag); |
347 | } | 336 | } |
348 | 337 | ||
349 | static inline void set_fsync_mark(struct page *page, int mark) | 338 | static inline void set_mark(struct page *page, int mark, int type) |
350 | { | 339 | { |
351 | void *kaddr = page_address(page); | 340 | struct f2fs_node *rn = (struct f2fs_node *)page_address(page); |
352 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | ||
353 | unsigned int flag = le32_to_cpu(rn->footer.flag); | ||
354 | if (mark) | ||
355 | flag |= (0x1 << FSYNC_BIT_SHIFT); | ||
356 | else | ||
357 | flag &= ~(0x1 << FSYNC_BIT_SHIFT); | ||
358 | rn->footer.flag = cpu_to_le32(flag); | ||
359 | } | ||
360 | |||
361 | static inline void set_dentry_mark(struct page *page, int mark) | ||
362 | { | ||
363 | void *kaddr = page_address(page); | ||
364 | struct f2fs_node *rn = (struct f2fs_node *)kaddr; | ||
365 | unsigned int flag = le32_to_cpu(rn->footer.flag); | 341 | unsigned int flag = le32_to_cpu(rn->footer.flag); |
366 | if (mark) | 342 | if (mark) |
367 | flag |= (0x1 << DENT_BIT_SHIFT); | 343 | flag |= (0x1 << type); |
368 | else | 344 | else |
369 | flag &= ~(0x1 << DENT_BIT_SHIFT); | 345 | flag &= ~(0x1 << type); |
370 | rn->footer.flag = cpu_to_le32(flag); | 346 | rn->footer.flag = cpu_to_le32(flag); |
371 | } | 347 | } |
348 | #define set_dentry_mark(page, mark) set_mark(page, mark, DENT_BIT_SHIFT) | ||
349 | #define set_fsync_mark(page, mark) set_mark(page, mark, FSYNC_BIT_SHIFT) | ||