diff options
-rw-r--r-- | fs/f2fs/inode.c | 49 |
1 files changed, 32 insertions, 17 deletions
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index c8c058024af8..7377ca3ce5c5 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c | |||
@@ -37,6 +37,31 @@ void f2fs_set_inode_flags(struct inode *inode) | |||
37 | inode->i_flags |= S_DIRSYNC; | 37 | inode->i_flags |= S_DIRSYNC; |
38 | } | 38 | } |
39 | 39 | ||
40 | static void __get_inode_rdev(struct inode *inode, struct f2fs_inode *ri) | ||
41 | { | ||
42 | if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || | ||
43 | S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { | ||
44 | if (ri->i_addr[0]) | ||
45 | inode->i_rdev = old_decode_dev(le32_to_cpu(ri->i_addr[0])); | ||
46 | else | ||
47 | inode->i_rdev = new_decode_dev(le32_to_cpu(ri->i_addr[1])); | ||
48 | } | ||
49 | } | ||
50 | |||
51 | static void __set_inode_rdev(struct inode *inode, struct f2fs_inode *ri) | ||
52 | { | ||
53 | if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { | ||
54 | if (old_valid_dev(inode->i_rdev)) { | ||
55 | ri->i_addr[0] = cpu_to_le32(old_encode_dev(inode->i_rdev)); | ||
56 | ri->i_addr[1] = 0; | ||
57 | } else { | ||
58 | ri->i_addr[0] = 0; | ||
59 | ri->i_addr[1] = cpu_to_le32(new_encode_dev(inode->i_rdev)); | ||
60 | ri->i_addr[2] = 0; | ||
61 | } | ||
62 | } | ||
63 | } | ||
64 | |||
40 | static int do_read_inode(struct inode *inode) | 65 | static int do_read_inode(struct inode *inode) |
41 | { | 66 | { |
42 | struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); | 67 | struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); |
@@ -73,10 +98,6 @@ static int do_read_inode(struct inode *inode) | |||
73 | inode->i_ctime.tv_nsec = le32_to_cpu(ri->i_ctime_nsec); | 98 | inode->i_ctime.tv_nsec = le32_to_cpu(ri->i_ctime_nsec); |
74 | inode->i_mtime.tv_nsec = le32_to_cpu(ri->i_mtime_nsec); | 99 | inode->i_mtime.tv_nsec = le32_to_cpu(ri->i_mtime_nsec); |
75 | inode->i_generation = le32_to_cpu(ri->i_generation); | 100 | inode->i_generation = le32_to_cpu(ri->i_generation); |
76 | if (ri->i_addr[0]) | ||
77 | inode->i_rdev = old_decode_dev(le32_to_cpu(ri->i_addr[0])); | ||
78 | else | ||
79 | inode->i_rdev = new_decode_dev(le32_to_cpu(ri->i_addr[1])); | ||
80 | 101 | ||
81 | fi->i_current_depth = le32_to_cpu(ri->i_current_depth); | 102 | fi->i_current_depth = le32_to_cpu(ri->i_current_depth); |
82 | fi->i_xattr_nid = le32_to_cpu(ri->i_xattr_nid); | 103 | fi->i_xattr_nid = le32_to_cpu(ri->i_xattr_nid); |
@@ -84,8 +105,13 @@ static int do_read_inode(struct inode *inode) | |||
84 | fi->flags = 0; | 105 | fi->flags = 0; |
85 | fi->i_advise = ri->i_advise; | 106 | fi->i_advise = ri->i_advise; |
86 | fi->i_pino = le32_to_cpu(ri->i_pino); | 107 | fi->i_pino = le32_to_cpu(ri->i_pino); |
108 | |||
87 | get_extent_info(&fi->ext, ri->i_ext); | 109 | get_extent_info(&fi->ext, ri->i_ext); |
88 | get_inline_info(fi, ri); | 110 | get_inline_info(fi, ri); |
111 | |||
112 | /* get rdev by using inline_info */ | ||
113 | __get_inode_rdev(inode, ri); | ||
114 | |||
89 | f2fs_put_page(node_page, 1); | 115 | f2fs_put_page(node_page, 1); |
90 | return 0; | 116 | return 0; |
91 | } | 117 | } |
@@ -179,21 +205,10 @@ void update_inode(struct inode *inode, struct page *node_page) | |||
179 | ri->i_pino = cpu_to_le32(F2FS_I(inode)->i_pino); | 205 | ri->i_pino = cpu_to_le32(F2FS_I(inode)->i_pino); |
180 | ri->i_generation = cpu_to_le32(inode->i_generation); | 206 | ri->i_generation = cpu_to_le32(inode->i_generation); |
181 | 207 | ||
182 | if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { | 208 | __set_inode_rdev(inode, ri); |
183 | if (old_valid_dev(inode->i_rdev)) { | ||
184 | ri->i_addr[0] = | ||
185 | cpu_to_le32(old_encode_dev(inode->i_rdev)); | ||
186 | ri->i_addr[1] = 0; | ||
187 | } else { | ||
188 | ri->i_addr[0] = 0; | ||
189 | ri->i_addr[1] = | ||
190 | cpu_to_le32(new_encode_dev(inode->i_rdev)); | ||
191 | ri->i_addr[2] = 0; | ||
192 | } | ||
193 | } | ||
194 | |||
195 | set_cold_node(inode, node_page); | 209 | set_cold_node(inode, node_page); |
196 | set_page_dirty(node_page); | 210 | set_page_dirty(node_page); |
211 | |||
197 | clear_inode_flag(F2FS_I(inode), FI_DIRTY_INODE); | 212 | clear_inode_flag(F2FS_I(inode), FI_DIRTY_INODE); |
198 | } | 213 | } |
199 | 214 | ||