Merge tag 'pinctrl-v4.16-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[linux-2.6-block.git] / fs / f2fs / namei.c
1 /*
2  * fs/f2fs/namei.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/pagemap.h>
14 #include <linux/sched.h>
15 #include <linux/ctype.h>
16 #include <linux/dcache.h>
17 #include <linux/namei.h>
18 #include <linux/quotaops.h>
19
20 #include "f2fs.h"
21 #include "node.h"
22 #include "xattr.h"
23 #include "acl.h"
24 #include <trace/events/f2fs.h>
25
26 static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
27 {
28         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
29         nid_t ino;
30         struct inode *inode;
31         bool nid_free = false;
32         int xattr_size = 0;
33         int err;
34
35         inode = new_inode(dir->i_sb);
36         if (!inode)
37                 return ERR_PTR(-ENOMEM);
38
39         f2fs_lock_op(sbi);
40         if (!alloc_nid(sbi, &ino)) {
41                 f2fs_unlock_op(sbi);
42                 err = -ENOSPC;
43                 goto fail;
44         }
45         f2fs_unlock_op(sbi);
46
47         nid_free = true;
48
49         inode_init_owner(inode, dir, mode);
50
51         inode->i_ino = ino;
52         inode->i_blocks = 0;
53         inode->i_mtime = inode->i_atime = inode->i_ctime =
54                         F2FS_I(inode)->i_crtime = current_time(inode);
55         inode->i_generation = sbi->s_next_generation++;
56
57         err = insert_inode_locked(inode);
58         if (err) {
59                 err = -EINVAL;
60                 goto fail;
61         }
62
63         if (f2fs_sb_has_project_quota(sbi->sb) &&
64                 (F2FS_I(dir)->i_flags & FS_PROJINHERIT_FL))
65                 F2FS_I(inode)->i_projid = F2FS_I(dir)->i_projid;
66         else
67                 F2FS_I(inode)->i_projid = make_kprojid(&init_user_ns,
68                                                         F2FS_DEF_PROJID);
69
70         err = dquot_initialize(inode);
71         if (err)
72                 goto fail_drop;
73
74         err = dquot_alloc_inode(inode);
75         if (err)
76                 goto fail_drop;
77
78         set_inode_flag(inode, FI_NEW_INODE);
79
80         /* If the directory encrypted, then we should encrypt the inode. */
81         if (f2fs_encrypted_inode(dir) && f2fs_may_encrypt(inode))
82                 f2fs_set_encrypted_inode(inode);
83
84         if (f2fs_sb_has_extra_attr(sbi->sb)) {
85                 set_inode_flag(inode, FI_EXTRA_ATTR);
86                 F2FS_I(inode)->i_extra_isize = F2FS_TOTAL_EXTRA_ATTR_SIZE;
87         }
88
89         if (test_opt(sbi, INLINE_XATTR))
90                 set_inode_flag(inode, FI_INLINE_XATTR);
91
92         if (test_opt(sbi, INLINE_DATA) && f2fs_may_inline_data(inode))
93                 set_inode_flag(inode, FI_INLINE_DATA);
94         if (f2fs_may_inline_dentry(inode))
95                 set_inode_flag(inode, FI_INLINE_DENTRY);
96
97         if (f2fs_sb_has_flexible_inline_xattr(sbi->sb)) {
98                 f2fs_bug_on(sbi, !f2fs_has_extra_attr(inode));
99                 if (f2fs_has_inline_xattr(inode))
100                         xattr_size = sbi->inline_xattr_size;
101                 /* Otherwise, will be 0 */
102         } else if (f2fs_has_inline_xattr(inode) ||
103                                 f2fs_has_inline_dentry(inode)) {
104                 xattr_size = DEFAULT_INLINE_XATTR_ADDRS;
105         }
106         F2FS_I(inode)->i_inline_xattr_size = xattr_size;
107
108         f2fs_init_extent_tree(inode, NULL);
109
110         stat_inc_inline_xattr(inode);
111         stat_inc_inline_inode(inode);
112         stat_inc_inline_dir(inode);
113
114         F2FS_I(inode)->i_flags =
115                 f2fs_mask_flags(mode, F2FS_I(dir)->i_flags & F2FS_FL_INHERITED);
116
117         if (S_ISDIR(inode->i_mode))
118                 F2FS_I(inode)->i_flags |= FS_INDEX_FL;
119
120         if (F2FS_I(inode)->i_flags & FS_PROJINHERIT_FL)
121                 set_inode_flag(inode, FI_PROJ_INHERIT);
122
123         trace_f2fs_new_inode(inode, 0);
124         return inode;
125
126 fail:
127         trace_f2fs_new_inode(inode, err);
128         make_bad_inode(inode);
129         if (nid_free)
130                 set_inode_flag(inode, FI_FREE_NID);
131         iput(inode);
132         return ERR_PTR(err);
133 fail_drop:
134         trace_f2fs_new_inode(inode, err);
135         dquot_drop(inode);
136         inode->i_flags |= S_NOQUOTA;
137         if (nid_free)
138                 set_inode_flag(inode, FI_FREE_NID);
139         clear_nlink(inode);
140         unlock_new_inode(inode);
141         iput(inode);
142         return ERR_PTR(err);
143 }
144
145 static int is_multimedia_file(const unsigned char *s, const char *sub)
146 {
147         size_t slen = strlen(s);
148         size_t sublen = strlen(sub);
149         int i;
150
151         /*
152          * filename format of multimedia file should be defined as:
153          * "filename + '.' + extension + (optional: '.' + temp extension)".
154          */
155         if (slen < sublen + 2)
156                 return 0;
157
158         for (i = 1; i < slen - sublen; i++) {
159                 if (s[i] != '.')
160                         continue;
161                 if (!strncasecmp(s + i + 1, sub, sublen))
162                         return 1;
163         }
164
165         return 0;
166 }
167
168 /*
169  * Set multimedia files as cold files for hot/cold data separation
170  */
171 static inline void set_cold_files(struct f2fs_sb_info *sbi, struct inode *inode,
172                 const unsigned char *name)
173 {
174         int i;
175         __u8 (*extlist)[8] = sbi->raw_super->extension_list;
176
177         int count = le32_to_cpu(sbi->raw_super->extension_count);
178         for (i = 0; i < count; i++) {
179                 if (is_multimedia_file(name, extlist[i])) {
180                         file_set_cold(inode);
181                         break;
182                 }
183         }
184 }
185
186 static int f2fs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
187                                                 bool excl)
188 {
189         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
190         struct inode *inode;
191         nid_t ino = 0;
192         int err;
193
194         if (unlikely(f2fs_cp_error(sbi)))
195                 return -EIO;
196
197         err = dquot_initialize(dir);
198         if (err)
199                 return err;
200
201         inode = f2fs_new_inode(dir, mode);
202         if (IS_ERR(inode))
203                 return PTR_ERR(inode);
204
205         if (!test_opt(sbi, DISABLE_EXT_IDENTIFY))
206                 set_cold_files(sbi, inode, dentry->d_name.name);
207
208         inode->i_op = &f2fs_file_inode_operations;
209         inode->i_fop = &f2fs_file_operations;
210         inode->i_mapping->a_ops = &f2fs_dblock_aops;
211         ino = inode->i_ino;
212
213         f2fs_lock_op(sbi);
214         err = f2fs_add_link(dentry, inode);
215         if (err)
216                 goto out;
217         f2fs_unlock_op(sbi);
218
219         alloc_nid_done(sbi, ino);
220
221         d_instantiate(dentry, inode);
222         unlock_new_inode(inode);
223
224         if (IS_DIRSYNC(dir))
225                 f2fs_sync_fs(sbi->sb, 1);
226
227         f2fs_balance_fs(sbi, true);
228         return 0;
229 out:
230         handle_failed_inode(inode);
231         return err;
232 }
233
234 static int f2fs_link(struct dentry *old_dentry, struct inode *dir,
235                 struct dentry *dentry)
236 {
237         struct inode *inode = d_inode(old_dentry);
238         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
239         int err;
240
241         if (unlikely(f2fs_cp_error(sbi)))
242                 return -EIO;
243
244         err = fscrypt_prepare_link(old_dentry, dir, dentry);
245         if (err)
246                 return err;
247
248         if (is_inode_flag_set(dir, FI_PROJ_INHERIT) &&
249                         (!projid_eq(F2FS_I(dir)->i_projid,
250                         F2FS_I(old_dentry->d_inode)->i_projid)))
251                 return -EXDEV;
252
253         err = dquot_initialize(dir);
254         if (err)
255                 return err;
256
257         f2fs_balance_fs(sbi, true);
258
259         inode->i_ctime = current_time(inode);
260         ihold(inode);
261
262         set_inode_flag(inode, FI_INC_LINK);
263         f2fs_lock_op(sbi);
264         err = f2fs_add_link(dentry, inode);
265         if (err)
266                 goto out;
267         f2fs_unlock_op(sbi);
268
269         d_instantiate(dentry, inode);
270
271         if (IS_DIRSYNC(dir))
272                 f2fs_sync_fs(sbi->sb, 1);
273         return 0;
274 out:
275         clear_inode_flag(inode, FI_INC_LINK);
276         iput(inode);
277         f2fs_unlock_op(sbi);
278         return err;
279 }
280
281 struct dentry *f2fs_get_parent(struct dentry *child)
282 {
283         struct qstr dotdot = QSTR_INIT("..", 2);
284         struct page *page;
285         unsigned long ino = f2fs_inode_by_name(d_inode(child), &dotdot, &page);
286         if (!ino) {
287                 if (IS_ERR(page))
288                         return ERR_CAST(page);
289                 return ERR_PTR(-ENOENT);
290         }
291         return d_obtain_alias(f2fs_iget(child->d_sb, ino));
292 }
293
294 static int __recover_dot_dentries(struct inode *dir, nid_t pino)
295 {
296         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
297         struct qstr dot = QSTR_INIT(".", 1);
298         struct qstr dotdot = QSTR_INIT("..", 2);
299         struct f2fs_dir_entry *de;
300         struct page *page;
301         int err = 0;
302
303         if (f2fs_readonly(sbi->sb)) {
304                 f2fs_msg(sbi->sb, KERN_INFO,
305                         "skip recovering inline_dots inode (ino:%lu, pino:%u) "
306                         "in readonly mountpoint", dir->i_ino, pino);
307                 return 0;
308         }
309
310         err = dquot_initialize(dir);
311         if (err)
312                 return err;
313
314         f2fs_balance_fs(sbi, true);
315
316         f2fs_lock_op(sbi);
317
318         de = f2fs_find_entry(dir, &dot, &page);
319         if (de) {
320                 f2fs_dentry_kunmap(dir, page);
321                 f2fs_put_page(page, 0);
322         } else if (IS_ERR(page)) {
323                 err = PTR_ERR(page);
324                 goto out;
325         } else {
326                 err = __f2fs_add_link(dir, &dot, NULL, dir->i_ino, S_IFDIR);
327                 if (err)
328                         goto out;
329         }
330
331         de = f2fs_find_entry(dir, &dotdot, &page);
332         if (de) {
333                 f2fs_dentry_kunmap(dir, page);
334                 f2fs_put_page(page, 0);
335         } else if (IS_ERR(page)) {
336                 err = PTR_ERR(page);
337         } else {
338                 err = __f2fs_add_link(dir, &dotdot, NULL, pino, S_IFDIR);
339         }
340 out:
341         if (!err)
342                 clear_inode_flag(dir, FI_INLINE_DOTS);
343
344         f2fs_unlock_op(sbi);
345         return err;
346 }
347
348 static struct dentry *f2fs_lookup(struct inode *dir, struct dentry *dentry,
349                 unsigned int flags)
350 {
351         struct inode *inode = NULL;
352         struct f2fs_dir_entry *de;
353         struct page *page;
354         struct dentry *new;
355         nid_t ino = -1;
356         int err = 0;
357         unsigned int root_ino = F2FS_ROOT_INO(F2FS_I_SB(dir));
358
359         trace_f2fs_lookup_start(dir, dentry, flags);
360
361         err = fscrypt_prepare_lookup(dir, dentry, flags);
362         if (err)
363                 goto out;
364
365         if (dentry->d_name.len > F2FS_NAME_LEN) {
366                 err = -ENAMETOOLONG;
367                 goto out;
368         }
369
370         de = f2fs_find_entry(dir, &dentry->d_name, &page);
371         if (!de) {
372                 if (IS_ERR(page)) {
373                         err = PTR_ERR(page);
374                         goto out;
375                 }
376                 goto out_splice;
377         }
378
379         ino = le32_to_cpu(de->ino);
380         f2fs_dentry_kunmap(dir, page);
381         f2fs_put_page(page, 0);
382
383         inode = f2fs_iget(dir->i_sb, ino);
384         if (IS_ERR(inode)) {
385                 err = PTR_ERR(inode);
386                 goto out;
387         }
388
389         if ((dir->i_ino == root_ino) && f2fs_has_inline_dots(dir)) {
390                 err = __recover_dot_dentries(dir, root_ino);
391                 if (err)
392                         goto out_iput;
393         }
394
395         if (f2fs_has_inline_dots(inode)) {
396                 err = __recover_dot_dentries(inode, dir->i_ino);
397                 if (err)
398                         goto out_iput;
399         }
400         if (f2fs_encrypted_inode(dir) &&
401             (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
402             !fscrypt_has_permitted_context(dir, inode)) {
403                 f2fs_msg(inode->i_sb, KERN_WARNING,
404                          "Inconsistent encryption contexts: %lu/%lu",
405                          dir->i_ino, inode->i_ino);
406                 err = -EPERM;
407                 goto out_iput;
408         }
409 out_splice:
410         new = d_splice_alias(inode, dentry);
411         if (IS_ERR(new))
412                 err = PTR_ERR(new);
413         trace_f2fs_lookup_end(dir, dentry, ino, err);
414         return new;
415 out_iput:
416         iput(inode);
417 out:
418         trace_f2fs_lookup_end(dir, dentry, ino, err);
419         return ERR_PTR(err);
420 }
421
422 static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
423 {
424         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
425         struct inode *inode = d_inode(dentry);
426         struct f2fs_dir_entry *de;
427         struct page *page;
428         int err = -ENOENT;
429
430         trace_f2fs_unlink_enter(dir, dentry);
431
432         if (unlikely(f2fs_cp_error(sbi)))
433                 return -EIO;
434
435         err = dquot_initialize(dir);
436         if (err)
437                 return err;
438         err = dquot_initialize(inode);
439         if (err)
440                 return err;
441
442         de = f2fs_find_entry(dir, &dentry->d_name, &page);
443         if (!de) {
444                 if (IS_ERR(page))
445                         err = PTR_ERR(page);
446                 goto fail;
447         }
448
449         f2fs_balance_fs(sbi, true);
450
451         f2fs_lock_op(sbi);
452         err = acquire_orphan_inode(sbi);
453         if (err) {
454                 f2fs_unlock_op(sbi);
455                 f2fs_dentry_kunmap(dir, page);
456                 f2fs_put_page(page, 0);
457                 goto fail;
458         }
459         f2fs_delete_entry(de, page, dir, inode);
460         f2fs_unlock_op(sbi);
461
462         if (IS_DIRSYNC(dir))
463                 f2fs_sync_fs(sbi->sb, 1);
464 fail:
465         trace_f2fs_unlink_exit(inode, err);
466         return err;
467 }
468
469 static const char *f2fs_get_link(struct dentry *dentry,
470                                  struct inode *inode,
471                                  struct delayed_call *done)
472 {
473         const char *link = page_get_link(dentry, inode, done);
474         if (!IS_ERR(link) && !*link) {
475                 /* this is broken symlink case */
476                 do_delayed_call(done);
477                 clear_delayed_call(done);
478                 link = ERR_PTR(-ENOENT);
479         }
480         return link;
481 }
482
483 static int f2fs_symlink(struct inode *dir, struct dentry *dentry,
484                                         const char *symname)
485 {
486         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
487         struct inode *inode;
488         size_t len = strlen(symname);
489         struct fscrypt_str disk_link = FSTR_INIT((char *)symname, len + 1);
490         struct fscrypt_symlink_data *sd = NULL;
491         int err;
492
493         if (unlikely(f2fs_cp_error(sbi)))
494                 return -EIO;
495
496         if (f2fs_encrypted_inode(dir)) {
497                 err = fscrypt_get_encryption_info(dir);
498                 if (err)
499                         return err;
500
501                 if (!fscrypt_has_encryption_key(dir))
502                         return -ENOKEY;
503
504                 disk_link.len = (fscrypt_fname_encrypted_size(dir, len) +
505                                 sizeof(struct fscrypt_symlink_data));
506         }
507
508         if (disk_link.len > dir->i_sb->s_blocksize)
509                 return -ENAMETOOLONG;
510
511         err = dquot_initialize(dir);
512         if (err)
513                 return err;
514
515         inode = f2fs_new_inode(dir, S_IFLNK | S_IRWXUGO);
516         if (IS_ERR(inode))
517                 return PTR_ERR(inode);
518
519         if (f2fs_encrypted_inode(inode))
520                 inode->i_op = &f2fs_encrypted_symlink_inode_operations;
521         else
522                 inode->i_op = &f2fs_symlink_inode_operations;
523         inode_nohighmem(inode);
524         inode->i_mapping->a_ops = &f2fs_dblock_aops;
525
526         f2fs_lock_op(sbi);
527         err = f2fs_add_link(dentry, inode);
528         if (err)
529                 goto out;
530         f2fs_unlock_op(sbi);
531         alloc_nid_done(sbi, inode->i_ino);
532
533         if (f2fs_encrypted_inode(inode)) {
534                 struct qstr istr = QSTR_INIT(symname, len);
535                 struct fscrypt_str ostr;
536
537                 sd = f2fs_kzalloc(sbi, disk_link.len, GFP_NOFS);
538                 if (!sd) {
539                         err = -ENOMEM;
540                         goto err_out;
541                 }
542
543                 err = fscrypt_get_encryption_info(inode);
544                 if (err)
545                         goto err_out;
546
547                 if (!fscrypt_has_encryption_key(inode)) {
548                         err = -ENOKEY;
549                         goto err_out;
550                 }
551
552                 ostr.name = sd->encrypted_path;
553                 ostr.len = disk_link.len;
554                 err = fscrypt_fname_usr_to_disk(inode, &istr, &ostr);
555                 if (err)
556                         goto err_out;
557
558                 sd->len = cpu_to_le16(ostr.len);
559                 disk_link.name = (char *)sd;
560         }
561
562         err = page_symlink(inode, disk_link.name, disk_link.len);
563
564 err_out:
565         d_instantiate(dentry, inode);
566         unlock_new_inode(inode);
567
568         /*
569          * Let's flush symlink data in order to avoid broken symlink as much as
570          * possible. Nevertheless, fsyncing is the best way, but there is no
571          * way to get a file descriptor in order to flush that.
572          *
573          * Note that, it needs to do dir->fsync to make this recoverable.
574          * If the symlink path is stored into inline_data, there is no
575          * performance regression.
576          */
577         if (!err) {
578                 filemap_write_and_wait_range(inode->i_mapping, 0,
579                                                         disk_link.len - 1);
580
581                 if (IS_DIRSYNC(dir))
582                         f2fs_sync_fs(sbi->sb, 1);
583         } else {
584                 f2fs_unlink(dir, dentry);
585         }
586
587         kfree(sd);
588
589         f2fs_balance_fs(sbi, true);
590         return err;
591 out:
592         handle_failed_inode(inode);
593         return err;
594 }
595
596 static int f2fs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
597 {
598         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
599         struct inode *inode;
600         int err;
601
602         if (unlikely(f2fs_cp_error(sbi)))
603                 return -EIO;
604
605         err = dquot_initialize(dir);
606         if (err)
607                 return err;
608
609         inode = f2fs_new_inode(dir, S_IFDIR | mode);
610         if (IS_ERR(inode))
611                 return PTR_ERR(inode);
612
613         inode->i_op = &f2fs_dir_inode_operations;
614         inode->i_fop = &f2fs_dir_operations;
615         inode->i_mapping->a_ops = &f2fs_dblock_aops;
616         mapping_set_gfp_mask(inode->i_mapping, GFP_F2FS_HIGH_ZERO);
617
618         set_inode_flag(inode, FI_INC_LINK);
619         f2fs_lock_op(sbi);
620         err = f2fs_add_link(dentry, inode);
621         if (err)
622                 goto out_fail;
623         f2fs_unlock_op(sbi);
624
625         alloc_nid_done(sbi, inode->i_ino);
626
627         d_instantiate(dentry, inode);
628         unlock_new_inode(inode);
629
630         if (IS_DIRSYNC(dir))
631                 f2fs_sync_fs(sbi->sb, 1);
632
633         f2fs_balance_fs(sbi, true);
634         return 0;
635
636 out_fail:
637         clear_inode_flag(inode, FI_INC_LINK);
638         handle_failed_inode(inode);
639         return err;
640 }
641
642 static int f2fs_rmdir(struct inode *dir, struct dentry *dentry)
643 {
644         struct inode *inode = d_inode(dentry);
645         if (f2fs_empty_dir(inode))
646                 return f2fs_unlink(dir, dentry);
647         return -ENOTEMPTY;
648 }
649
650 static int f2fs_mknod(struct inode *dir, struct dentry *dentry,
651                                 umode_t mode, dev_t rdev)
652 {
653         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
654         struct inode *inode;
655         int err = 0;
656
657         if (unlikely(f2fs_cp_error(sbi)))
658                 return -EIO;
659
660         err = dquot_initialize(dir);
661         if (err)
662                 return err;
663
664         inode = f2fs_new_inode(dir, mode);
665         if (IS_ERR(inode))
666                 return PTR_ERR(inode);
667
668         init_special_inode(inode, inode->i_mode, rdev);
669         inode->i_op = &f2fs_special_inode_operations;
670
671         f2fs_lock_op(sbi);
672         err = f2fs_add_link(dentry, inode);
673         if (err)
674                 goto out;
675         f2fs_unlock_op(sbi);
676
677         alloc_nid_done(sbi, inode->i_ino);
678
679         d_instantiate(dentry, inode);
680         unlock_new_inode(inode);
681
682         if (IS_DIRSYNC(dir))
683                 f2fs_sync_fs(sbi->sb, 1);
684
685         f2fs_balance_fs(sbi, true);
686         return 0;
687 out:
688         handle_failed_inode(inode);
689         return err;
690 }
691
692 static int __f2fs_tmpfile(struct inode *dir, struct dentry *dentry,
693                                         umode_t mode, struct inode **whiteout)
694 {
695         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
696         struct inode *inode;
697         int err;
698
699         err = dquot_initialize(dir);
700         if (err)
701                 return err;
702
703         inode = f2fs_new_inode(dir, mode);
704         if (IS_ERR(inode))
705                 return PTR_ERR(inode);
706
707         if (whiteout) {
708                 init_special_inode(inode, inode->i_mode, WHITEOUT_DEV);
709                 inode->i_op = &f2fs_special_inode_operations;
710         } else {
711                 inode->i_op = &f2fs_file_inode_operations;
712                 inode->i_fop = &f2fs_file_operations;
713                 inode->i_mapping->a_ops = &f2fs_dblock_aops;
714         }
715
716         f2fs_lock_op(sbi);
717         err = acquire_orphan_inode(sbi);
718         if (err)
719                 goto out;
720
721         err = f2fs_do_tmpfile(inode, dir);
722         if (err)
723                 goto release_out;
724
725         /*
726          * add this non-linked tmpfile to orphan list, in this way we could
727          * remove all unused data of tmpfile after abnormal power-off.
728          */
729         add_orphan_inode(inode);
730         alloc_nid_done(sbi, inode->i_ino);
731
732         if (whiteout) {
733                 f2fs_i_links_write(inode, false);
734                 *whiteout = inode;
735         } else {
736                 d_tmpfile(dentry, inode);
737         }
738         /* link_count was changed by d_tmpfile as well. */
739         f2fs_unlock_op(sbi);
740         unlock_new_inode(inode);
741
742         f2fs_balance_fs(sbi, true);
743         return 0;
744
745 release_out:
746         release_orphan_inode(sbi);
747 out:
748         handle_failed_inode(inode);
749         return err;
750 }
751
752 static int f2fs_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode)
753 {
754         if (unlikely(f2fs_cp_error(F2FS_I_SB(dir))))
755                 return -EIO;
756
757         if (f2fs_encrypted_inode(dir)) {
758                 int err = fscrypt_get_encryption_info(dir);
759                 if (err)
760                         return err;
761         }
762
763         return __f2fs_tmpfile(dir, dentry, mode, NULL);
764 }
765
766 static int f2fs_create_whiteout(struct inode *dir, struct inode **whiteout)
767 {
768         if (unlikely(f2fs_cp_error(F2FS_I_SB(dir))))
769                 return -EIO;
770
771         return __f2fs_tmpfile(dir, NULL, S_IFCHR | WHITEOUT_MODE, whiteout);
772 }
773
774 static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
775                         struct inode *new_dir, struct dentry *new_dentry,
776                         unsigned int flags)
777 {
778         struct f2fs_sb_info *sbi = F2FS_I_SB(old_dir);
779         struct inode *old_inode = d_inode(old_dentry);
780         struct inode *new_inode = d_inode(new_dentry);
781         struct inode *whiteout = NULL;
782         struct page *old_dir_page;
783         struct page *old_page, *new_page = NULL;
784         struct f2fs_dir_entry *old_dir_entry = NULL;
785         struct f2fs_dir_entry *old_entry;
786         struct f2fs_dir_entry *new_entry;
787         bool is_old_inline = f2fs_has_inline_dentry(old_dir);
788         int err = -ENOENT;
789
790         if (unlikely(f2fs_cp_error(sbi)))
791                 return -EIO;
792
793         if (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
794                         (!projid_eq(F2FS_I(new_dir)->i_projid,
795                         F2FS_I(old_dentry->d_inode)->i_projid)))
796                 return -EXDEV;
797
798         err = dquot_initialize(old_dir);
799         if (err)
800                 goto out;
801
802         err = dquot_initialize(new_dir);
803         if (err)
804                 goto out;
805
806         if (new_inode) {
807                 err = dquot_initialize(new_inode);
808                 if (err)
809                         goto out;
810         }
811
812         old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
813         if (!old_entry) {
814                 if (IS_ERR(old_page))
815                         err = PTR_ERR(old_page);
816                 goto out;
817         }
818
819         if (S_ISDIR(old_inode->i_mode)) {
820                 old_dir_entry = f2fs_parent_dir(old_inode, &old_dir_page);
821                 if (!old_dir_entry) {
822                         if (IS_ERR(old_dir_page))
823                                 err = PTR_ERR(old_dir_page);
824                         goto out_old;
825                 }
826         }
827
828         if (flags & RENAME_WHITEOUT) {
829                 err = f2fs_create_whiteout(old_dir, &whiteout);
830                 if (err)
831                         goto out_dir;
832         }
833
834         if (new_inode) {
835
836                 err = -ENOTEMPTY;
837                 if (old_dir_entry && !f2fs_empty_dir(new_inode))
838                         goto out_whiteout;
839
840                 err = -ENOENT;
841                 new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name,
842                                                 &new_page);
843                 if (!new_entry) {
844                         if (IS_ERR(new_page))
845                                 err = PTR_ERR(new_page);
846                         goto out_whiteout;
847                 }
848
849                 f2fs_balance_fs(sbi, true);
850
851                 f2fs_lock_op(sbi);
852
853                 err = acquire_orphan_inode(sbi);
854                 if (err)
855                         goto put_out_dir;
856
857                 f2fs_set_link(new_dir, new_entry, new_page, old_inode);
858
859                 new_inode->i_ctime = current_time(new_inode);
860                 down_write(&F2FS_I(new_inode)->i_sem);
861                 if (old_dir_entry)
862                         f2fs_i_links_write(new_inode, false);
863                 f2fs_i_links_write(new_inode, false);
864                 up_write(&F2FS_I(new_inode)->i_sem);
865
866                 if (!new_inode->i_nlink)
867                         add_orphan_inode(new_inode);
868                 else
869                         release_orphan_inode(sbi);
870         } else {
871                 f2fs_balance_fs(sbi, true);
872
873                 f2fs_lock_op(sbi);
874
875                 err = f2fs_add_link(new_dentry, old_inode);
876                 if (err) {
877                         f2fs_unlock_op(sbi);
878                         goto out_whiteout;
879                 }
880
881                 if (old_dir_entry)
882                         f2fs_i_links_write(new_dir, true);
883
884                 /*
885                  * old entry and new entry can locate in the same inline
886                  * dentry in inode, when attaching new entry in inline dentry,
887                  * it could force inline dentry conversion, after that,
888                  * old_entry and old_page will point to wrong address, in
889                  * order to avoid this, let's do the check and update here.
890                  */
891                 if (is_old_inline && !f2fs_has_inline_dentry(old_dir)) {
892                         f2fs_put_page(old_page, 0);
893                         old_page = NULL;
894
895                         old_entry = f2fs_find_entry(old_dir,
896                                                 &old_dentry->d_name, &old_page);
897                         if (!old_entry) {
898                                 err = -ENOENT;
899                                 if (IS_ERR(old_page))
900                                         err = PTR_ERR(old_page);
901                                 f2fs_unlock_op(sbi);
902                                 goto out_whiteout;
903                         }
904                 }
905         }
906
907         down_write(&F2FS_I(old_inode)->i_sem);
908         if (!old_dir_entry || whiteout)
909                 file_lost_pino(old_inode);
910         else
911                 F2FS_I(old_inode)->i_pino = new_dir->i_ino;
912         up_write(&F2FS_I(old_inode)->i_sem);
913
914         old_inode->i_ctime = current_time(old_inode);
915         f2fs_mark_inode_dirty_sync(old_inode, false);
916
917         f2fs_delete_entry(old_entry, old_page, old_dir, NULL);
918
919         if (whiteout) {
920                 whiteout->i_state |= I_LINKABLE;
921                 set_inode_flag(whiteout, FI_INC_LINK);
922                 err = f2fs_add_link(old_dentry, whiteout);
923                 if (err)
924                         goto put_out_dir;
925                 whiteout->i_state &= ~I_LINKABLE;
926                 iput(whiteout);
927         }
928
929         if (old_dir_entry) {
930                 if (old_dir != new_dir && !whiteout) {
931                         f2fs_set_link(old_inode, old_dir_entry,
932                                                 old_dir_page, new_dir);
933                 } else {
934                         f2fs_dentry_kunmap(old_inode, old_dir_page);
935                         f2fs_put_page(old_dir_page, 0);
936                 }
937                 f2fs_i_links_write(old_dir, false);
938         }
939         add_ino_entry(sbi, new_dir->i_ino, TRANS_DIR_INO);
940
941         f2fs_unlock_op(sbi);
942
943         if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
944                 f2fs_sync_fs(sbi->sb, 1);
945         return 0;
946
947 put_out_dir:
948         f2fs_unlock_op(sbi);
949         if (new_page) {
950                 f2fs_dentry_kunmap(new_dir, new_page);
951                 f2fs_put_page(new_page, 0);
952         }
953 out_whiteout:
954         if (whiteout)
955                 iput(whiteout);
956 out_dir:
957         if (old_dir_entry) {
958                 f2fs_dentry_kunmap(old_inode, old_dir_page);
959                 f2fs_put_page(old_dir_page, 0);
960         }
961 out_old:
962         f2fs_dentry_kunmap(old_dir, old_page);
963         f2fs_put_page(old_page, 0);
964 out:
965         return err;
966 }
967
968 static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
969                              struct inode *new_dir, struct dentry *new_dentry)
970 {
971         struct f2fs_sb_info *sbi = F2FS_I_SB(old_dir);
972         struct inode *old_inode = d_inode(old_dentry);
973         struct inode *new_inode = d_inode(new_dentry);
974         struct page *old_dir_page, *new_dir_page;
975         struct page *old_page, *new_page;
976         struct f2fs_dir_entry *old_dir_entry = NULL, *new_dir_entry = NULL;
977         struct f2fs_dir_entry *old_entry, *new_entry;
978         int old_nlink = 0, new_nlink = 0;
979         int err = -ENOENT;
980
981         if (unlikely(f2fs_cp_error(sbi)))
982                 return -EIO;
983
984         if ((is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
985                         !projid_eq(F2FS_I(new_dir)->i_projid,
986                         F2FS_I(old_dentry->d_inode)->i_projid)) ||
987             (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
988                         !projid_eq(F2FS_I(old_dir)->i_projid,
989                         F2FS_I(new_dentry->d_inode)->i_projid)))
990                 return -EXDEV;
991
992         err = dquot_initialize(old_dir);
993         if (err)
994                 goto out;
995
996         err = dquot_initialize(new_dir);
997         if (err)
998                 goto out;
999
1000         old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
1001         if (!old_entry) {
1002                 if (IS_ERR(old_page))
1003                         err = PTR_ERR(old_page);
1004                 goto out;
1005         }
1006
1007         new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name, &new_page);
1008         if (!new_entry) {
1009                 if (IS_ERR(new_page))
1010                         err = PTR_ERR(new_page);
1011                 goto out_old;
1012         }
1013
1014         /* prepare for updating ".." directory entry info later */
1015         if (old_dir != new_dir) {
1016                 if (S_ISDIR(old_inode->i_mode)) {
1017                         old_dir_entry = f2fs_parent_dir(old_inode,
1018                                                         &old_dir_page);
1019                         if (!old_dir_entry) {
1020                                 if (IS_ERR(old_dir_page))
1021                                         err = PTR_ERR(old_dir_page);
1022                                 goto out_new;
1023                         }
1024                 }
1025
1026                 if (S_ISDIR(new_inode->i_mode)) {
1027                         new_dir_entry = f2fs_parent_dir(new_inode,
1028                                                         &new_dir_page);
1029                         if (!new_dir_entry) {
1030                                 if (IS_ERR(new_dir_page))
1031                                         err = PTR_ERR(new_dir_page);
1032                                 goto out_old_dir;
1033                         }
1034                 }
1035         }
1036
1037         /*
1038          * If cross rename between file and directory those are not
1039          * in the same directory, we will inc nlink of file's parent
1040          * later, so we should check upper boundary of its nlink.
1041          */
1042         if ((!old_dir_entry || !new_dir_entry) &&
1043                                 old_dir_entry != new_dir_entry) {
1044                 old_nlink = old_dir_entry ? -1 : 1;
1045                 new_nlink = -old_nlink;
1046                 err = -EMLINK;
1047                 if ((old_nlink > 0 && old_dir->i_nlink >= F2FS_LINK_MAX) ||
1048                         (new_nlink > 0 && new_dir->i_nlink >= F2FS_LINK_MAX))
1049                         goto out_new_dir;
1050         }
1051
1052         f2fs_balance_fs(sbi, true);
1053
1054         f2fs_lock_op(sbi);
1055
1056         /* update ".." directory entry info of old dentry */
1057         if (old_dir_entry)
1058                 f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir);
1059
1060         /* update ".." directory entry info of new dentry */
1061         if (new_dir_entry)
1062                 f2fs_set_link(new_inode, new_dir_entry, new_dir_page, old_dir);
1063
1064         /* update directory entry info of old dir inode */
1065         f2fs_set_link(old_dir, old_entry, old_page, new_inode);
1066
1067         down_write(&F2FS_I(old_inode)->i_sem);
1068         file_lost_pino(old_inode);
1069         up_write(&F2FS_I(old_inode)->i_sem);
1070
1071         old_dir->i_ctime = current_time(old_dir);
1072         if (old_nlink) {
1073                 down_write(&F2FS_I(old_dir)->i_sem);
1074                 f2fs_i_links_write(old_dir, old_nlink > 0);
1075                 up_write(&F2FS_I(old_dir)->i_sem);
1076         }
1077         f2fs_mark_inode_dirty_sync(old_dir, false);
1078
1079         /* update directory entry info of new dir inode */
1080         f2fs_set_link(new_dir, new_entry, new_page, old_inode);
1081
1082         down_write(&F2FS_I(new_inode)->i_sem);
1083         file_lost_pino(new_inode);
1084         up_write(&F2FS_I(new_inode)->i_sem);
1085
1086         new_dir->i_ctime = current_time(new_dir);
1087         if (new_nlink) {
1088                 down_write(&F2FS_I(new_dir)->i_sem);
1089                 f2fs_i_links_write(new_dir, new_nlink > 0);
1090                 up_write(&F2FS_I(new_dir)->i_sem);
1091         }
1092         f2fs_mark_inode_dirty_sync(new_dir, false);
1093
1094         add_ino_entry(sbi, old_dir->i_ino, TRANS_DIR_INO);
1095         add_ino_entry(sbi, new_dir->i_ino, TRANS_DIR_INO);
1096
1097         f2fs_unlock_op(sbi);
1098
1099         if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
1100                 f2fs_sync_fs(sbi->sb, 1);
1101         return 0;
1102 out_new_dir:
1103         if (new_dir_entry) {
1104                 f2fs_dentry_kunmap(new_inode, new_dir_page);
1105                 f2fs_put_page(new_dir_page, 0);
1106         }
1107 out_old_dir:
1108         if (old_dir_entry) {
1109                 f2fs_dentry_kunmap(old_inode, old_dir_page);
1110                 f2fs_put_page(old_dir_page, 0);
1111         }
1112 out_new:
1113         f2fs_dentry_kunmap(new_dir, new_page);
1114         f2fs_put_page(new_page, 0);
1115 out_old:
1116         f2fs_dentry_kunmap(old_dir, old_page);
1117         f2fs_put_page(old_page, 0);
1118 out:
1119         return err;
1120 }
1121
1122 static int f2fs_rename2(struct inode *old_dir, struct dentry *old_dentry,
1123                         struct inode *new_dir, struct dentry *new_dentry,
1124                         unsigned int flags)
1125 {
1126         int err;
1127
1128         if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
1129                 return -EINVAL;
1130
1131         err = fscrypt_prepare_rename(old_dir, old_dentry, new_dir, new_dentry,
1132                                      flags);
1133         if (err)
1134                 return err;
1135
1136         if (flags & RENAME_EXCHANGE) {
1137                 return f2fs_cross_rename(old_dir, old_dentry,
1138                                          new_dir, new_dentry);
1139         }
1140         /*
1141          * VFS has already handled the new dentry existence case,
1142          * here, we just deal with "RENAME_NOREPLACE" as regular rename.
1143          */
1144         return f2fs_rename(old_dir, old_dentry, new_dir, new_dentry, flags);
1145 }
1146
1147 static const char *f2fs_encrypted_get_link(struct dentry *dentry,
1148                                            struct inode *inode,
1149                                            struct delayed_call *done)
1150 {
1151         struct page *cpage = NULL;
1152         char *caddr, *paddr = NULL;
1153         struct fscrypt_str cstr = FSTR_INIT(NULL, 0);
1154         struct fscrypt_str pstr = FSTR_INIT(NULL, 0);
1155         struct fscrypt_symlink_data *sd;
1156         u32 max_size = inode->i_sb->s_blocksize;
1157         int res;
1158
1159         if (!dentry)
1160                 return ERR_PTR(-ECHILD);
1161
1162         res = fscrypt_get_encryption_info(inode);
1163         if (res)
1164                 return ERR_PTR(res);
1165
1166         cpage = read_mapping_page(inode->i_mapping, 0, NULL);
1167         if (IS_ERR(cpage))
1168                 return ERR_CAST(cpage);
1169         caddr = page_address(cpage);
1170
1171         /* Symlink is encrypted */
1172         sd = (struct fscrypt_symlink_data *)caddr;
1173         cstr.name = sd->encrypted_path;
1174         cstr.len = le16_to_cpu(sd->len);
1175
1176         /* this is broken symlink case */
1177         if (unlikely(cstr.len == 0)) {
1178                 res = -ENOENT;
1179                 goto errout;
1180         }
1181
1182         if ((cstr.len + sizeof(struct fscrypt_symlink_data) - 1) > max_size) {
1183                 /* Symlink data on the disk is corrupted */
1184                 res = -EIO;
1185                 goto errout;
1186         }
1187         res = fscrypt_fname_alloc_buffer(inode, cstr.len, &pstr);
1188         if (res)
1189                 goto errout;
1190
1191         res = fscrypt_fname_disk_to_usr(inode, 0, 0, &cstr, &pstr);
1192         if (res)
1193                 goto errout;
1194
1195         /* this is broken symlink case */
1196         if (unlikely(pstr.name[0] == 0)) {
1197                 res = -ENOENT;
1198                 goto errout;
1199         }
1200
1201         paddr = pstr.name;
1202
1203         /* Null-terminate the name */
1204         paddr[pstr.len] = '\0';
1205
1206         put_page(cpage);
1207         set_delayed_call(done, kfree_link, paddr);
1208         return paddr;
1209 errout:
1210         fscrypt_fname_free_buffer(&pstr);
1211         put_page(cpage);
1212         return ERR_PTR(res);
1213 }
1214
1215 const struct inode_operations f2fs_encrypted_symlink_inode_operations = {
1216         .get_link       = f2fs_encrypted_get_link,
1217         .getattr        = f2fs_getattr,
1218         .setattr        = f2fs_setattr,
1219 #ifdef CONFIG_F2FS_FS_XATTR
1220         .listxattr      = f2fs_listxattr,
1221 #endif
1222 };
1223
1224 const struct inode_operations f2fs_dir_inode_operations = {
1225         .create         = f2fs_create,
1226         .lookup         = f2fs_lookup,
1227         .link           = f2fs_link,
1228         .unlink         = f2fs_unlink,
1229         .symlink        = f2fs_symlink,
1230         .mkdir          = f2fs_mkdir,
1231         .rmdir          = f2fs_rmdir,
1232         .mknod          = f2fs_mknod,
1233         .rename         = f2fs_rename2,
1234         .tmpfile        = f2fs_tmpfile,
1235         .getattr        = f2fs_getattr,
1236         .setattr        = f2fs_setattr,
1237         .get_acl        = f2fs_get_acl,
1238         .set_acl        = f2fs_set_acl,
1239 #ifdef CONFIG_F2FS_FS_XATTR
1240         .listxattr      = f2fs_listxattr,
1241 #endif
1242 };
1243
1244 const struct inode_operations f2fs_symlink_inode_operations = {
1245         .get_link       = f2fs_get_link,
1246         .getattr        = f2fs_getattr,
1247         .setattr        = f2fs_setattr,
1248 #ifdef CONFIG_F2FS_FS_XATTR
1249         .listxattr      = f2fs_listxattr,
1250 #endif
1251 };
1252
1253 const struct inode_operations f2fs_special_inode_operations = {
1254         .getattr        = f2fs_getattr,
1255         .setattr        = f2fs_setattr,
1256         .get_acl        = f2fs_get_acl,
1257         .set_acl        = f2fs_set_acl,
1258 #ifdef CONFIG_F2FS_FS_XATTR
1259         .listxattr      = f2fs_listxattr,
1260 #endif
1261 };