OSDN Git Service

f2fs: support flexible inline xattr size
[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         if (f2fs_encrypted_inode(dir) &&
244                         !fscrypt_has_permitted_context(dir, inode))
245                 return -EPERM;
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         if (f2fs_encrypted_inode(dir)) {
361                 err = fscrypt_get_encryption_info(dir);
362
363                 /*
364                  * DCACHE_ENCRYPTED_WITH_KEY is set if the dentry is
365                  * created while the directory was encrypted and we
366                  * don't have access to the key.
367                  */
368                 if (fscrypt_has_encryption_key(dir))
369                         fscrypt_set_encrypted_dentry(dentry);
370                 fscrypt_set_d_op(dentry);
371                 if (err && err != -ENOKEY)
372                         goto out;
373         }
374
375         if (dentry->d_name.len > F2FS_NAME_LEN) {
376                 err = -ENAMETOOLONG;
377                 goto out;
378         }
379
380         de = f2fs_find_entry(dir, &dentry->d_name, &page);
381         if (!de) {
382                 if (IS_ERR(page)) {
383                         err = PTR_ERR(page);
384                         goto out;
385                 }
386                 goto out_splice;
387         }
388
389         ino = le32_to_cpu(de->ino);
390         f2fs_dentry_kunmap(dir, page);
391         f2fs_put_page(page, 0);
392
393         inode = f2fs_iget(dir->i_sb, ino);
394         if (IS_ERR(inode)) {
395                 err = PTR_ERR(inode);
396                 goto out;
397         }
398
399         if ((dir->i_ino == root_ino) && f2fs_has_inline_dots(dir)) {
400                 err = __recover_dot_dentries(dir, root_ino);
401                 if (err)
402                         goto out_iput;
403         }
404
405         if (f2fs_has_inline_dots(inode)) {
406                 err = __recover_dot_dentries(inode, dir->i_ino);
407                 if (err)
408                         goto out_iput;
409         }
410         if (f2fs_encrypted_inode(dir) &&
411             (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
412             !fscrypt_has_permitted_context(dir, inode)) {
413                 f2fs_msg(inode->i_sb, KERN_WARNING,
414                          "Inconsistent encryption contexts: %lu/%lu",
415                          dir->i_ino, inode->i_ino);
416                 err = -EPERM;
417                 goto out_iput;
418         }
419 out_splice:
420         new = d_splice_alias(inode, dentry);
421         if (IS_ERR(new))
422                 err = PTR_ERR(new);
423         trace_f2fs_lookup_end(dir, dentry, ino, err);
424         return new;
425 out_iput:
426         iput(inode);
427 out:
428         trace_f2fs_lookup_end(dir, dentry, ino, err);
429         return ERR_PTR(err);
430 }
431
432 static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
433 {
434         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
435         struct inode *inode = d_inode(dentry);
436         struct f2fs_dir_entry *de;
437         struct page *page;
438         int err = -ENOENT;
439
440         trace_f2fs_unlink_enter(dir, dentry);
441
442         if (unlikely(f2fs_cp_error(sbi)))
443                 return -EIO;
444
445         err = dquot_initialize(dir);
446         if (err)
447                 return err;
448         err = dquot_initialize(inode);
449         if (err)
450                 return err;
451
452         de = f2fs_find_entry(dir, &dentry->d_name, &page);
453         if (!de) {
454                 if (IS_ERR(page))
455                         err = PTR_ERR(page);
456                 goto fail;
457         }
458
459         f2fs_balance_fs(sbi, true);
460
461         f2fs_lock_op(sbi);
462         err = acquire_orphan_inode(sbi);
463         if (err) {
464                 f2fs_unlock_op(sbi);
465                 f2fs_dentry_kunmap(dir, page);
466                 f2fs_put_page(page, 0);
467                 goto fail;
468         }
469         f2fs_delete_entry(de, page, dir, inode);
470         f2fs_unlock_op(sbi);
471
472         if (IS_DIRSYNC(dir))
473                 f2fs_sync_fs(sbi->sb, 1);
474 fail:
475         trace_f2fs_unlink_exit(inode, err);
476         return err;
477 }
478
479 static const char *f2fs_follow_link(struct dentry *dentry, void **cookie)
480 {
481         const char *link = page_follow_link_light(dentry, cookie);
482         if (!IS_ERR(link) && !*link) {
483                 /* this is broken symlink case */
484                 page_put_link(NULL, *cookie);
485                 link = ERR_PTR(-ENOENT);
486         }
487         return link;
488 }
489
490 static int f2fs_symlink(struct inode *dir, struct dentry *dentry,
491                                         const char *symname)
492 {
493         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
494         struct inode *inode;
495         size_t len = strlen(symname);
496         struct fscrypt_str disk_link = FSTR_INIT((char *)symname, len + 1);
497         struct fscrypt_symlink_data *sd = NULL;
498         int err;
499
500         if (unlikely(f2fs_cp_error(sbi)))
501                 return -EIO;
502
503         if (f2fs_encrypted_inode(dir)) {
504                 err = fscrypt_get_encryption_info(dir);
505                 if (err)
506                         return err;
507
508                 if (!fscrypt_has_encryption_key(dir))
509                         return -ENOKEY;
510
511                 disk_link.len = (fscrypt_fname_encrypted_size(dir, len) +
512                                 sizeof(struct fscrypt_symlink_data));
513         }
514
515         if (disk_link.len > dir->i_sb->s_blocksize)
516                 return -ENAMETOOLONG;
517
518         err = dquot_initialize(dir);
519         if (err)
520                 return err;
521
522         inode = f2fs_new_inode(dir, S_IFLNK | S_IRWXUGO);
523         if (IS_ERR(inode))
524                 return PTR_ERR(inode);
525
526         if (f2fs_encrypted_inode(inode))
527                 inode->i_op = &f2fs_encrypted_symlink_inode_operations;
528         else
529                 inode->i_op = &f2fs_symlink_inode_operations;
530         inode_nohighmem(inode);
531         inode->i_mapping->a_ops = &f2fs_dblock_aops;
532
533         f2fs_lock_op(sbi);
534         err = f2fs_add_link(dentry, inode);
535         if (err)
536                 goto out;
537         f2fs_unlock_op(sbi);
538         alloc_nid_done(sbi, inode->i_ino);
539
540         if (f2fs_encrypted_inode(inode)) {
541                 struct qstr istr = QSTR_INIT(symname, len);
542                 struct fscrypt_str ostr;
543
544                 sd = kzalloc(disk_link.len, GFP_NOFS);
545                 if (!sd) {
546                         err = -ENOMEM;
547                         goto err_out;
548                 }
549
550                 err = fscrypt_get_encryption_info(inode);
551                 if (err)
552                         goto err_out;
553
554                 if (!fscrypt_has_encryption_key(inode)) {
555                         err = -ENOKEY;
556                         goto err_out;
557                 }
558
559                 ostr.name = sd->encrypted_path;
560                 ostr.len = disk_link.len;
561                 err = fscrypt_fname_usr_to_disk(inode, &istr, &ostr);
562                 if (err)
563                         goto err_out;
564
565                 sd->len = cpu_to_le16(ostr.len);
566                 disk_link.name = (char *)sd;
567         }
568
569         err = page_symlink(inode, disk_link.name, disk_link.len);
570
571 err_out:
572         d_instantiate(dentry, inode);
573         unlock_new_inode(inode);
574
575         /*
576          * Let's flush symlink data in order to avoid broken symlink as much as
577          * possible. Nevertheless, fsyncing is the best way, but there is no
578          * way to get a file descriptor in order to flush that.
579          *
580          * Note that, it needs to do dir->fsync to make this recoverable.
581          * If the symlink path is stored into inline_data, there is no
582          * performance regression.
583          */
584         if (!err) {
585                 filemap_write_and_wait_range(inode->i_mapping, 0,
586                                                         disk_link.len - 1);
587
588                 if (IS_DIRSYNC(dir))
589                         f2fs_sync_fs(sbi->sb, 1);
590         } else {
591                 f2fs_unlink(dir, dentry);
592         }
593
594         kfree(sd);
595
596         f2fs_balance_fs(sbi, true);
597         return err;
598 out:
599         handle_failed_inode(inode);
600         return err;
601 }
602
603 static int f2fs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
604 {
605         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
606         struct inode *inode;
607         int err;
608
609         if (unlikely(f2fs_cp_error(sbi)))
610                 return -EIO;
611
612         err = dquot_initialize(dir);
613         if (err)
614                 return err;
615
616         inode = f2fs_new_inode(dir, S_IFDIR | mode);
617         if (IS_ERR(inode))
618                 return PTR_ERR(inode);
619
620         inode->i_op = &f2fs_dir_inode_operations;
621         inode->i_fop = &f2fs_dir_operations;
622         inode->i_mapping->a_ops = &f2fs_dblock_aops;
623         mapping_set_gfp_mask(inode->i_mapping, GFP_F2FS_HIGH_ZERO);
624
625         set_inode_flag(inode, FI_INC_LINK);
626         f2fs_lock_op(sbi);
627         err = f2fs_add_link(dentry, inode);
628         if (err)
629                 goto out_fail;
630         f2fs_unlock_op(sbi);
631
632         alloc_nid_done(sbi, inode->i_ino);
633
634         d_instantiate(dentry, inode);
635         unlock_new_inode(inode);
636
637         if (IS_DIRSYNC(dir))
638                 f2fs_sync_fs(sbi->sb, 1);
639
640         f2fs_balance_fs(sbi, true);
641         return 0;
642
643 out_fail:
644         clear_inode_flag(inode, FI_INC_LINK);
645         handle_failed_inode(inode);
646         return err;
647 }
648
649 static int f2fs_rmdir(struct inode *dir, struct dentry *dentry)
650 {
651         struct inode *inode = d_inode(dentry);
652         if (f2fs_empty_dir(inode))
653                 return f2fs_unlink(dir, dentry);
654         return -ENOTEMPTY;
655 }
656
657 static int f2fs_mknod(struct inode *dir, struct dentry *dentry,
658                                 umode_t mode, dev_t rdev)
659 {
660         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
661         struct inode *inode;
662         int err = 0;
663
664         if (unlikely(f2fs_cp_error(sbi)))
665                 return -EIO;
666
667         err = dquot_initialize(dir);
668         if (err)
669                 return err;
670
671         inode = f2fs_new_inode(dir, mode);
672         if (IS_ERR(inode))
673                 return PTR_ERR(inode);
674
675         init_special_inode(inode, inode->i_mode, rdev);
676         inode->i_op = &f2fs_special_inode_operations;
677
678         f2fs_lock_op(sbi);
679         err = f2fs_add_link(dentry, inode);
680         if (err)
681                 goto out;
682         f2fs_unlock_op(sbi);
683
684         alloc_nid_done(sbi, inode->i_ino);
685
686         d_instantiate(dentry, inode);
687         unlock_new_inode(inode);
688
689         if (IS_DIRSYNC(dir))
690                 f2fs_sync_fs(sbi->sb, 1);
691
692         f2fs_balance_fs(sbi, true);
693         return 0;
694 out:
695         handle_failed_inode(inode);
696         return err;
697 }
698
699 static int __f2fs_tmpfile(struct inode *dir, struct dentry *dentry,
700                                         umode_t mode, struct inode **whiteout)
701 {
702         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
703         struct inode *inode;
704         int err;
705
706         err = dquot_initialize(dir);
707         if (err)
708                 return err;
709
710         inode = f2fs_new_inode(dir, mode);
711         if (IS_ERR(inode))
712                 return PTR_ERR(inode);
713
714         if (whiteout) {
715                 init_special_inode(inode, inode->i_mode, WHITEOUT_DEV);
716                 inode->i_op = &f2fs_special_inode_operations;
717         } else {
718                 inode->i_op = &f2fs_file_inode_operations;
719                 inode->i_fop = &f2fs_file_operations;
720                 inode->i_mapping->a_ops = &f2fs_dblock_aops;
721         }
722
723         f2fs_lock_op(sbi);
724         err = acquire_orphan_inode(sbi);
725         if (err)
726                 goto out;
727
728         err = f2fs_do_tmpfile(inode, dir);
729         if (err)
730                 goto release_out;
731
732         /*
733          * add this non-linked tmpfile to orphan list, in this way we could
734          * remove all unused data of tmpfile after abnormal power-off.
735          */
736         add_orphan_inode(inode);
737         alloc_nid_done(sbi, inode->i_ino);
738
739         if (whiteout) {
740                 f2fs_i_links_write(inode, false);
741                 *whiteout = inode;
742         } else {
743                 d_tmpfile(dentry, inode);
744         }
745         /* link_count was changed by d_tmpfile as well. */
746         f2fs_unlock_op(sbi);
747         unlock_new_inode(inode);
748
749         f2fs_balance_fs(sbi, true);
750         return 0;
751
752 release_out:
753         release_orphan_inode(sbi);
754 out:
755         handle_failed_inode(inode);
756         return err;
757 }
758
759 static int f2fs_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode)
760 {
761         if (unlikely(f2fs_cp_error(F2FS_I_SB(dir))))
762                 return -EIO;
763
764         if (f2fs_encrypted_inode(dir)) {
765                 int err = fscrypt_get_encryption_info(dir);
766                 if (err)
767                         return err;
768         }
769
770         return __f2fs_tmpfile(dir, dentry, mode, NULL);
771 }
772
773 static int f2fs_create_whiteout(struct inode *dir, struct inode **whiteout)
774 {
775         if (unlikely(f2fs_cp_error(F2FS_I_SB(dir))))
776                 return -EIO;
777
778         return __f2fs_tmpfile(dir, NULL, S_IFCHR | WHITEOUT_MODE, whiteout);
779 }
780
781 static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
782                         struct inode *new_dir, struct dentry *new_dentry,
783                         unsigned int flags)
784 {
785         struct f2fs_sb_info *sbi = F2FS_I_SB(old_dir);
786         struct inode *old_inode = d_inode(old_dentry);
787         struct inode *new_inode = d_inode(new_dentry);
788         struct inode *whiteout = NULL;
789         struct page *old_dir_page;
790         struct page *old_page, *new_page = NULL;
791         struct f2fs_dir_entry *old_dir_entry = NULL;
792         struct f2fs_dir_entry *old_entry;
793         struct f2fs_dir_entry *new_entry;
794         bool is_old_inline = f2fs_has_inline_dentry(old_dir);
795         int err = -ENOENT;
796
797         if (unlikely(f2fs_cp_error(sbi)))
798                 return -EIO;
799
800         if ((f2fs_encrypted_inode(old_dir) &&
801                         !fscrypt_has_encryption_key(old_dir)) ||
802                         (f2fs_encrypted_inode(new_dir) &&
803                         !fscrypt_has_encryption_key(new_dir)))
804                 return -ENOKEY;
805
806         if ((old_dir != new_dir) && f2fs_encrypted_inode(new_dir) &&
807                         !fscrypt_has_permitted_context(new_dir, old_inode)) {
808                 err = -EPERM;
809                 goto out;
810         }
811
812         if (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
813                         (!projid_eq(F2FS_I(new_dir)->i_projid,
814                         F2FS_I(old_dentry->d_inode)->i_projid)))
815                 return -EXDEV;
816
817         err = dquot_initialize(old_dir);
818         if (err)
819                 goto out;
820
821         err = dquot_initialize(new_dir);
822         if (err)
823                 goto out;
824
825         if (new_inode) {
826                 err = dquot_initialize(new_inode);
827                 if (err)
828                         goto out;
829         }
830
831         old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
832         if (!old_entry) {
833                 if (IS_ERR(old_page))
834                         err = PTR_ERR(old_page);
835                 goto out;
836         }
837
838         if (S_ISDIR(old_inode->i_mode)) {
839                 old_dir_entry = f2fs_parent_dir(old_inode, &old_dir_page);
840                 if (!old_dir_entry) {
841                         if (IS_ERR(old_dir_page))
842                                 err = PTR_ERR(old_dir_page);
843                         goto out_old;
844                 }
845         }
846
847         if (flags & RENAME_WHITEOUT) {
848                 err = f2fs_create_whiteout(old_dir, &whiteout);
849                 if (err)
850                         goto out_dir;
851         }
852
853         if (new_inode) {
854
855                 err = -ENOTEMPTY;
856                 if (old_dir_entry && !f2fs_empty_dir(new_inode))
857                         goto out_whiteout;
858
859                 err = -ENOENT;
860                 new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name,
861                                                 &new_page);
862                 if (!new_entry) {
863                         if (IS_ERR(new_page))
864                                 err = PTR_ERR(new_page);
865                         goto out_whiteout;
866                 }
867
868                 f2fs_balance_fs(sbi, true);
869
870                 f2fs_lock_op(sbi);
871
872                 err = acquire_orphan_inode(sbi);
873                 if (err)
874                         goto put_out_dir;
875
876                 f2fs_set_link(new_dir, new_entry, new_page, old_inode);
877
878                 new_inode->i_ctime = current_time(new_inode);
879                 down_write(&F2FS_I(new_inode)->i_sem);
880                 if (old_dir_entry)
881                         f2fs_i_links_write(new_inode, false);
882                 f2fs_i_links_write(new_inode, false);
883                 up_write(&F2FS_I(new_inode)->i_sem);
884
885                 if (!new_inode->i_nlink)
886                         add_orphan_inode(new_inode);
887                 else
888                         release_orphan_inode(sbi);
889         } else {
890                 f2fs_balance_fs(sbi, true);
891
892                 f2fs_lock_op(sbi);
893
894                 err = f2fs_add_link(new_dentry, old_inode);
895                 if (err) {
896                         f2fs_unlock_op(sbi);
897                         goto out_whiteout;
898                 }
899
900                 if (old_dir_entry)
901                         f2fs_i_links_write(new_dir, true);
902
903                 /*
904                  * old entry and new entry can locate in the same inline
905                  * dentry in inode, when attaching new entry in inline dentry,
906                  * it could force inline dentry conversion, after that,
907                  * old_entry and old_page will point to wrong address, in
908                  * order to avoid this, let's do the check and update here.
909                  */
910                 if (is_old_inline && !f2fs_has_inline_dentry(old_dir)) {
911                         f2fs_put_page(old_page, 0);
912                         old_page = NULL;
913
914                         old_entry = f2fs_find_entry(old_dir,
915                                                 &old_dentry->d_name, &old_page);
916                         if (!old_entry) {
917                                 err = -ENOENT;
918                                 if (IS_ERR(old_page))
919                                         err = PTR_ERR(old_page);
920                                 f2fs_unlock_op(sbi);
921                                 goto out_whiteout;
922                         }
923                 }
924         }
925
926         down_write(&F2FS_I(old_inode)->i_sem);
927         if (!old_dir_entry || whiteout)
928                 file_lost_pino(old_inode);
929         else
930                 F2FS_I(old_inode)->i_pino = new_dir->i_ino;
931         up_write(&F2FS_I(old_inode)->i_sem);
932
933         old_inode->i_ctime = current_time(old_inode);
934         f2fs_mark_inode_dirty_sync(old_inode, false);
935
936         f2fs_delete_entry(old_entry, old_page, old_dir, NULL);
937
938         if (whiteout) {
939                 whiteout->i_state |= I_LINKABLE;
940                 set_inode_flag(whiteout, FI_INC_LINK);
941                 err = f2fs_add_link(old_dentry, whiteout);
942                 if (err)
943                         goto put_out_dir;
944                 whiteout->i_state &= ~I_LINKABLE;
945                 iput(whiteout);
946         }
947
948         if (old_dir_entry) {
949                 if (old_dir != new_dir && !whiteout) {
950                         f2fs_set_link(old_inode, old_dir_entry,
951                                                 old_dir_page, new_dir);
952                 } else {
953                         f2fs_dentry_kunmap(old_inode, old_dir_page);
954                         f2fs_put_page(old_dir_page, 0);
955                 }
956                 f2fs_i_links_write(old_dir, false);
957         }
958
959         f2fs_unlock_op(sbi);
960
961         if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
962                 f2fs_sync_fs(sbi->sb, 1);
963         return 0;
964
965 put_out_dir:
966         f2fs_unlock_op(sbi);
967         if (new_page) {
968                 f2fs_dentry_kunmap(new_dir, new_page);
969                 f2fs_put_page(new_page, 0);
970         }
971 out_whiteout:
972         if (whiteout)
973                 iput(whiteout);
974 out_dir:
975         if (old_dir_entry) {
976                 f2fs_dentry_kunmap(old_inode, old_dir_page);
977                 f2fs_put_page(old_dir_page, 0);
978         }
979 out_old:
980         f2fs_dentry_kunmap(old_dir, old_page);
981         f2fs_put_page(old_page, 0);
982 out:
983         return err;
984 }
985
986 static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
987                              struct inode *new_dir, struct dentry *new_dentry)
988 {
989         struct f2fs_sb_info *sbi = F2FS_I_SB(old_dir);
990         struct inode *old_inode = d_inode(old_dentry);
991         struct inode *new_inode = d_inode(new_dentry);
992         struct page *old_dir_page, *new_dir_page;
993         struct page *old_page, *new_page;
994         struct f2fs_dir_entry *old_dir_entry = NULL, *new_dir_entry = NULL;
995         struct f2fs_dir_entry *old_entry, *new_entry;
996         int old_nlink = 0, new_nlink = 0;
997         int err = -ENOENT;
998
999         if (unlikely(f2fs_cp_error(sbi)))
1000                 return -EIO;
1001
1002         if ((f2fs_encrypted_inode(old_dir) &&
1003                         !fscrypt_has_encryption_key(old_dir)) ||
1004                         (f2fs_encrypted_inode(new_dir) &&
1005                         !fscrypt_has_encryption_key(new_dir)))
1006                 return -ENOKEY;
1007
1008         if ((f2fs_encrypted_inode(old_dir) || f2fs_encrypted_inode(new_dir)) &&
1009                         (old_dir != new_dir) &&
1010                         (!fscrypt_has_permitted_context(new_dir, old_inode) ||
1011                          !fscrypt_has_permitted_context(old_dir, new_inode)))
1012                 return -EPERM;
1013
1014         if ((is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
1015                         !projid_eq(F2FS_I(new_dir)->i_projid,
1016                         F2FS_I(old_dentry->d_inode)->i_projid)) ||
1017             (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
1018                         !projid_eq(F2FS_I(old_dir)->i_projid,
1019                         F2FS_I(new_dentry->d_inode)->i_projid)))
1020                 return -EXDEV;
1021
1022         err = dquot_initialize(old_dir);
1023         if (err)
1024                 goto out;
1025
1026         err = dquot_initialize(new_dir);
1027         if (err)
1028                 goto out;
1029
1030         old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
1031         if (!old_entry) {
1032                 if (IS_ERR(old_page))
1033                         err = PTR_ERR(old_page);
1034                 goto out;
1035         }
1036
1037         new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name, &new_page);
1038         if (!new_entry) {
1039                 if (IS_ERR(new_page))
1040                         err = PTR_ERR(new_page);
1041                 goto out_old;
1042         }
1043
1044         /* prepare for updating ".." directory entry info later */
1045         if (old_dir != new_dir) {
1046                 if (S_ISDIR(old_inode->i_mode)) {
1047                         old_dir_entry = f2fs_parent_dir(old_inode,
1048                                                         &old_dir_page);
1049                         if (!old_dir_entry) {
1050                                 if (IS_ERR(old_dir_page))
1051                                         err = PTR_ERR(old_dir_page);
1052                                 goto out_new;
1053                         }
1054                 }
1055
1056                 if (S_ISDIR(new_inode->i_mode)) {
1057                         new_dir_entry = f2fs_parent_dir(new_inode,
1058                                                         &new_dir_page);
1059                         if (!new_dir_entry) {
1060                                 if (IS_ERR(new_dir_page))
1061                                         err = PTR_ERR(new_dir_page);
1062                                 goto out_old_dir;
1063                         }
1064                 }
1065         }
1066
1067         /*
1068          * If cross rename between file and directory those are not
1069          * in the same directory, we will inc nlink of file's parent
1070          * later, so we should check upper boundary of its nlink.
1071          */
1072         if ((!old_dir_entry || !new_dir_entry) &&
1073                                 old_dir_entry != new_dir_entry) {
1074                 old_nlink = old_dir_entry ? -1 : 1;
1075                 new_nlink = -old_nlink;
1076                 err = -EMLINK;
1077                 if ((old_nlink > 0 && old_dir->i_nlink >= F2FS_LINK_MAX) ||
1078                         (new_nlink > 0 && new_dir->i_nlink >= F2FS_LINK_MAX))
1079                         goto out_new_dir;
1080         }
1081
1082         f2fs_balance_fs(sbi, true);
1083
1084         f2fs_lock_op(sbi);
1085
1086         /* update ".." directory entry info of old dentry */
1087         if (old_dir_entry)
1088                 f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir);
1089
1090         /* update ".." directory entry info of new dentry */
1091         if (new_dir_entry)
1092                 f2fs_set_link(new_inode, new_dir_entry, new_dir_page, old_dir);
1093
1094         /* update directory entry info of old dir inode */
1095         f2fs_set_link(old_dir, old_entry, old_page, new_inode);
1096
1097         down_write(&F2FS_I(old_inode)->i_sem);
1098         file_lost_pino(old_inode);
1099         up_write(&F2FS_I(old_inode)->i_sem);
1100
1101         old_dir->i_ctime = current_time(old_dir);
1102         if (old_nlink) {
1103                 down_write(&F2FS_I(old_dir)->i_sem);
1104                 f2fs_i_links_write(old_dir, old_nlink > 0);
1105                 up_write(&F2FS_I(old_dir)->i_sem);
1106         }
1107         f2fs_mark_inode_dirty_sync(old_dir, false);
1108
1109         /* update directory entry info of new dir inode */
1110         f2fs_set_link(new_dir, new_entry, new_page, old_inode);
1111
1112         down_write(&F2FS_I(new_inode)->i_sem);
1113         file_lost_pino(new_inode);
1114         up_write(&F2FS_I(new_inode)->i_sem);
1115
1116         new_dir->i_ctime = current_time(new_dir);
1117         if (new_nlink) {
1118                 down_write(&F2FS_I(new_dir)->i_sem);
1119                 f2fs_i_links_write(new_dir, new_nlink > 0);
1120                 up_write(&F2FS_I(new_dir)->i_sem);
1121         }
1122         f2fs_mark_inode_dirty_sync(new_dir, false);
1123
1124         f2fs_unlock_op(sbi);
1125
1126         if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
1127                 f2fs_sync_fs(sbi->sb, 1);
1128         return 0;
1129 out_new_dir:
1130         if (new_dir_entry) {
1131                 f2fs_dentry_kunmap(new_inode, new_dir_page);
1132                 f2fs_put_page(new_dir_page, 0);
1133         }
1134 out_old_dir:
1135         if (old_dir_entry) {
1136                 f2fs_dentry_kunmap(old_inode, old_dir_page);
1137                 f2fs_put_page(old_dir_page, 0);
1138         }
1139 out_new:
1140         f2fs_dentry_kunmap(new_dir, new_page);
1141         f2fs_put_page(new_page, 0);
1142 out_old:
1143         f2fs_dentry_kunmap(old_dir, old_page);
1144         f2fs_put_page(old_page, 0);
1145 out:
1146         return err;
1147 }
1148
1149 static int f2fs_rename2(struct inode *old_dir, struct dentry *old_dentry,
1150                         struct inode *new_dir, struct dentry *new_dentry,
1151                         unsigned int flags)
1152 {
1153         if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
1154                 return -EINVAL;
1155
1156         if (flags & RENAME_EXCHANGE) {
1157                 return f2fs_cross_rename(old_dir, old_dentry,
1158                                          new_dir, new_dentry);
1159         }
1160         /*
1161          * VFS has already handled the new dentry existence case,
1162          * here, we just deal with "RENAME_NOREPLACE" as regular rename.
1163          */
1164         return f2fs_rename(old_dir, old_dentry, new_dir, new_dentry, flags);
1165 }
1166
1167 static const char *f2fs_encrypted_follow_link(struct dentry *dentry, void **cookie)
1168 {
1169         struct page *cpage = NULL;
1170         char *caddr, *paddr = NULL;
1171         struct fscrypt_str cstr = FSTR_INIT(NULL, 0);
1172         struct fscrypt_str pstr = FSTR_INIT(NULL, 0);
1173         struct fscrypt_symlink_data *sd;
1174         struct inode *inode = d_inode(dentry);
1175         u32 max_size = inode->i_sb->s_blocksize;
1176         int res;
1177
1178         res = fscrypt_get_encryption_info(inode);
1179         if (res)
1180                 return ERR_PTR(res);
1181
1182         cpage = read_mapping_page(inode->i_mapping, 0, NULL);
1183         if (IS_ERR(cpage))
1184                 return ERR_CAST(cpage);
1185         caddr = page_address(cpage);
1186
1187         /* Symlink is encrypted */
1188         sd = (struct fscrypt_symlink_data *)caddr;
1189         cstr.name = sd->encrypted_path;
1190         cstr.len = le16_to_cpu(sd->len);
1191
1192         /* this is broken symlink case */
1193         if (unlikely(cstr.len == 0)) {
1194                 res = -ENOENT;
1195                 goto errout;
1196         }
1197
1198         if ((cstr.len + sizeof(struct fscrypt_symlink_data) - 1) > max_size) {
1199                 /* Symlink data on the disk is corrupted */
1200                 res = -EIO;
1201                 goto errout;
1202         }
1203         res = fscrypt_fname_alloc_buffer(inode, cstr.len, &pstr);
1204         if (res)
1205                 goto errout;
1206
1207         res = fscrypt_fname_disk_to_usr(inode, 0, 0, &cstr, &pstr);
1208         if (res)
1209                 goto errout;
1210
1211         /* this is broken symlink case */
1212         if (unlikely(pstr.name[0] == 0)) {
1213                 res = -ENOENT;
1214                 goto errout;
1215         }
1216
1217         paddr = pstr.name;
1218
1219         /* Null-terminate the name */
1220         paddr[pstr.len] = '\0';
1221
1222         put_page(cpage);
1223         return *cookie = paddr;
1224 errout:
1225         fscrypt_fname_free_buffer(&pstr);
1226         put_page(cpage);
1227         return ERR_PTR(res);
1228 }
1229
1230 const struct inode_operations f2fs_encrypted_symlink_inode_operations = {
1231         .readlink       = generic_readlink,
1232         .follow_link    = f2fs_encrypted_follow_link,
1233         .put_link       = kfree_put_link,
1234         .getattr        = f2fs_getattr,
1235         .setattr        = f2fs_setattr,
1236 #ifdef CONFIG_F2FS_FS_XATTR
1237         .setxattr       = generic_setxattr,
1238         .getxattr       = generic_getxattr,
1239         .listxattr      = f2fs_listxattr,
1240         .removexattr    = generic_removexattr,
1241 #endif
1242 };
1243
1244 const struct inode_operations f2fs_dir_inode_operations = {
1245         .create         = f2fs_create,
1246         .lookup         = f2fs_lookup,
1247         .link           = f2fs_link,
1248         .unlink         = f2fs_unlink,
1249         .symlink        = f2fs_symlink,
1250         .mkdir          = f2fs_mkdir,
1251         .rmdir          = f2fs_rmdir,
1252         .mknod          = f2fs_mknod,
1253         .rename2        = f2fs_rename2,
1254         .tmpfile        = f2fs_tmpfile,
1255         .getattr        = f2fs_getattr,
1256         .setattr        = f2fs_setattr,
1257         .get_acl        = f2fs_get_acl,
1258         .set_acl        = f2fs_set_acl,
1259 #ifdef CONFIG_F2FS_FS_XATTR
1260         .setxattr       = generic_setxattr,
1261         .getxattr       = generic_getxattr,
1262         .listxattr      = f2fs_listxattr,
1263         .removexattr    = generic_removexattr,
1264 #endif
1265 };
1266
1267 const struct inode_operations f2fs_symlink_inode_operations = {
1268         .readlink       = generic_readlink,
1269         .follow_link    = f2fs_follow_link,
1270         .put_link       = page_put_link,
1271         .getattr        = f2fs_getattr,
1272         .setattr        = f2fs_setattr,
1273 #ifdef CONFIG_F2FS_FS_XATTR
1274         .setxattr       = generic_setxattr,
1275         .getxattr       = generic_getxattr,
1276         .listxattr      = f2fs_listxattr,
1277         .removexattr    = generic_removexattr,
1278 #endif
1279 };
1280
1281 const struct inode_operations f2fs_special_inode_operations = {
1282         .getattr        = f2fs_getattr,
1283         .setattr        = f2fs_setattr,
1284         .get_acl        = f2fs_get_acl,
1285         .set_acl        = f2fs_set_acl,
1286 #ifdef CONFIG_F2FS_FS_XATTR
1287         .setxattr       = generic_setxattr,
1288         .getxattr       = generic_getxattr,
1289         .listxattr      = f2fs_listxattr,
1290         .removexattr    = generic_removexattr,
1291 #endif
1292 };