OSDN Git Service

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