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