aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/node.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/f2fs/node.h')
-rw-r--r--fs/f2fs/node.h68
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 */
278static inline int is_cold_file(struct inode *inode) 278static 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
283static inline void set_cold_file(struct inode *inode) 283static 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
288static inline int is_cp_file(struct inode *inode) 288static 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
293static 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
298static inline int is_cold_data(struct page *page) 300static 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
313static inline int is_cold_node(struct page *page) 315static 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
321static 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
329static 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
337static inline void set_cold_node(struct inode *inode, struct page *page) 326static 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
349static inline void set_fsync_mark(struct page *page, int mark) 338static 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
361static 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)