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