]> Pileus Git - ~andy/linux/blobdiff - fs/f2fs/node.h
f2fs: fix crc endian conversion
[~andy/linux] / fs / f2fs / node.h
index afdb130f782e4fd962b92f1d73fffe6620e7d02b..c65fb4f4230f699ba7647c820b328942b43b8490 100644 (file)
@@ -29,6 +29,9 @@
 /* vector size for gang look-up from nat cache that consists of radix tree */
 #define NATVEC_SIZE    64
 
+/* return value for read_node_page */
+#define LOCKED_PAGE    1
+
 /*
  * For node information
  */
@@ -239,7 +242,7 @@ static inline bool IS_DNODE(struct page *node_page)
                return false;
        if (ofs >= 6 + 2 * NIDS_PER_BLOCK) {
                ofs -= 6 + 2 * NIDS_PER_BLOCK;
-               if ((long int)ofs % (NIDS_PER_BLOCK + 1))
+               if (!((long int)ofs % (NIDS_PER_BLOCK + 1)))
                        return false;
        }
        return true;
@@ -272,11 +275,28 @@ static inline nid_t get_nid(struct page *p, int off, bool i)
  *  - Mark cold node blocks in their node footer
  *  - Mark cold data pages in page cache
  */
-static inline int is_cold_file(struct inode *inode)
+static inline int is_file(struct inode *inode, int type)
+{
+       return F2FS_I(inode)->i_advise & type;
+}
+
+static inline void set_file(struct inode *inode, int type)
 {
-       return F2FS_I(inode)->i_advise & FADVISE_COLD_BIT;
+       F2FS_I(inode)->i_advise |= type;
 }
 
+static inline void clear_file(struct inode *inode, int type)
+{
+       F2FS_I(inode)->i_advise &= ~type;
+}
+
+#define file_is_cold(inode)    is_file(inode, FADVISE_COLD_BIT)
+#define file_wrong_pino(inode) is_file(inode, FADVISE_LOST_PINO_BIT)
+#define file_set_cold(inode)   set_file(inode, FADVISE_COLD_BIT)
+#define file_lost_pino(inode)  set_file(inode, FADVISE_LOST_PINO_BIT)
+#define file_clear_cold(inode) clear_file(inode, FADVISE_COLD_BIT)
+#define file_got_pino(inode)   clear_file(inode, FADVISE_LOST_PINO_BIT)
+
 static inline int is_cold_data(struct page *page)
 {
        return PageChecked(page);
@@ -292,29 +312,16 @@ static inline void clear_cold_data(struct page *page)
        ClearPageChecked(page);
 }
 
-static inline int is_cold_node(struct page *page)
+static inline int is_node(struct page *page, int type)
 {
        void *kaddr = page_address(page);
        struct f2fs_node *rn = (struct f2fs_node *)kaddr;
-       unsigned int flag = le32_to_cpu(rn->footer.flag);
-       return flag & (0x1 << COLD_BIT_SHIFT);
-}
-
-static inline unsigned char is_fsync_dnode(struct page *page)
-{
-       void *kaddr = page_address(page);
-       struct f2fs_node *rn = (struct f2fs_node *)kaddr;
-       unsigned int flag = le32_to_cpu(rn->footer.flag);
-       return flag & (0x1 << FSYNC_BIT_SHIFT);
+       return le32_to_cpu(rn->footer.flag) & (1 << type);
 }
 
-static inline unsigned char is_dent_dnode(struct page *page)
-{
-       void *kaddr = page_address(page);
-       struct f2fs_node *rn = (struct f2fs_node *)kaddr;
-       unsigned int flag = le32_to_cpu(rn->footer.flag);
-       return flag & (0x1 << DENT_BIT_SHIFT);
-}
+#define is_cold_node(page)     is_node(page, COLD_BIT_SHIFT)
+#define is_fsync_dnode(page)   is_node(page, FSYNC_BIT_SHIFT)
+#define is_dent_dnode(page)    is_node(page, DENT_BIT_SHIFT)
 
 static inline void set_cold_node(struct inode *inode, struct page *page)
 {
@@ -328,26 +335,15 @@ static inline void set_cold_node(struct inode *inode, struct page *page)
        rn->footer.flag = cpu_to_le32(flag);
 }
 
-static inline void set_fsync_mark(struct page *page, int mark)
-{
-       void *kaddr = page_address(page);
-       struct f2fs_node *rn = (struct f2fs_node *)kaddr;
-       unsigned int flag = le32_to_cpu(rn->footer.flag);
-       if (mark)
-               flag |= (0x1 << FSYNC_BIT_SHIFT);
-       else
-               flag &= ~(0x1 << FSYNC_BIT_SHIFT);
-       rn->footer.flag = cpu_to_le32(flag);
-}
-
-static inline void set_dentry_mark(struct page *page, int mark)
+static inline void set_mark(struct page *page, int mark, int type)
 {
-       void *kaddr = page_address(page);
-       struct f2fs_node *rn = (struct f2fs_node *)kaddr;
+       struct f2fs_node *rn = (struct f2fs_node *)page_address(page);
        unsigned int flag = le32_to_cpu(rn->footer.flag);
        if (mark)
-               flag |= (0x1 << DENT_BIT_SHIFT);
+               flag |= (0x1 << type);
        else
-               flag &= ~(0x1 << DENT_BIT_SHIFT);
+               flag &= ~(0x1 << type);
        rn->footer.flag = cpu_to_le32(flag);
 }
+#define set_dentry_mark(page, mark)    set_mark(page, mark, DENT_BIT_SHIFT)
+#define set_fsync_mark(page, mark)     set_mark(page, mark, FSYNC_BIT_SHIFT)