Linux Audio

Check our new training course

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