Linux Audio

Check our new training course

Loading...
v4.10.11
 
   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};
v6.13.7
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * fs/f2fs/namei.c
   4 *
   5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
   6 *             http://www.samsung.com/
 
 
 
 
   7 */
   8#include <linux/fs.h>
   9#include <linux/f2fs_fs.h>
  10#include <linux/pagemap.h>
  11#include <linux/sched.h>
  12#include <linux/ctype.h>
  13#include <linux/random.h>
  14#include <linux/dcache.h>
  15#include <linux/namei.h>
  16#include <linux/quotaops.h>
  17
  18#include "f2fs.h"
  19#include "node.h"
  20#include "segment.h"
  21#include "xattr.h"
  22#include "acl.h"
  23#include <trace/events/f2fs.h>
  24
  25static inline bool is_extension_exist(const unsigned char *s, const char *sub,
  26						bool tmp_ext, bool tmp_dot)
  27{
  28	size_t slen = strlen(s);
  29	size_t sublen = strlen(sub);
  30	int i;
  31
  32	if (sublen == 1 && *sub == '*')
  33		return true;
  34
  35	/*
  36	 * filename format of multimedia file should be defined as:
  37	 * "filename + '.' + extension + (optional: '.' + temp extension)".
  38	 */
  39	if (slen < sublen + 2)
  40		return false;
  41
  42	if (!tmp_ext) {
  43		/* file has no temp extension */
  44		if (s[slen - sublen - 1] != '.')
  45			return false;
  46		return !strncasecmp(s + slen - sublen, sub, sublen);
  47	}
  48
  49	for (i = 1; i < slen - sublen; i++) {
  50		if (s[i] != '.')
  51			continue;
  52		if (!strncasecmp(s + i + 1, sub, sublen)) {
  53			if (!tmp_dot)
  54				return true;
  55			if (i == slen - sublen - 1 || s[i + 1 + sublen] == '.')
  56				return true;
  57		}
  58	}
  59
  60	return false;
  61}
  62
  63static inline bool is_temperature_extension(const unsigned char *s, const char *sub)
  64{
  65	return is_extension_exist(s, sub, true, false);
  66}
  67
  68static inline bool is_compress_extension(const unsigned char *s, const char *sub)
  69{
  70	return is_extension_exist(s, sub, true, true);
  71}
  72
  73int f2fs_update_extension_list(struct f2fs_sb_info *sbi, const char *name,
  74							bool hot, bool set)
  75{
  76	__u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list;
  77	int cold_count = le32_to_cpu(sbi->raw_super->extension_count);
  78	int hot_count = sbi->raw_super->hot_ext_count;
  79	int total_count = cold_count + hot_count;
  80	int start, count;
  81	int i;
  82
  83	if (set) {
  84		if (total_count == F2FS_MAX_EXTENSION)
  85			return -EINVAL;
  86	} else {
  87		if (!hot && !cold_count)
  88			return -EINVAL;
  89		if (hot && !hot_count)
  90			return -EINVAL;
  91	}
  92
  93	if (hot) {
  94		start = cold_count;
  95		count = total_count;
  96	} else {
  97		start = 0;
  98		count = cold_count;
  99	}
 100
 101	for (i = start; i < count; i++) {
 102		if (strcmp(name, extlist[i]))
 103			continue;
 104
 105		if (set)
 106			return -EINVAL;
 107
 108		memcpy(extlist[i], extlist[i + 1],
 109				F2FS_EXTENSION_LEN * (total_count - i - 1));
 110		memset(extlist[total_count - 1], 0, F2FS_EXTENSION_LEN);
 111		if (hot)
 112			sbi->raw_super->hot_ext_count = hot_count - 1;
 113		else
 114			sbi->raw_super->extension_count =
 115						cpu_to_le32(cold_count - 1);
 116		return 0;
 117	}
 118
 119	if (!set)
 120		return -EINVAL;
 121
 122	if (hot) {
 123		memcpy(extlist[count], name, strlen(name));
 124		sbi->raw_super->hot_ext_count = hot_count + 1;
 125	} else {
 126		char buf[F2FS_MAX_EXTENSION][F2FS_EXTENSION_LEN];
 127
 128		memcpy(buf, &extlist[cold_count],
 129				F2FS_EXTENSION_LEN * hot_count);
 130		memset(extlist[cold_count], 0, F2FS_EXTENSION_LEN);
 131		memcpy(extlist[cold_count], name, strlen(name));
 132		memcpy(&extlist[cold_count + 1], buf,
 133				F2FS_EXTENSION_LEN * hot_count);
 134		sbi->raw_super->extension_count = cpu_to_le32(cold_count + 1);
 135	}
 136	return 0;
 137}
 138
 139static void set_compress_new_inode(struct f2fs_sb_info *sbi, struct inode *dir,
 140				struct inode *inode, const unsigned char *name)
 141{
 142	__u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list;
 143	unsigned char (*noext)[F2FS_EXTENSION_LEN] =
 144						F2FS_OPTION(sbi).noextensions;
 145	unsigned char (*ext)[F2FS_EXTENSION_LEN] = F2FS_OPTION(sbi).extensions;
 146	unsigned char ext_cnt = F2FS_OPTION(sbi).compress_ext_cnt;
 147	unsigned char noext_cnt = F2FS_OPTION(sbi).nocompress_ext_cnt;
 148	int i, cold_count, hot_count;
 149
 150	if (!f2fs_sb_has_compression(sbi))
 151		return;
 152
 153	if (S_ISDIR(inode->i_mode))
 154		goto inherit_comp;
 155
 156	/* This name comes only from normal files. */
 157	if (!name)
 158		return;
 159
 160	/* Don't compress hot files. */
 161	f2fs_down_read(&sbi->sb_lock);
 162	cold_count = le32_to_cpu(sbi->raw_super->extension_count);
 163	hot_count = sbi->raw_super->hot_ext_count;
 164	for (i = cold_count; i < cold_count + hot_count; i++)
 165		if (is_temperature_extension(name, extlist[i]))
 166			break;
 167	f2fs_up_read(&sbi->sb_lock);
 168	if (i < (cold_count + hot_count))
 169		return;
 170
 171	/* Don't compress unallowed extension. */
 172	for (i = 0; i < noext_cnt; i++)
 173		if (is_compress_extension(name, noext[i]))
 174			return;
 175
 176	/* Compress wanting extension. */
 177	for (i = 0; i < ext_cnt; i++) {
 178		if (is_compress_extension(name, ext[i])) {
 179			set_compress_context(inode);
 180			return;
 181		}
 182	}
 183inherit_comp:
 184	/* Inherit the {no-}compression flag in directory */
 185	if (F2FS_I(dir)->i_flags & F2FS_NOCOMP_FL) {
 186		F2FS_I(inode)->i_flags |= F2FS_NOCOMP_FL;
 187		f2fs_mark_inode_dirty_sync(inode, true);
 188	} else if (F2FS_I(dir)->i_flags & F2FS_COMPR_FL) {
 189		set_compress_context(inode);
 190	}
 191}
 192
 193/*
 194 * Set file's temperature for hot/cold data separation
 195 */
 196static void set_file_temperature(struct f2fs_sb_info *sbi, struct inode *inode,
 197		const unsigned char *name)
 198{
 199	__u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list;
 200	int i, cold_count, hot_count;
 201
 202	f2fs_down_read(&sbi->sb_lock);
 203	cold_count = le32_to_cpu(sbi->raw_super->extension_count);
 204	hot_count = sbi->raw_super->hot_ext_count;
 205	for (i = 0; i < cold_count + hot_count; i++)
 206		if (is_temperature_extension(name, extlist[i]))
 207			break;
 208	f2fs_up_read(&sbi->sb_lock);
 209
 210	if (i == cold_count + hot_count)
 211		return;
 212
 213	if (i < cold_count)
 214		file_set_cold(inode);
 215	else
 216		file_set_hot(inode);
 217}
 218
 219static struct inode *f2fs_new_inode(struct mnt_idmap *idmap,
 220						struct inode *dir, umode_t mode,
 221						const char *name)
 222{
 223	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 224	struct f2fs_inode_info *fi;
 225	nid_t ino;
 226	struct inode *inode;
 227	bool nid_free = false;
 228	bool encrypt = false;
 229	int xattr_size = 0;
 230	int err;
 231
 232	inode = new_inode(dir->i_sb);
 233	if (!inode)
 234		return ERR_PTR(-ENOMEM);
 235
 236	if (!f2fs_alloc_nid(sbi, &ino)) {
 
 
 237		err = -ENOSPC;
 238		goto fail;
 239	}
 
 240
 241	nid_free = true;
 242
 243	inode_init_owner(idmap, inode, dir, mode);
 244
 245	fi = F2FS_I(inode);
 246	inode->i_ino = ino;
 247	inode->i_blocks = 0;
 248	simple_inode_init_ts(inode);
 249	fi->i_crtime = inode_get_mtime(inode);
 250	inode->i_generation = get_random_u32();
 251
 252	if (S_ISDIR(inode->i_mode))
 253		fi->i_current_depth = 1;
 254
 255	err = insert_inode_locked(inode);
 256	if (err) {
 257		err = -EINVAL;
 
 258		goto fail;
 259	}
 260
 261	if (f2fs_sb_has_project_quota(sbi) &&
 262		(F2FS_I(dir)->i_flags & F2FS_PROJINHERIT_FL))
 263		fi->i_projid = F2FS_I(dir)->i_projid;
 264	else
 265		fi->i_projid = make_kprojid(&init_user_ns,
 266							F2FS_DEF_PROJID);
 267
 268	err = fscrypt_prepare_new_inode(dir, inode, &encrypt);
 269	if (err)
 270		goto fail_drop;
 271
 272	err = f2fs_dquot_initialize(inode);
 273	if (err)
 274		goto fail_drop;
 275
 276	set_inode_flag(inode, FI_NEW_INODE);
 277
 278	if (encrypt)
 279		f2fs_set_encrypted_inode(inode);
 280
 281	if (f2fs_sb_has_extra_attr(sbi)) {
 282		set_inode_flag(inode, FI_EXTRA_ATTR);
 283		fi->i_extra_isize = F2FS_TOTAL_EXTRA_ATTR_SIZE;
 284	}
 285
 286	if (test_opt(sbi, INLINE_XATTR))
 287		set_inode_flag(inode, FI_INLINE_XATTR);
 288
 
 289	if (f2fs_may_inline_dentry(inode))
 290		set_inode_flag(inode, FI_INLINE_DENTRY);
 291
 292	if (f2fs_sb_has_flexible_inline_xattr(sbi)) {
 293		f2fs_bug_on(sbi, !f2fs_has_extra_attr(inode));
 294		if (f2fs_has_inline_xattr(inode))
 295			xattr_size = F2FS_OPTION(sbi).inline_xattr_size;
 296		/* Otherwise, will be 0 */
 297	} else if (f2fs_has_inline_xattr(inode) ||
 298				f2fs_has_inline_dentry(inode)) {
 299		xattr_size = DEFAULT_INLINE_XATTR_ADDRS;
 300	}
 301	fi->i_inline_xattr_size = xattr_size;
 302
 303	fi->i_flags =
 304		f2fs_mask_flags(mode, F2FS_I(dir)->i_flags & F2FS_FL_INHERITED);
 305
 306	if (S_ISDIR(inode->i_mode))
 307		fi->i_flags |= F2FS_INDEX_FL;
 308
 309	if (fi->i_flags & F2FS_PROJINHERIT_FL)
 310		set_inode_flag(inode, FI_PROJ_INHERIT);
 311
 312	/* Check compression first. */
 313	set_compress_new_inode(sbi, dir, inode, name);
 314
 315	/* Should enable inline_data after compression set */
 316	if (test_opt(sbi, INLINE_DATA) && f2fs_may_inline_data(inode))
 317		set_inode_flag(inode, FI_INLINE_DATA);
 318
 319	if (name && !test_opt(sbi, DISABLE_EXT_IDENTIFY))
 320		set_file_temperature(sbi, inode, name);
 321
 322	stat_inc_inline_xattr(inode);
 323	stat_inc_inline_inode(inode);
 324	stat_inc_inline_dir(inode);
 325
 326	f2fs_set_inode_flags(inode);
 327
 328	f2fs_init_extent_tree(inode);
 329
 330	trace_f2fs_new_inode(inode, 0);
 331	return inode;
 332
 333fail:
 334	trace_f2fs_new_inode(inode, err);
 335	make_bad_inode(inode);
 336	if (nid_free)
 337		set_inode_flag(inode, FI_FREE_NID);
 338	iput(inode);
 339	return ERR_PTR(err);
 340fail_drop:
 341	trace_f2fs_new_inode(inode, err);
 342	dquot_drop(inode);
 343	inode->i_flags |= S_NOQUOTA;
 344	if (nid_free)
 345		set_inode_flag(inode, FI_FREE_NID);
 346	clear_nlink(inode);
 347	unlock_new_inode(inode);
 348	iput(inode);
 349	return ERR_PTR(err);
 350}
 351
 352static int f2fs_create(struct mnt_idmap *idmap, struct inode *dir,
 353		       struct dentry *dentry, umode_t mode, bool excl)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 354{
 355	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 356	struct inode *inode;
 357	nid_t ino = 0;
 358	int err;
 359
 360	if (unlikely(f2fs_cp_error(sbi)))
 361		return -EIO;
 362	if (!f2fs_is_checkpoint_ready(sbi))
 363		return -ENOSPC;
 364
 365	err = f2fs_dquot_initialize(dir);
 366	if (err)
 367		return err;
 368
 369	inode = f2fs_new_inode(idmap, dir, mode, dentry->d_name.name);
 370	if (IS_ERR(inode))
 371		return PTR_ERR(inode);
 372
 
 
 
 373	inode->i_op = &f2fs_file_inode_operations;
 374	inode->i_fop = &f2fs_file_operations;
 375	inode->i_mapping->a_ops = &f2fs_dblock_aops;
 376	ino = inode->i_ino;
 377
 
 
 378	f2fs_lock_op(sbi);
 379	err = f2fs_add_link(dentry, inode);
 380	if (err)
 381		goto out;
 382	f2fs_unlock_op(sbi);
 383
 384	f2fs_alloc_nid_done(sbi, ino);
 385
 386	d_instantiate_new(dentry, inode);
 
 387
 388	if (IS_DIRSYNC(dir))
 389		f2fs_sync_fs(sbi->sb, 1);
 390
 391	f2fs_balance_fs(sbi, true);
 392	return 0;
 393out:
 394	f2fs_handle_failed_inode(inode);
 395	return err;
 396}
 397
 398static int f2fs_link(struct dentry *old_dentry, struct inode *dir,
 399		struct dentry *dentry)
 400{
 401	struct inode *inode = d_inode(old_dentry);
 402	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 403	int err;
 404
 405	if (unlikely(f2fs_cp_error(sbi)))
 406		return -EIO;
 407	if (!f2fs_is_checkpoint_ready(sbi))
 408		return -ENOSPC;
 409
 410	err = fscrypt_prepare_link(old_dentry, dir, dentry);
 411	if (err)
 412		return err;
 413
 414	if (is_inode_flag_set(dir, FI_PROJ_INHERIT) &&
 415			(!projid_eq(F2FS_I(dir)->i_projid,
 416			F2FS_I(old_dentry->d_inode)->i_projid)))
 417		return -EXDEV;
 418
 419	err = f2fs_dquot_initialize(dir);
 420	if (err)
 421		return err;
 422
 423	f2fs_balance_fs(sbi, true);
 424
 425	inode_set_ctime_current(inode);
 426	ihold(inode);
 427
 428	set_inode_flag(inode, FI_INC_LINK);
 429	f2fs_lock_op(sbi);
 430	err = f2fs_add_link(dentry, inode);
 431	if (err)
 432		goto out;
 433	f2fs_unlock_op(sbi);
 434
 435	d_instantiate(dentry, inode);
 436
 437	if (IS_DIRSYNC(dir))
 438		f2fs_sync_fs(sbi->sb, 1);
 439	return 0;
 440out:
 441	clear_inode_flag(inode, FI_INC_LINK);
 442	iput(inode);
 443	f2fs_unlock_op(sbi);
 444	return err;
 445}
 446
 447struct dentry *f2fs_get_parent(struct dentry *child)
 448{
 
 449	struct page *page;
 450	unsigned long ino = f2fs_inode_by_name(d_inode(child), &dotdot_name, &page);
 451
 452	if (!ino) {
 453		if (IS_ERR(page))
 454			return ERR_CAST(page);
 455		return ERR_PTR(-ENOENT);
 456	}
 457	return d_obtain_alias(f2fs_iget(child->d_sb, ino));
 458}
 459
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 460static struct dentry *f2fs_lookup(struct inode *dir, struct dentry *dentry,
 461		unsigned int flags)
 462{
 463	struct inode *inode = NULL;
 464	struct f2fs_dir_entry *de;
 465	struct page *page;
 466	struct dentry *new;
 467	nid_t ino = -1;
 468	int err = 0;
 469	struct f2fs_filename fname;
 470
 471	trace_f2fs_lookup_start(dir, dentry, flags);
 
 472
 473	if (dentry->d_name.len > F2FS_NAME_LEN) {
 474		err = -ENAMETOOLONG;
 475		goto out;
 
 
 
 
 
 
 
 476	}
 477
 478	err = f2fs_prepare_lookup(dir, dentry, &fname);
 479	if (err == -ENOENT)
 480		goto out_splice;
 481	if (err)
 482		goto out;
 483	de = __f2fs_find_entry(dir, &fname, &page);
 484	f2fs_free_filename(&fname);
 485
 
 486	if (!de) {
 487		if (IS_ERR(page)) {
 488			err = PTR_ERR(page);
 489			goto out;
 490		}
 491		err = -ENOENT;
 492		goto out_splice;
 493	}
 494
 495	ino = le32_to_cpu(de->ino);
 
 496	f2fs_put_page(page, 0);
 497
 498	inode = f2fs_iget(dir->i_sb, ino);
 499	if (IS_ERR(inode)) {
 500		err = PTR_ERR(inode);
 501		goto out;
 
 
 
 
 502	}
 503
 504	if (IS_ENCRYPTED(dir) &&
 505	    (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
 506	    !fscrypt_has_permitted_context(dir, inode)) {
 507		f2fs_warn(F2FS_I_SB(inode), "Inconsistent encryption contexts: %lu/%lu",
 508			  dir->i_ino, inode->i_ino);
 509		err = -EPERM;
 510		goto out_iput;
 511	}
 512out_splice:
 513	if (IS_ENABLED(CONFIG_UNICODE) && !inode && IS_CASEFOLDED(dir)) {
 514		/* Eventually we want to call d_add_ci(dentry, NULL)
 515		 * for negative dentries in the encoding case as
 516		 * well.  For now, prevent the negative dentry
 517		 * from being cached.
 518		 */
 519		trace_f2fs_lookup_end(dir, dentry, ino, err);
 520		return NULL;
 521	}
 
 522
 523	new = d_splice_alias(inode, dentry);
 524	trace_f2fs_lookup_end(dir, !IS_ERR_OR_NULL(new) ? new : dentry,
 525				ino, IS_ERR(new) ? PTR_ERR(new) : err);
 526	return new;
 527out_iput:
 528	iput(inode);
 529out:
 530	trace_f2fs_lookup_end(dir, dentry, ino, err);
 531	return ERR_PTR(err);
 532}
 533
 534static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
 535{
 536	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 537	struct inode *inode = d_inode(dentry);
 538	struct f2fs_dir_entry *de;
 539	struct page *page;
 540	int err;
 541
 542	trace_f2fs_unlink_enter(dir, dentry);
 543
 544	if (unlikely(f2fs_cp_error(sbi))) {
 545		err = -EIO;
 546		goto fail;
 547	}
 548
 549	err = f2fs_dquot_initialize(dir);
 550	if (err)
 551		goto fail;
 552	err = f2fs_dquot_initialize(inode);
 553	if (err)
 554		goto fail;
 555
 556	de = f2fs_find_entry(dir, &dentry->d_name, &page);
 557	if (!de) {
 558		if (IS_ERR(page))
 559			err = PTR_ERR(page);
 560		goto fail;
 561	}
 562
 563	f2fs_balance_fs(sbi, true);
 564
 565	f2fs_lock_op(sbi);
 566	err = f2fs_acquire_orphan_inode(sbi);
 567	if (err) {
 568		f2fs_unlock_op(sbi);
 
 569		f2fs_put_page(page, 0);
 570		goto fail;
 571	}
 572	f2fs_delete_entry(de, page, dir, inode);
 573	f2fs_unlock_op(sbi);
 574
 575	/* VFS negative dentries are incompatible with Encoding and
 576	 * Case-insensitiveness. Eventually we'll want avoid
 577	 * invalidating the dentries here, alongside with returning the
 578	 * negative dentries at f2fs_lookup(), when it is better
 579	 * supported by the VFS for the CI case.
 580	 */
 581	if (IS_ENABLED(CONFIG_UNICODE) && IS_CASEFOLDED(dir))
 582		d_invalidate(dentry);
 583
 584	if (IS_DIRSYNC(dir))
 585		f2fs_sync_fs(sbi->sb, 1);
 586fail:
 587	trace_f2fs_unlink_exit(inode, err);
 588	return err;
 589}
 590
 591static const char *f2fs_get_link(struct dentry *dentry,
 592				 struct inode *inode,
 593				 struct delayed_call *done)
 594{
 595	const char *link = page_get_link(dentry, inode, done);
 596
 597	if (!IS_ERR(link) && !*link) {
 598		/* this is broken symlink case */
 599		do_delayed_call(done);
 600		clear_delayed_call(done);
 601		link = ERR_PTR(-ENOENT);
 602	}
 603	return link;
 604}
 605
 606static int f2fs_symlink(struct mnt_idmap *idmap, struct inode *dir,
 607			struct dentry *dentry, const char *symname)
 608{
 609	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 610	struct inode *inode;
 611	size_t len = strlen(symname);
 612	struct fscrypt_str disk_link;
 
 613	int err;
 614
 615	if (unlikely(f2fs_cp_error(sbi)))
 616		return -EIO;
 617	if (!f2fs_is_checkpoint_ready(sbi))
 618		return -ENOSPC;
 
 
 
 619
 620	err = fscrypt_prepare_symlink(dir, symname, len, dir->i_sb->s_blocksize,
 621				      &disk_link);
 622	if (err)
 623		return err;
 624
 625	err = f2fs_dquot_initialize(dir);
 626	if (err)
 627		return err;
 628
 629	inode = f2fs_new_inode(idmap, dir, S_IFLNK | S_IRWXUGO, NULL);
 630	if (IS_ERR(inode))
 631		return PTR_ERR(inode);
 632
 633	if (IS_ENCRYPTED(inode))
 634		inode->i_op = &f2fs_encrypted_symlink_inode_operations;
 635	else
 636		inode->i_op = &f2fs_symlink_inode_operations;
 637	inode_nohighmem(inode);
 638	inode->i_mapping->a_ops = &f2fs_dblock_aops;
 639
 
 
 640	f2fs_lock_op(sbi);
 641	err = f2fs_add_link(dentry, inode);
 642	if (err)
 643		goto out_f2fs_handle_failed_inode;
 644	f2fs_unlock_op(sbi);
 645	f2fs_alloc_nid_done(sbi, inode->i_ino);
 
 
 
 
 
 
 
 
 
 
 646
 647	err = fscrypt_encrypt_symlink(inode, symname, len, &disk_link);
 648	if (err)
 649		goto err_out;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 650
 651	err = page_symlink(inode, disk_link.name, disk_link.len);
 652
 653err_out:
 654	d_instantiate_new(dentry, inode);
 
 655
 656	/*
 657	 * Let's flush symlink data in order to avoid broken symlink as much as
 658	 * possible. Nevertheless, fsyncing is the best way, but there is no
 659	 * way to get a file descriptor in order to flush that.
 660	 *
 661	 * Note that, it needs to do dir->fsync to make this recoverable.
 662	 * If the symlink path is stored into inline_data, there is no
 663	 * performance regression.
 664	 */
 665	if (!err) {
 666		filemap_write_and_wait_range(inode->i_mapping, 0,
 667							disk_link.len - 1);
 668
 669		if (IS_DIRSYNC(dir))
 670			f2fs_sync_fs(sbi->sb, 1);
 671	} else {
 672		f2fs_unlink(dir, dentry);
 673	}
 674
 675	f2fs_balance_fs(sbi, true);
 676	goto out_free_encrypted_link;
 677
 678out_f2fs_handle_failed_inode:
 679	f2fs_handle_failed_inode(inode);
 680out_free_encrypted_link:
 681	if (disk_link.name != (unsigned char *)symname)
 682		kfree(disk_link.name);
 683	return err;
 684}
 685
 686static int f2fs_mkdir(struct mnt_idmap *idmap, struct inode *dir,
 687		      struct dentry *dentry, umode_t mode)
 688{
 689	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 690	struct inode *inode;
 691	int err;
 692
 693	if (unlikely(f2fs_cp_error(sbi)))
 694		return -EIO;
 695
 696	err = f2fs_dquot_initialize(dir);
 697	if (err)
 698		return err;
 699
 700	inode = f2fs_new_inode(idmap, dir, S_IFDIR | mode, NULL);
 701	if (IS_ERR(inode))
 702		return PTR_ERR(inode);
 703
 704	inode->i_op = &f2fs_dir_inode_operations;
 705	inode->i_fop = &f2fs_dir_operations;
 706	inode->i_mapping->a_ops = &f2fs_dblock_aops;
 707	mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
 
 
 708
 709	set_inode_flag(inode, FI_INC_LINK);
 710	f2fs_lock_op(sbi);
 711	err = f2fs_add_link(dentry, inode);
 712	if (err)
 713		goto out_fail;
 714	f2fs_unlock_op(sbi);
 715
 716	f2fs_alloc_nid_done(sbi, inode->i_ino);
 717
 718	d_instantiate_new(dentry, inode);
 
 719
 720	if (IS_DIRSYNC(dir))
 721		f2fs_sync_fs(sbi->sb, 1);
 722
 723	f2fs_balance_fs(sbi, true);
 724	return 0;
 725
 726out_fail:
 727	clear_inode_flag(inode, FI_INC_LINK);
 728	f2fs_handle_failed_inode(inode);
 729	return err;
 730}
 731
 732static int f2fs_rmdir(struct inode *dir, struct dentry *dentry)
 733{
 734	struct inode *inode = d_inode(dentry);
 735
 736	if (f2fs_empty_dir(inode))
 737		return f2fs_unlink(dir, dentry);
 738	return -ENOTEMPTY;
 739}
 740
 741static int f2fs_mknod(struct mnt_idmap *idmap, struct inode *dir,
 742		      struct dentry *dentry, umode_t mode, dev_t rdev)
 743{
 744	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 745	struct inode *inode;
 746	int err = 0;
 747
 748	if (unlikely(f2fs_cp_error(sbi)))
 749		return -EIO;
 750	if (!f2fs_is_checkpoint_ready(sbi))
 751		return -ENOSPC;
 752
 753	err = f2fs_dquot_initialize(dir);
 754	if (err)
 755		return err;
 756
 757	inode = f2fs_new_inode(idmap, dir, mode, NULL);
 758	if (IS_ERR(inode))
 759		return PTR_ERR(inode);
 760
 761	init_special_inode(inode, inode->i_mode, rdev);
 762	inode->i_op = &f2fs_special_inode_operations;
 763
 
 
 764	f2fs_lock_op(sbi);
 765	err = f2fs_add_link(dentry, inode);
 766	if (err)
 767		goto out;
 768	f2fs_unlock_op(sbi);
 769
 770	f2fs_alloc_nid_done(sbi, inode->i_ino);
 771
 772	d_instantiate_new(dentry, inode);
 
 773
 774	if (IS_DIRSYNC(dir))
 775		f2fs_sync_fs(sbi->sb, 1);
 776
 777	f2fs_balance_fs(sbi, true);
 778	return 0;
 779out:
 780	f2fs_handle_failed_inode(inode);
 781	return err;
 782}
 783
 784static int __f2fs_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
 785			  struct file *file, umode_t mode, bool is_whiteout,
 786			  struct inode **new_inode, struct f2fs_filename *fname)
 787{
 788	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 789	struct inode *inode;
 790	int err;
 791
 792	err = f2fs_dquot_initialize(dir);
 793	if (err)
 794		return err;
 795
 796	inode = f2fs_new_inode(idmap, dir, mode, NULL);
 797	if (IS_ERR(inode))
 798		return PTR_ERR(inode);
 799
 800	if (is_whiteout) {
 801		init_special_inode(inode, inode->i_mode, WHITEOUT_DEV);
 802		inode->i_op = &f2fs_special_inode_operations;
 803	} else {
 804		inode->i_op = &f2fs_file_inode_operations;
 805		inode->i_fop = &f2fs_file_operations;
 806		inode->i_mapping->a_ops = &f2fs_dblock_aops;
 807	}
 808
 
 
 809	f2fs_lock_op(sbi);
 810	err = f2fs_acquire_orphan_inode(sbi);
 811	if (err)
 812		goto out;
 813
 814	err = f2fs_do_tmpfile(inode, dir, fname);
 815	if (err)
 816		goto release_out;
 817
 818	/*
 819	 * add this non-linked tmpfile to orphan list, in this way we could
 820	 * remove all unused data of tmpfile after abnormal power-off.
 821	 */
 822	f2fs_add_orphan_inode(inode);
 823	f2fs_alloc_nid_done(sbi, inode->i_ino);
 824
 825	if (is_whiteout) {
 826		f2fs_i_links_write(inode, false);
 827
 828		spin_lock(&inode->i_lock);
 829		inode->i_state |= I_LINKABLE;
 830		spin_unlock(&inode->i_lock);
 831	} else {
 832		if (file)
 833			d_tmpfile(file, inode);
 834		else
 835			f2fs_i_links_write(inode, false);
 836	}
 837	/* link_count was changed by d_tmpfile as well. */
 838	f2fs_unlock_op(sbi);
 839	unlock_new_inode(inode);
 840
 841	if (new_inode)
 842		*new_inode = inode;
 843
 844	f2fs_balance_fs(sbi, true);
 845	return 0;
 846
 847release_out:
 848	f2fs_release_orphan_inode(sbi);
 849out:
 850	f2fs_handle_failed_inode(inode);
 851	return err;
 852}
 853
 854static int f2fs_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
 855			struct file *file, umode_t mode)
 856{
 857	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 858	int err;
 859
 860	if (unlikely(f2fs_cp_error(sbi)))
 861		return -EIO;
 862	if (!f2fs_is_checkpoint_ready(sbi))
 863		return -ENOSPC;
 864
 865	err = __f2fs_tmpfile(idmap, dir, file, mode, false, NULL, NULL);
 866
 867	return finish_open_simple(file, err);
 868}
 869
 870static int f2fs_create_whiteout(struct mnt_idmap *idmap,
 871				struct inode *dir, struct inode **whiteout,
 872				struct f2fs_filename *fname)
 873{
 874	return __f2fs_tmpfile(idmap, dir, NULL, S_IFCHR | WHITEOUT_MODE,
 875						true, whiteout, fname);
 876}
 877
 878int f2fs_get_tmpfile(struct mnt_idmap *idmap, struct inode *dir,
 879		     struct inode **new_inode)
 880{
 881	return __f2fs_tmpfile(idmap, dir, NULL, S_IFREG,
 882				false, new_inode, NULL);
 883}
 884
 885static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 886			struct dentry *old_dentry, struct inode *new_dir,
 887			struct dentry *new_dentry, unsigned int flags)
 888{
 889	struct f2fs_sb_info *sbi = F2FS_I_SB(old_dir);
 890	struct inode *old_inode = d_inode(old_dentry);
 891	struct inode *new_inode = d_inode(new_dentry);
 892	struct inode *whiteout = NULL;
 893	struct page *old_dir_page = NULL;
 894	struct page *old_page, *new_page = NULL;
 895	struct f2fs_dir_entry *old_dir_entry = NULL;
 896	struct f2fs_dir_entry *old_entry;
 897	struct f2fs_dir_entry *new_entry;
 898	bool old_is_dir = S_ISDIR(old_inode->i_mode);
 899	int err;
 900
 901	if (unlikely(f2fs_cp_error(sbi)))
 902		return -EIO;
 903	if (!f2fs_is_checkpoint_ready(sbi))
 904		return -ENOSPC;
 905
 906	if (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
 907			(!projid_eq(F2FS_I(new_dir)->i_projid,
 908			F2FS_I(old_dentry->d_inode)->i_projid)))
 909		return -EXDEV;
 910
 911	/*
 912	 * If new_inode is null, the below renaming flow will
 913	 * add a link in old_dir which can convert inline_dir.
 914	 * After then, if we failed to get the entry due to other
 915	 * reasons like ENOMEM, we had to remove the new entry.
 916	 * Instead of adding such the error handling routine, let's
 917	 * simply convert first here.
 918	 */
 919	if (old_dir == new_dir && !new_inode) {
 920		err = f2fs_try_convert_inline_dir(old_dir, new_dentry);
 921		if (err)
 922			return err;
 923	}
 924
 925	if (flags & RENAME_WHITEOUT) {
 926		struct f2fs_filename fname;
 927
 928		err = f2fs_setup_filename(old_dir, &old_dentry->d_name,
 929							0, &fname);
 930		if (err)
 931			return err;
 932
 933		err = f2fs_create_whiteout(idmap, old_dir, &whiteout, &fname);
 934		if (err)
 935			return err;
 936	}
 937
 938	err = f2fs_dquot_initialize(old_dir);
 939	if (err)
 940		goto out;
 941
 942	err = f2fs_dquot_initialize(new_dir);
 943	if (err)
 944		goto out;
 945
 946	if (new_inode) {
 947		err = f2fs_dquot_initialize(new_inode);
 948		if (err)
 949			goto out;
 950	}
 951
 952	err = -ENOENT;
 953	old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
 954	if (!old_entry) {
 955		if (IS_ERR(old_page))
 956			err = PTR_ERR(old_page);
 957		goto out;
 958	}
 959
 960	if (old_is_dir && old_dir != new_dir) {
 961		old_dir_entry = f2fs_parent_dir(old_inode, &old_dir_page);
 962		if (!old_dir_entry) {
 963			if (IS_ERR(old_dir_page))
 964				err = PTR_ERR(old_dir_page);
 965			goto out_old;
 966		}
 967	}
 968
 
 
 
 
 
 
 969	if (new_inode) {
 970
 971		err = -ENOTEMPTY;
 972		if (old_is_dir && !f2fs_empty_dir(new_inode))
 973			goto out_dir;
 974
 975		err = -ENOENT;
 976		new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name,
 977						&new_page);
 978		if (!new_entry) {
 979			if (IS_ERR(new_page))
 980				err = PTR_ERR(new_page);
 981			goto out_dir;
 982		}
 983
 984		f2fs_balance_fs(sbi, true);
 985
 986		f2fs_lock_op(sbi);
 987
 988		err = f2fs_acquire_orphan_inode(sbi);
 989		if (err)
 990			goto put_out_dir;
 991
 
 
 
 
 
 
 
 992		f2fs_set_link(new_dir, new_entry, new_page, old_inode);
 993		new_page = NULL;
 994
 995		inode_set_ctime_current(new_inode);
 996		f2fs_down_write(&F2FS_I(new_inode)->i_sem);
 997		if (old_is_dir)
 998			f2fs_i_links_write(new_inode, false);
 999		f2fs_i_links_write(new_inode, false);
1000		f2fs_up_write(&F2FS_I(new_inode)->i_sem);
1001
1002		if (!new_inode->i_nlink)
1003			f2fs_add_orphan_inode(new_inode);
1004		else
1005			f2fs_release_orphan_inode(sbi);
1006	} else {
1007		f2fs_balance_fs(sbi, true);
1008
1009		f2fs_lock_op(sbi);
1010
1011		err = f2fs_add_link(new_dentry, old_inode);
1012		if (err) {
1013			f2fs_unlock_op(sbi);
1014			goto out_dir;
1015		}
1016
1017		if (old_is_dir)
1018			f2fs_i_links_write(new_dir, true);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1019	}
1020
1021	f2fs_down_write(&F2FS_I(old_inode)->i_sem);
1022	if (!old_is_dir || whiteout)
1023		file_lost_pino(old_inode);
1024	else
1025		/* adjust dir's i_pino to pass fsck check */
1026		f2fs_i_pino_write(old_inode, new_dir->i_ino);
1027	f2fs_up_write(&F2FS_I(old_inode)->i_sem);
1028
1029	inode_set_ctime_current(old_inode);
1030	f2fs_mark_inode_dirty_sync(old_inode, false);
1031
1032	f2fs_delete_entry(old_entry, old_page, old_dir, NULL);
1033	old_page = NULL;
1034
1035	if (whiteout) {
 
1036		set_inode_flag(whiteout, FI_INC_LINK);
1037		err = f2fs_add_link(old_dentry, whiteout);
1038		if (err)
1039			goto put_out_dir;
1040
1041		spin_lock(&whiteout->i_lock);
1042		whiteout->i_state &= ~I_LINKABLE;
1043		spin_unlock(&whiteout->i_lock);
1044
1045		iput(whiteout);
1046	}
1047
1048	if (old_dir_entry)
1049		f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir);
1050	if (old_is_dir)
 
 
 
 
 
1051		f2fs_i_links_write(old_dir, false);
1052
1053	if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT) {
1054		f2fs_add_ino_entry(sbi, new_dir->i_ino, TRANS_DIR_INO);
1055		if (S_ISDIR(old_inode->i_mode))
1056			f2fs_add_ino_entry(sbi, old_inode->i_ino,
1057							TRANS_DIR_INO);
1058	}
1059
1060	f2fs_unlock_op(sbi);
1061
1062	if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
1063		f2fs_sync_fs(sbi->sb, 1);
1064
1065	f2fs_update_time(sbi, REQ_TIME);
1066	return 0;
1067
1068put_out_dir:
1069	f2fs_unlock_op(sbi);
1070	f2fs_put_page(new_page, 0);
 
 
 
 
 
 
1071out_dir:
1072	if (old_dir_entry)
 
1073		f2fs_put_page(old_dir_page, 0);
 
1074out_old:
 
1075	f2fs_put_page(old_page, 0);
1076out:
1077	iput(whiteout);
1078	return err;
1079}
1080
1081static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
1082			     struct inode *new_dir, struct dentry *new_dentry)
1083{
1084	struct f2fs_sb_info *sbi = F2FS_I_SB(old_dir);
1085	struct inode *old_inode = d_inode(old_dentry);
1086	struct inode *new_inode = d_inode(new_dentry);
1087	struct page *old_dir_page, *new_dir_page;
1088	struct page *old_page, *new_page;
1089	struct f2fs_dir_entry *old_dir_entry = NULL, *new_dir_entry = NULL;
1090	struct f2fs_dir_entry *old_entry, *new_entry;
1091	int old_nlink = 0, new_nlink = 0;
1092	int err;
1093
1094	if (unlikely(f2fs_cp_error(sbi)))
1095		return -EIO;
1096	if (!f2fs_is_checkpoint_ready(sbi))
1097		return -ENOSPC;
1098
1099	if ((is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
1100			!projid_eq(F2FS_I(new_dir)->i_projid,
1101			F2FS_I(old_dentry->d_inode)->i_projid)) ||
1102	    (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
1103			!projid_eq(F2FS_I(old_dir)->i_projid,
1104			F2FS_I(new_dentry->d_inode)->i_projid)))
1105		return -EXDEV;
1106
1107	err = f2fs_dquot_initialize(old_dir);
1108	if (err)
1109		goto out;
1110
1111	err = f2fs_dquot_initialize(new_dir);
1112	if (err)
1113		goto out;
1114
1115	err = -ENOENT;
1116	old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
1117	if (!old_entry) {
1118		if (IS_ERR(old_page))
1119			err = PTR_ERR(old_page);
1120		goto out;
1121	}
1122
1123	new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name, &new_page);
1124	if (!new_entry) {
1125		if (IS_ERR(new_page))
1126			err = PTR_ERR(new_page);
1127		goto out_old;
1128	}
1129
1130	/* prepare for updating ".." directory entry info later */
1131	if (old_dir != new_dir) {
1132		if (S_ISDIR(old_inode->i_mode)) {
1133			old_dir_entry = f2fs_parent_dir(old_inode,
1134							&old_dir_page);
1135			if (!old_dir_entry) {
1136				if (IS_ERR(old_dir_page))
1137					err = PTR_ERR(old_dir_page);
1138				goto out_new;
1139			}
1140		}
1141
1142		if (S_ISDIR(new_inode->i_mode)) {
1143			new_dir_entry = f2fs_parent_dir(new_inode,
1144							&new_dir_page);
1145			if (!new_dir_entry) {
1146				if (IS_ERR(new_dir_page))
1147					err = PTR_ERR(new_dir_page);
1148				goto out_old_dir;
1149			}
1150		}
1151	}
1152
1153	/*
1154	 * If cross rename between file and directory those are not
1155	 * in the same directory, we will inc nlink of file's parent
1156	 * later, so we should check upper boundary of its nlink.
1157	 */
1158	if ((!old_dir_entry || !new_dir_entry) &&
1159				old_dir_entry != new_dir_entry) {
1160		old_nlink = old_dir_entry ? -1 : 1;
1161		new_nlink = -old_nlink;
1162		err = -EMLINK;
1163		if ((old_nlink > 0 && old_dir->i_nlink >= F2FS_LINK_MAX) ||
1164			(new_nlink > 0 && new_dir->i_nlink >= F2FS_LINK_MAX))
1165			goto out_new_dir;
1166	}
1167
1168	f2fs_balance_fs(sbi, true);
1169
1170	f2fs_lock_op(sbi);
1171
 
 
 
 
 
 
 
 
 
 
 
 
1172	/* update ".." directory entry info of old dentry */
1173	if (old_dir_entry)
1174		f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir);
1175
1176	/* update ".." directory entry info of new dentry */
1177	if (new_dir_entry)
1178		f2fs_set_link(new_inode, new_dir_entry, new_dir_page, old_dir);
1179
1180	/* update directory entry info of old dir inode */
1181	f2fs_set_link(old_dir, old_entry, old_page, new_inode);
1182
1183	f2fs_down_write(&F2FS_I(old_inode)->i_sem);
1184	if (!old_dir_entry)
1185		file_lost_pino(old_inode);
1186	else
1187		/* adjust dir's i_pino to pass fsck check */
1188		f2fs_i_pino_write(old_inode, new_dir->i_ino);
1189	f2fs_up_write(&F2FS_I(old_inode)->i_sem);
1190
1191	inode_set_ctime_current(old_dir);
1192	if (old_nlink) {
1193		f2fs_down_write(&F2FS_I(old_dir)->i_sem);
1194		f2fs_i_links_write(old_dir, old_nlink > 0);
1195		f2fs_up_write(&F2FS_I(old_dir)->i_sem);
1196	}
1197	f2fs_mark_inode_dirty_sync(old_dir, false);
1198
1199	/* update directory entry info of new dir inode */
1200	f2fs_set_link(new_dir, new_entry, new_page, old_inode);
1201
1202	f2fs_down_write(&F2FS_I(new_inode)->i_sem);
1203	if (!new_dir_entry)
1204		file_lost_pino(new_inode);
1205	else
1206		/* adjust dir's i_pino to pass fsck check */
1207		f2fs_i_pino_write(new_inode, old_dir->i_ino);
1208	f2fs_up_write(&F2FS_I(new_inode)->i_sem);
1209
1210	inode_set_ctime_current(new_dir);
1211	if (new_nlink) {
1212		f2fs_down_write(&F2FS_I(new_dir)->i_sem);
1213		f2fs_i_links_write(new_dir, new_nlink > 0);
1214		f2fs_up_write(&F2FS_I(new_dir)->i_sem);
1215	}
1216	f2fs_mark_inode_dirty_sync(new_dir, false);
1217
1218	if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT) {
1219		f2fs_add_ino_entry(sbi, old_dir->i_ino, TRANS_DIR_INO);
1220		f2fs_add_ino_entry(sbi, new_dir->i_ino, TRANS_DIR_INO);
1221	}
1222
1223	f2fs_unlock_op(sbi);
1224
1225	if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
1226		f2fs_sync_fs(sbi->sb, 1);
1227
1228	f2fs_update_time(sbi, REQ_TIME);
1229	return 0;
 
 
 
 
 
 
 
 
1230out_new_dir:
1231	if (new_dir_entry) {
 
1232		f2fs_put_page(new_dir_page, 0);
1233	}
1234out_old_dir:
1235	if (old_dir_entry) {
 
1236		f2fs_put_page(old_dir_page, 0);
1237	}
1238out_new:
 
1239	f2fs_put_page(new_page, 0);
1240out_old:
 
1241	f2fs_put_page(old_page, 0);
1242out:
1243	return err;
1244}
1245
1246static int f2fs_rename2(struct mnt_idmap *idmap,
1247			struct inode *old_dir, struct dentry *old_dentry,
1248			struct inode *new_dir, struct dentry *new_dentry,
1249			unsigned int flags)
1250{
1251	int err;
1252
1253	if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
1254		return -EINVAL;
1255
1256	trace_f2fs_rename_start(old_dir, old_dentry, new_dir, new_dentry,
1257								flags);
1258
1259	err = fscrypt_prepare_rename(old_dir, old_dentry, new_dir, new_dentry,
1260				     flags);
1261	if (err)
1262		return err;
1263
1264	if (flags & RENAME_EXCHANGE)
1265		err = f2fs_cross_rename(old_dir, old_dentry,
1266					new_dir, new_dentry);
1267	else
1268	/*
1269	 * VFS has already handled the new dentry existence case,
1270	 * here, we just deal with "RENAME_NOREPLACE" as regular rename.
1271	 */
1272		err = f2fs_rename(idmap, old_dir, old_dentry,
1273					new_dir, new_dentry, flags);
1274
1275	trace_f2fs_rename_end(old_dentry, new_dentry, flags, err);
1276	return err;
1277}
1278
1279static const char *f2fs_encrypted_get_link(struct dentry *dentry,
1280					   struct inode *inode,
1281					   struct delayed_call *done)
1282{
1283	struct page *page;
1284	const char *target;
 
 
 
 
 
1285
1286	if (!dentry)
1287		return ERR_PTR(-ECHILD);
1288
1289	page = read_mapping_page(inode->i_mapping, 0, NULL);
1290	if (IS_ERR(page))
1291		return ERR_CAST(page);
1292
1293	target = fscrypt_get_symlink(inode, page_address(page),
1294				     inode->i_sb->s_blocksize, done);
1295	put_page(page);
1296	return target;
1297}
1298
1299static int f2fs_encrypted_symlink_getattr(struct mnt_idmap *idmap,
1300					  const struct path *path,
1301					  struct kstat *stat, u32 request_mask,
1302					  unsigned int query_flags)
1303{
1304	f2fs_getattr(idmap, path, stat, request_mask, query_flags);
1305
1306	return fscrypt_symlink_getattr(path, stat);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1307}
1308
1309const struct inode_operations f2fs_encrypted_symlink_inode_operations = {
1310	.get_link	= f2fs_encrypted_get_link,
1311	.getattr	= f2fs_encrypted_symlink_getattr,
1312	.setattr	= f2fs_setattr,
 
1313	.listxattr	= f2fs_listxattr,
 
1314};
1315
1316const struct inode_operations f2fs_dir_inode_operations = {
1317	.create		= f2fs_create,
1318	.lookup		= f2fs_lookup,
1319	.link		= f2fs_link,
1320	.unlink		= f2fs_unlink,
1321	.symlink	= f2fs_symlink,
1322	.mkdir		= f2fs_mkdir,
1323	.rmdir		= f2fs_rmdir,
1324	.mknod		= f2fs_mknod,
1325	.rename		= f2fs_rename2,
1326	.tmpfile	= f2fs_tmpfile,
1327	.getattr	= f2fs_getattr,
1328	.setattr	= f2fs_setattr,
1329	.get_inode_acl	= f2fs_get_acl,
1330	.set_acl	= f2fs_set_acl,
 
1331	.listxattr	= f2fs_listxattr,
1332	.fiemap		= f2fs_fiemap,
1333	.fileattr_get	= f2fs_fileattr_get,
1334	.fileattr_set	= f2fs_fileattr_set,
1335};
1336
1337const struct inode_operations f2fs_symlink_inode_operations = {
1338	.get_link	= f2fs_get_link,
1339	.getattr	= f2fs_getattr,
1340	.setattr	= f2fs_setattr,
 
1341	.listxattr	= f2fs_listxattr,
 
1342};
1343
1344const struct inode_operations f2fs_special_inode_operations = {
1345	.getattr	= f2fs_getattr,
1346	.setattr	= f2fs_setattr,
1347	.get_inode_acl	= f2fs_get_acl,
1348	.set_acl	= f2fs_set_acl,
 
1349	.listxattr	= f2fs_listxattr,
 
1350};