GNU Linux-libre 4.4.292-gnu1
[releases.git] / fs / f2fs / inode.c
1 /*
2  * fs/f2fs/inode.c
3  *
4  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5  *             http://www.samsung.com/
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  */
11 #include <linux/fs.h>
12 #include <linux/f2fs_fs.h>
13 #include <linux/buffer_head.h>
14 #include <linux/writeback.h>
15
16 #include "f2fs.h"
17 #include "node.h"
18
19 #include <trace/events/f2fs.h>
20
21 void f2fs_set_inode_flags(struct inode *inode)
22 {
23         unsigned int flags = F2FS_I(inode)->i_flags;
24         unsigned int new_fl = 0;
25
26         if (flags & FS_SYNC_FL)
27                 new_fl |= S_SYNC;
28         if (flags & FS_APPEND_FL)
29                 new_fl |= S_APPEND;
30         if (flags & FS_IMMUTABLE_FL)
31                 new_fl |= S_IMMUTABLE;
32         if (flags & FS_NOATIME_FL)
33                 new_fl |= S_NOATIME;
34         if (flags & FS_DIRSYNC_FL)
35                 new_fl |= S_DIRSYNC;
36         inode_set_flags(inode, new_fl,
37                         S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC);
38 }
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 =
46                                 old_decode_dev(le32_to_cpu(ri->i_addr[0]));
47                 else
48                         inode->i_rdev =
49                                 new_decode_dev(le32_to_cpu(ri->i_addr[1]));
50         }
51 }
52
53 static int __written_first_block(struct f2fs_sb_info *sbi,
54                                         struct f2fs_inode *ri)
55 {
56         block_t addr = le32_to_cpu(ri->i_addr[0]);
57
58         if (!__is_valid_data_blkaddr(addr))
59                 return 1;
60         if (!f2fs_is_valid_blkaddr(sbi, addr, DATA_GENERIC))
61                 return -EFAULT;
62         return 0;
63 }
64
65 static void __set_inode_rdev(struct inode *inode, struct f2fs_inode *ri)
66 {
67         if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
68                 if (old_valid_dev(inode->i_rdev)) {
69                         ri->i_addr[0] =
70                                 cpu_to_le32(old_encode_dev(inode->i_rdev));
71                         ri->i_addr[1] = 0;
72                 } else {
73                         ri->i_addr[0] = 0;
74                         ri->i_addr[1] =
75                                 cpu_to_le32(new_encode_dev(inode->i_rdev));
76                         ri->i_addr[2] = 0;
77                 }
78         }
79 }
80
81 static void __recover_inline_status(struct inode *inode, struct page *ipage)
82 {
83         void *inline_data = inline_data_addr(ipage);
84         __le32 *start = inline_data;
85         __le32 *end = start + MAX_INLINE_DATA / sizeof(__le32);
86
87         while (start < end) {
88                 if (*start++) {
89                         f2fs_wait_on_page_writeback(ipage, NODE);
90
91                         set_inode_flag(F2FS_I(inode), FI_DATA_EXIST);
92                         set_raw_inline(F2FS_I(inode), F2FS_INODE(ipage));
93                         set_page_dirty(ipage);
94                         return;
95                 }
96         }
97         return;
98 }
99
100 static bool sanity_check_inode(struct inode *inode, struct page *node_page)
101 {
102         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
103         unsigned long long iblocks;
104
105         iblocks = le64_to_cpu(F2FS_INODE(node_page)->i_blocks);
106         if (!iblocks) {
107                 set_sbi_flag(sbi, SBI_NEED_FSCK);
108                 f2fs_msg(sbi->sb, KERN_WARNING,
109                         "%s: corrupted inode i_blocks i_ino=%lx iblocks=%llu, "
110                         "run fsck to fix.",
111                         __func__, inode->i_ino, iblocks);
112                 return false;
113         }
114
115         if (ino_of_node(node_page) != nid_of_node(node_page)) {
116                 set_sbi_flag(sbi, SBI_NEED_FSCK);
117                 f2fs_msg(sbi->sb, KERN_WARNING,
118                         "%s: corrupted inode footer i_ino=%lx, ino,nid: "
119                         "[%u, %u] run fsck to fix.",
120                         __func__, inode->i_ino,
121                         ino_of_node(node_page), nid_of_node(node_page));
122                 return false;
123         }
124
125         if (F2FS_I(inode)->extent_tree) {
126                 struct extent_info *ei = &F2FS_I(inode)->extent_tree->largest;
127
128                 if (ei->len &&
129                         (!f2fs_is_valid_blkaddr(sbi, ei->blk, DATA_GENERIC) ||
130                         !f2fs_is_valid_blkaddr(sbi, ei->blk + ei->len - 1,
131                                                         DATA_GENERIC))) {
132                         set_sbi_flag(sbi, SBI_NEED_FSCK);
133                         f2fs_msg(sbi->sb, KERN_WARNING,
134                                 "%s: inode (ino=%lx) extent info [%u, %u, %u] "
135                                 "is incorrect, run fsck to fix",
136                                 __func__, inode->i_ino,
137                                 ei->blk, ei->fofs, ei->len);
138                         return false;
139                 }
140         }
141         return true;
142 }
143
144 static int do_read_inode(struct inode *inode)
145 {
146         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
147         struct f2fs_inode_info *fi = F2FS_I(inode);
148         struct page *node_page;
149         struct f2fs_inode *ri;
150         int err;
151
152         /* Check if ino is within scope */
153         if (check_nid_range(sbi, inode->i_ino)) {
154                 f2fs_msg(inode->i_sb, KERN_ERR, "bad inode number: %lu",
155                          (unsigned long) inode->i_ino);
156                 WARN_ON(1);
157                 return -EINVAL;
158         }
159
160         node_page = get_node_page(sbi, inode->i_ino);
161         if (IS_ERR(node_page))
162                 return PTR_ERR(node_page);
163
164         ri = F2FS_INODE(node_page);
165
166         inode->i_mode = le16_to_cpu(ri->i_mode);
167         i_uid_write(inode, le32_to_cpu(ri->i_uid));
168         i_gid_write(inode, le32_to_cpu(ri->i_gid));
169         set_nlink(inode, le32_to_cpu(ri->i_links));
170         inode->i_size = le64_to_cpu(ri->i_size);
171         inode->i_blocks = le64_to_cpu(ri->i_blocks);
172
173         inode->i_atime.tv_sec = le64_to_cpu(ri->i_atime);
174         inode->i_ctime.tv_sec = le64_to_cpu(ri->i_ctime);
175         inode->i_mtime.tv_sec = le64_to_cpu(ri->i_mtime);
176         inode->i_atime.tv_nsec = le32_to_cpu(ri->i_atime_nsec);
177         inode->i_ctime.tv_nsec = le32_to_cpu(ri->i_ctime_nsec);
178         inode->i_mtime.tv_nsec = le32_to_cpu(ri->i_mtime_nsec);
179         inode->i_generation = le32_to_cpu(ri->i_generation);
180
181         fi->i_current_depth = le32_to_cpu(ri->i_current_depth);
182         fi->i_xattr_nid = le32_to_cpu(ri->i_xattr_nid);
183         fi->i_flags = le32_to_cpu(ri->i_flags);
184         fi->flags = 0;
185         fi->i_advise = ri->i_advise;
186         fi->i_pino = le32_to_cpu(ri->i_pino);
187         fi->i_dir_level = ri->i_dir_level;
188
189         f2fs_init_extent_tree(inode, &ri->i_ext);
190
191         get_inline_info(fi, ri);
192
193         if (!sanity_check_inode(inode, node_page)) {
194                 f2fs_put_page(node_page, 1);
195                 return -EINVAL;
196         }
197
198         /* check data exist */
199         if (f2fs_has_inline_data(inode) && !f2fs_exist_data(inode))
200                 __recover_inline_status(inode, node_page);
201
202         /* get rdev by using inline_info */
203         __get_inode_rdev(inode, ri);
204
205         err = __written_first_block(sbi, ri);
206         if (err < 0) {
207                 f2fs_put_page(node_page, 1);
208                 return err;
209         }
210         if (!err)
211                 set_inode_flag(F2FS_I(inode), FI_FIRST_BLOCK_WRITTEN);
212
213         f2fs_put_page(node_page, 1);
214
215         stat_inc_inline_xattr(inode);
216         stat_inc_inline_inode(inode);
217         stat_inc_inline_dir(inode);
218
219         return 0;
220 }
221
222 struct inode *f2fs_iget(struct super_block *sb, unsigned long ino)
223 {
224         struct f2fs_sb_info *sbi = F2FS_SB(sb);
225         struct inode *inode;
226         int ret = 0;
227
228         inode = iget_locked(sb, ino);
229         if (!inode)
230                 return ERR_PTR(-ENOMEM);
231
232         if (!(inode->i_state & I_NEW)) {
233                 trace_f2fs_iget(inode);
234                 return inode;
235         }
236         if (ino == F2FS_NODE_INO(sbi) || ino == F2FS_META_INO(sbi))
237                 goto make_now;
238
239         ret = do_read_inode(inode);
240         if (ret)
241                 goto bad_inode;
242 make_now:
243         if (ino == F2FS_NODE_INO(sbi)) {
244                 inode->i_mapping->a_ops = &f2fs_node_aops;
245                 mapping_set_gfp_mask(inode->i_mapping, GFP_F2FS_ZERO);
246         } else if (ino == F2FS_META_INO(sbi)) {
247                 inode->i_mapping->a_ops = &f2fs_meta_aops;
248                 mapping_set_gfp_mask(inode->i_mapping, GFP_F2FS_ZERO);
249         } else if (S_ISREG(inode->i_mode)) {
250                 inode->i_op = &f2fs_file_inode_operations;
251                 inode->i_fop = &f2fs_file_operations;
252                 inode->i_mapping->a_ops = &f2fs_dblock_aops;
253         } else if (S_ISDIR(inode->i_mode)) {
254                 inode->i_op = &f2fs_dir_inode_operations;
255                 inode->i_fop = &f2fs_dir_operations;
256                 inode->i_mapping->a_ops = &f2fs_dblock_aops;
257                 mapping_set_gfp_mask(inode->i_mapping, GFP_F2FS_HIGH_ZERO);
258         } else if (S_ISLNK(inode->i_mode)) {
259                 if (f2fs_encrypted_inode(inode))
260                         inode->i_op = &f2fs_encrypted_symlink_inode_operations;
261                 else
262                         inode->i_op = &f2fs_symlink_inode_operations;
263                 inode_nohighmem(inode);
264                 inode->i_mapping->a_ops = &f2fs_dblock_aops;
265         } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
266                         S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
267                 inode->i_op = &f2fs_special_inode_operations;
268                 init_special_inode(inode, inode->i_mode, inode->i_rdev);
269         } else {
270                 ret = -EIO;
271                 goto bad_inode;
272         }
273         unlock_new_inode(inode);
274         trace_f2fs_iget(inode);
275         return inode;
276
277 bad_inode:
278         iget_failed(inode);
279         trace_f2fs_iget_exit(inode, ret);
280         return ERR_PTR(ret);
281 }
282
283 void update_inode(struct inode *inode, struct page *node_page)
284 {
285         struct f2fs_inode *ri;
286
287         f2fs_wait_on_page_writeback(node_page, NODE);
288
289         ri = F2FS_INODE(node_page);
290
291         ri->i_mode = cpu_to_le16(inode->i_mode);
292         ri->i_advise = F2FS_I(inode)->i_advise;
293         ri->i_uid = cpu_to_le32(i_uid_read(inode));
294         ri->i_gid = cpu_to_le32(i_gid_read(inode));
295         ri->i_links = cpu_to_le32(inode->i_nlink);
296         ri->i_size = cpu_to_le64(i_size_read(inode));
297         ri->i_blocks = cpu_to_le64(inode->i_blocks);
298
299         if (F2FS_I(inode)->extent_tree)
300                 set_raw_extent(&F2FS_I(inode)->extent_tree->largest,
301                                                         &ri->i_ext);
302         else
303                 memset(&ri->i_ext, 0, sizeof(ri->i_ext));
304         set_raw_inline(F2FS_I(inode), ri);
305
306         ri->i_atime = cpu_to_le64(inode->i_atime.tv_sec);
307         ri->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec);
308         ri->i_mtime = cpu_to_le64(inode->i_mtime.tv_sec);
309         ri->i_atime_nsec = cpu_to_le32(inode->i_atime.tv_nsec);
310         ri->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
311         ri->i_mtime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
312         ri->i_current_depth = cpu_to_le32(F2FS_I(inode)->i_current_depth);
313         ri->i_xattr_nid = cpu_to_le32(F2FS_I(inode)->i_xattr_nid);
314         ri->i_flags = cpu_to_le32(F2FS_I(inode)->i_flags);
315         ri->i_pino = cpu_to_le32(F2FS_I(inode)->i_pino);
316         ri->i_generation = cpu_to_le32(inode->i_generation);
317         ri->i_dir_level = F2FS_I(inode)->i_dir_level;
318
319         __set_inode_rdev(inode, ri);
320         set_cold_node(inode, node_page);
321         set_page_dirty(node_page);
322
323         clear_inode_flag(F2FS_I(inode), FI_DIRTY_INODE);
324 }
325
326 void update_inode_page(struct inode *inode)
327 {
328         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
329         struct page *node_page;
330 retry:
331         node_page = get_node_page(sbi, inode->i_ino);
332         if (IS_ERR(node_page)) {
333                 int err = PTR_ERR(node_page);
334                 if (err == -ENOMEM) {
335                         cond_resched();
336                         goto retry;
337                 } else if (err != -ENOENT) {
338                         f2fs_stop_checkpoint(sbi);
339                 }
340                 return;
341         }
342         update_inode(inode, node_page);
343         f2fs_put_page(node_page, 1);
344 }
345
346 int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc)
347 {
348         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
349
350         if (inode->i_ino == F2FS_NODE_INO(sbi) ||
351                         inode->i_ino == F2FS_META_INO(sbi))
352                 return 0;
353
354         if (!is_inode_flag_set(F2FS_I(inode), FI_DIRTY_INODE))
355                 return 0;
356
357         /*
358          * We need to balance fs here to prevent from producing dirty node pages
359          * during the urgent cleaning time when runing out of free sections.
360          */
361         update_inode_page(inode);
362
363         f2fs_balance_fs(sbi);
364         return 0;
365 }
366
367 /*
368  * Called at the last iput() if i_nlink is zero
369  */
370 void f2fs_evict_inode(struct inode *inode)
371 {
372         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
373         struct f2fs_inode_info *fi = F2FS_I(inode);
374         nid_t xnid = fi->i_xattr_nid;
375         int err = 0;
376
377         /* some remained atomic pages should discarded */
378         if (f2fs_is_atomic_file(inode))
379                 commit_inmem_pages(inode, true);
380
381         trace_f2fs_evict_inode(inode);
382         truncate_inode_pages_final(&inode->i_data);
383
384         if (inode->i_ino == F2FS_NODE_INO(sbi) ||
385                         inode->i_ino == F2FS_META_INO(sbi))
386                 goto out_clear;
387
388         f2fs_bug_on(sbi, get_dirty_pages(inode));
389         remove_dirty_dir_inode(inode);
390
391         f2fs_destroy_extent_tree(inode);
392
393         if (inode->i_nlink || is_bad_inode(inode))
394                 goto no_delete;
395
396         sb_start_intwrite(inode->i_sb);
397         set_inode_flag(fi, FI_NO_ALLOC);
398         i_size_write(inode, 0);
399
400         if (F2FS_HAS_BLOCKS(inode))
401                 err = f2fs_truncate(inode, true);
402
403         if (!err) {
404                 f2fs_lock_op(sbi);
405                 err = remove_inode_page(inode);
406                 f2fs_unlock_op(sbi);
407         }
408
409         sb_end_intwrite(inode->i_sb);
410 no_delete:
411         stat_dec_inline_xattr(inode);
412         stat_dec_inline_dir(inode);
413         stat_dec_inline_inode(inode);
414
415         invalidate_mapping_pages(NODE_MAPPING(sbi), inode->i_ino, inode->i_ino);
416         if (xnid)
417                 invalidate_mapping_pages(NODE_MAPPING(sbi), xnid, xnid);
418         if (is_inode_flag_set(fi, FI_APPEND_WRITE))
419                 add_dirty_inode(sbi, inode->i_ino, APPEND_INO);
420         if (is_inode_flag_set(fi, FI_UPDATE_WRITE))
421                 add_dirty_inode(sbi, inode->i_ino, UPDATE_INO);
422         if (is_inode_flag_set(fi, FI_FREE_NID)) {
423                 if (err && err != -ENOENT)
424                         alloc_nid_done(sbi, inode->i_ino);
425                 else
426                         alloc_nid_failed(sbi, inode->i_ino);
427                 clear_inode_flag(fi, FI_FREE_NID);
428         }
429
430         if (err && err != -ENOENT) {
431                 if (!exist_written_data(sbi, inode->i_ino, ORPHAN_INO)) {
432                         /*
433                          * get here because we failed to release resource
434                          * of inode previously, reminder our user to run fsck
435                          * for fixing.
436                          */
437                         set_sbi_flag(sbi, SBI_NEED_FSCK);
438                         f2fs_msg(sbi->sb, KERN_WARNING,
439                                 "inode (ino:%lu) resource leak, run fsck "
440                                 "to fix this issue!", inode->i_ino);
441                 }
442         }
443 out_clear:
444 #ifdef CONFIG_F2FS_FS_ENCRYPTION
445         if (fi->i_crypt_info)
446                 f2fs_free_encryption_info(inode, fi->i_crypt_info);
447 #endif
448         clear_inode(inode);
449 }
450
451 /* caller should call f2fs_lock_op() */
452 void handle_failed_inode(struct inode *inode)
453 {
454         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
455         int err = 0;
456
457         clear_nlink(inode);
458         make_bad_inode(inode);
459         unlock_new_inode(inode);
460
461         i_size_write(inode, 0);
462         if (F2FS_HAS_BLOCKS(inode))
463                 err = f2fs_truncate(inode, false);
464
465         if (!err)
466                 err = remove_inode_page(inode);
467
468         /*
469          * if we skip truncate_node in remove_inode_page bacause we failed
470          * before, it's better to find another way to release resource of
471          * this inode (e.g. valid block count, node block or nid). Here we
472          * choose to add this inode to orphan list, so that we can call iput
473          * for releasing in orphan recovery flow.
474          *
475          * Note: we should add inode to orphan list before f2fs_unlock_op()
476          * so we can prevent losing this orphan when encoutering checkpoint
477          * and following suddenly power-off.
478          */
479         if (err && err != -ENOENT) {
480                 err = acquire_orphan_inode(sbi);
481                 if (!err)
482                         add_orphan_inode(sbi, inode->i_ino);
483         }
484
485         set_inode_flag(F2FS_I(inode), FI_FREE_NID);
486         f2fs_unlock_op(sbi);
487
488         /* iput will drop the inode object */
489         iput(inode);
490 }