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