linux/fs/f2fs/namei.c
<<
>>
Prefs
   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 (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 -ENOKEY;
 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 = -ENOKEY;
 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 ((f2fs_encrypted_inode(old_dir) &&
 667                        !fscrypt_has_encryption_key(old_dir)) ||
 668                        (f2fs_encrypted_inode(new_dir) &&
 669                        !fscrypt_has_encryption_key(new_dir)))
 670                return -ENOKEY;
 671
 672        if ((old_dir != new_dir) && f2fs_encrypted_inode(new_dir) &&
 673                        !fscrypt_has_permitted_context(new_dir, old_inode)) {
 674                err = -EPERM;
 675                goto out;
 676        }
 677
 678        old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
 679        if (!old_entry) {
 680                if (IS_ERR(old_page))
 681                        err = PTR_ERR(old_page);
 682                goto out;
 683        }
 684
 685        if (S_ISDIR(old_inode->i_mode)) {
 686                old_dir_entry = f2fs_parent_dir(old_inode, &old_dir_page);
 687                if (!old_dir_entry) {
 688                        if (IS_ERR(old_dir_page))
 689                                err = PTR_ERR(old_dir_page);
 690                        goto out_old;
 691                }
 692        }
 693
 694        if (flags & RENAME_WHITEOUT) {
 695                err = f2fs_create_whiteout(old_dir, &whiteout);
 696                if (err)
 697                        goto out_dir;
 698        }
 699
 700        if (new_inode) {
 701
 702                err = -ENOTEMPTY;
 703                if (old_dir_entry && !f2fs_empty_dir(new_inode))
 704                        goto out_whiteout;
 705
 706                err = -ENOENT;
 707                new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name,
 708                                                &new_page);
 709                if (!new_entry) {
 710                        if (IS_ERR(new_page))
 711                                err = PTR_ERR(new_page);
 712                        goto out_whiteout;
 713                }
 714
 715                f2fs_balance_fs(sbi, true);
 716
 717                f2fs_lock_op(sbi);
 718
 719                err = acquire_orphan_inode(sbi);
 720                if (err)
 721                        goto put_out_dir;
 722
 723                err = update_dent_inode(old_inode, new_inode,
 724                                                &new_dentry->d_name);
 725                if (err) {
 726                        release_orphan_inode(sbi);
 727                        goto put_out_dir;
 728                }
 729
 730                f2fs_set_link(new_dir, new_entry, new_page, old_inode);
 731
 732                new_inode->i_ctime = current_time(new_inode);
 733                down_write(&F2FS_I(new_inode)->i_sem);
 734                if (old_dir_entry)
 735                        f2fs_i_links_write(new_inode, false);
 736                f2fs_i_links_write(new_inode, false);
 737                up_write(&F2FS_I(new_inode)->i_sem);
 738
 739                if (!new_inode->i_nlink)
 740                        add_orphan_inode(new_inode);
 741                else
 742                        release_orphan_inode(sbi);
 743        } else {
 744                f2fs_balance_fs(sbi, true);
 745
 746                f2fs_lock_op(sbi);
 747
 748                err = f2fs_add_link(new_dentry, old_inode);
 749                if (err) {
 750                        f2fs_unlock_op(sbi);
 751                        goto out_whiteout;
 752                }
 753
 754                if (old_dir_entry)
 755                        f2fs_i_links_write(new_dir, true);
 756
 757                /*
 758                 * old entry and new entry can locate in the same inline
 759                 * dentry in inode, when attaching new entry in inline dentry,
 760                 * it could force inline dentry conversion, after that,
 761                 * old_entry and old_page will point to wrong address, in
 762                 * order to avoid this, let's do the check and update here.
 763                 */
 764                if (is_old_inline && !f2fs_has_inline_dentry(old_dir)) {
 765                        f2fs_put_page(old_page, 0);
 766                        old_page = NULL;
 767
 768                        old_entry = f2fs_find_entry(old_dir,
 769                                                &old_dentry->d_name, &old_page);
 770                        if (!old_entry) {
 771                                err = -ENOENT;
 772                                if (IS_ERR(old_page))
 773                                        err = PTR_ERR(old_page);
 774                                f2fs_unlock_op(sbi);
 775                                goto out_whiteout;
 776                        }
 777                }
 778        }
 779
 780        down_write(&F2FS_I(old_inode)->i_sem);
 781        file_lost_pino(old_inode);
 782        if (new_inode && file_enc_name(new_inode))
 783                file_set_enc_name(old_inode);
 784        up_write(&F2FS_I(old_inode)->i_sem);
 785
 786        old_inode->i_ctime = current_time(old_inode);
 787        f2fs_mark_inode_dirty_sync(old_inode, false);
 788
 789        f2fs_delete_entry(old_entry, old_page, old_dir, NULL);
 790
 791        if (whiteout) {
 792                whiteout->i_state |= I_LINKABLE;
 793                set_inode_flag(whiteout, FI_INC_LINK);
 794                err = f2fs_add_link(old_dentry, whiteout);
 795                if (err)
 796                        goto put_out_dir;
 797                whiteout->i_state &= ~I_LINKABLE;
 798                iput(whiteout);
 799        }
 800
 801        if (old_dir_entry) {
 802                if (old_dir != new_dir && !whiteout) {
 803                        f2fs_set_link(old_inode, old_dir_entry,
 804                                                old_dir_page, new_dir);
 805                } else {
 806                        f2fs_dentry_kunmap(old_inode, old_dir_page);
 807                        f2fs_put_page(old_dir_page, 0);
 808                }
 809                f2fs_i_links_write(old_dir, false);
 810        }
 811
 812        f2fs_unlock_op(sbi);
 813
 814        if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
 815                f2fs_sync_fs(sbi->sb, 1);
 816        return 0;
 817
 818put_out_dir:
 819        f2fs_unlock_op(sbi);
 820        if (new_page) {
 821                f2fs_dentry_kunmap(new_dir, new_page);
 822                f2fs_put_page(new_page, 0);
 823        }
 824out_whiteout:
 825        if (whiteout)
 826                iput(whiteout);
 827out_dir:
 828        if (old_dir_entry) {
 829                f2fs_dentry_kunmap(old_inode, old_dir_page);
 830                f2fs_put_page(old_dir_page, 0);
 831        }
 832out_old:
 833        f2fs_dentry_kunmap(old_dir, old_page);
 834        f2fs_put_page(old_page, 0);
 835out:
 836        return err;
 837}
 838
 839static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 840                             struct inode *new_dir, struct dentry *new_dentry)
 841{
 842        struct f2fs_sb_info *sbi = F2FS_I_SB(old_dir);
 843        struct inode *old_inode = d_inode(old_dentry);
 844        struct inode *new_inode = d_inode(new_dentry);
 845        struct page *old_dir_page, *new_dir_page;
 846        struct page *old_page, *new_page;
 847        struct f2fs_dir_entry *old_dir_entry = NULL, *new_dir_entry = NULL;
 848        struct f2fs_dir_entry *old_entry, *new_entry;
 849        int old_nlink = 0, new_nlink = 0;
 850        int err = -ENOENT;
 851
 852        if ((f2fs_encrypted_inode(old_dir) &&
 853                        !fscrypt_has_encryption_key(old_dir)) ||
 854                        (f2fs_encrypted_inode(new_dir) &&
 855                        !fscrypt_has_encryption_key(new_dir)))
 856                return -ENOKEY;
 857
 858        if ((f2fs_encrypted_inode(old_dir) || f2fs_encrypted_inode(new_dir)) &&
 859                        (old_dir != new_dir) &&
 860                        (!fscrypt_has_permitted_context(new_dir, old_inode) ||
 861                         !fscrypt_has_permitted_context(old_dir, new_inode)))
 862                return -EPERM;
 863
 864        old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
 865        if (!old_entry) {
 866                if (IS_ERR(old_page))
 867                        err = PTR_ERR(old_page);
 868                goto out;
 869        }
 870
 871        new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name, &new_page);
 872        if (!new_entry) {
 873                if (IS_ERR(new_page))
 874                        err = PTR_ERR(new_page);
 875                goto out_old;
 876        }
 877
 878        /* prepare for updating ".." directory entry info later */
 879        if (old_dir != new_dir) {
 880                if (S_ISDIR(old_inode->i_mode)) {
 881                        old_dir_entry = f2fs_parent_dir(old_inode,
 882                                                        &old_dir_page);
 883                        if (!old_dir_entry) {
 884                                if (IS_ERR(old_dir_page))
 885                                        err = PTR_ERR(old_dir_page);
 886                                goto out_new;
 887                        }
 888                }
 889
 890                if (S_ISDIR(new_inode->i_mode)) {
 891                        new_dir_entry = f2fs_parent_dir(new_inode,
 892                                                        &new_dir_page);
 893                        if (!new_dir_entry) {
 894                                if (IS_ERR(new_dir_page))
 895                                        err = PTR_ERR(new_dir_page);
 896                                goto out_old_dir;
 897                        }
 898                }
 899        }
 900
 901        /*
 902         * If cross rename between file and directory those are not
 903         * in the same directory, we will inc nlink of file's parent
 904         * later, so we should check upper boundary of its nlink.
 905         */
 906        if ((!old_dir_entry || !new_dir_entry) &&
 907                                old_dir_entry != new_dir_entry) {
 908                old_nlink = old_dir_entry ? -1 : 1;
 909                new_nlink = -old_nlink;
 910                err = -EMLINK;
 911                if ((old_nlink > 0 && old_inode->i_nlink >= F2FS_LINK_MAX) ||
 912                        (new_nlink > 0 && new_inode->i_nlink >= F2FS_LINK_MAX))
 913                        goto out_new_dir;
 914        }
 915
 916        f2fs_balance_fs(sbi, true);
 917
 918        f2fs_lock_op(sbi);
 919
 920        err = update_dent_inode(old_inode, new_inode, &new_dentry->d_name);
 921        if (err)
 922                goto out_unlock;
 923        if (file_enc_name(new_inode))
 924                file_set_enc_name(old_inode);
 925
 926        err = update_dent_inode(new_inode, old_inode, &old_dentry->d_name);
 927        if (err)
 928                goto out_undo;
 929        if (file_enc_name(old_inode))
 930                file_set_enc_name(new_inode);
 931
 932        /* update ".." directory entry info of old dentry */
 933        if (old_dir_entry)
 934                f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir);
 935
 936        /* update ".." directory entry info of new dentry */
 937        if (new_dir_entry)
 938                f2fs_set_link(new_inode, new_dir_entry, new_dir_page, old_dir);
 939
 940        /* update directory entry info of old dir inode */
 941        f2fs_set_link(old_dir, old_entry, old_page, new_inode);
 942
 943        down_write(&F2FS_I(old_inode)->i_sem);
 944        file_lost_pino(old_inode);
 945        up_write(&F2FS_I(old_inode)->i_sem);
 946
 947        old_dir->i_ctime = current_time(old_dir);
 948        if (old_nlink) {
 949                down_write(&F2FS_I(old_dir)->i_sem);
 950                f2fs_i_links_write(old_dir, old_nlink > 0);
 951                up_write(&F2FS_I(old_dir)->i_sem);
 952        }
 953        f2fs_mark_inode_dirty_sync(old_dir, false);
 954
 955        /* update directory entry info of new dir inode */
 956        f2fs_set_link(new_dir, new_entry, new_page, old_inode);
 957
 958        down_write(&F2FS_I(new_inode)->i_sem);
 959        file_lost_pino(new_inode);
 960        up_write(&F2FS_I(new_inode)->i_sem);
 961
 962        new_dir->i_ctime = current_time(new_dir);
 963        if (new_nlink) {
 964                down_write(&F2FS_I(new_dir)->i_sem);
 965                f2fs_i_links_write(new_dir, new_nlink > 0);
 966                up_write(&F2FS_I(new_dir)->i_sem);
 967        }
 968        f2fs_mark_inode_dirty_sync(new_dir, false);
 969
 970        f2fs_unlock_op(sbi);
 971
 972        if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
 973                f2fs_sync_fs(sbi->sb, 1);
 974        return 0;
 975out_undo:
 976        /*
 977         * Still we may fail to recover name info of f2fs_inode here
 978         * Drop it, once its name is set as encrypted
 979         */
 980        update_dent_inode(old_inode, old_inode, &old_dentry->d_name);
 981out_unlock:
 982        f2fs_unlock_op(sbi);
 983out_new_dir:
 984        if (new_dir_entry) {
 985                f2fs_dentry_kunmap(new_inode, new_dir_page);
 986                f2fs_put_page(new_dir_page, 0);
 987        }
 988out_old_dir:
 989        if (old_dir_entry) {
 990                f2fs_dentry_kunmap(old_inode, old_dir_page);
 991                f2fs_put_page(old_dir_page, 0);
 992        }
 993out_new:
 994        f2fs_dentry_kunmap(new_dir, new_page);
 995        f2fs_put_page(new_page, 0);
 996out_old:
 997        f2fs_dentry_kunmap(old_dir, old_page);
 998        f2fs_put_page(old_page, 0);
 999out:
1000        return err;
1001}
1002
1003static int f2fs_rename2(struct inode *old_dir, struct dentry *old_dentry,
1004                        struct inode *new_dir, struct dentry *new_dentry,
1005                        unsigned int flags)
1006{
1007        if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
1008                return -EINVAL;
1009
1010        if (flags & RENAME_EXCHANGE) {
1011                return f2fs_cross_rename(old_dir, old_dentry,
1012                                         new_dir, new_dentry);
1013        }
1014        /*
1015         * VFS has already handled the new dentry existence case,
1016         * here, we just deal with "RENAME_NOREPLACE" as regular rename.
1017         */
1018        return f2fs_rename(old_dir, old_dentry, new_dir, new_dentry, flags);
1019}
1020
1021static const char *f2fs_encrypted_get_link(struct dentry *dentry,
1022                                           struct inode *inode,
1023                                           struct delayed_call *done)
1024{
1025        struct page *cpage = NULL;
1026        char *caddr, *paddr = NULL;
1027        struct fscrypt_str cstr = FSTR_INIT(NULL, 0);
1028        struct fscrypt_str pstr = FSTR_INIT(NULL, 0);
1029        struct fscrypt_symlink_data *sd;
1030        u32 max_size = inode->i_sb->s_blocksize;
1031        int res;
1032
1033        if (!dentry)
1034                return ERR_PTR(-ECHILD);
1035
1036        res = fscrypt_get_encryption_info(inode);
1037        if (res)
1038                return ERR_PTR(res);
1039
1040        cpage = read_mapping_page(inode->i_mapping, 0, NULL);
1041        if (IS_ERR(cpage))
1042                return ERR_CAST(cpage);
1043        caddr = page_address(cpage);
1044
1045        /* Symlink is encrypted */
1046        sd = (struct fscrypt_symlink_data *)caddr;
1047        cstr.name = sd->encrypted_path;
1048        cstr.len = le16_to_cpu(sd->len);
1049
1050        /* this is broken symlink case */
1051        if (unlikely(cstr.len == 0)) {
1052                res = -ENOENT;
1053                goto errout;
1054        }
1055
1056        if ((cstr.len + sizeof(struct fscrypt_symlink_data) - 1) > max_size) {
1057                /* Symlink data on the disk is corrupted */
1058                res = -EIO;
1059                goto errout;
1060        }
1061        res = fscrypt_fname_alloc_buffer(inode, cstr.len, &pstr);
1062        if (res)
1063                goto errout;
1064
1065        res = fscrypt_fname_disk_to_usr(inode, 0, 0, &cstr, &pstr);
1066        if (res)
1067                goto errout;
1068
1069        /* this is broken symlink case */
1070        if (unlikely(pstr.name[0] == 0)) {
1071                res = -ENOENT;
1072                goto errout;
1073        }
1074
1075        paddr = pstr.name;
1076
1077        /* Null-terminate the name */
1078        paddr[pstr.len] = '\0';
1079
1080        put_page(cpage);
1081        set_delayed_call(done, kfree_link, paddr);
1082        return paddr;
1083errout:
1084        fscrypt_fname_free_buffer(&pstr);
1085        put_page(cpage);
1086        return ERR_PTR(res);
1087}
1088
1089const struct inode_operations f2fs_encrypted_symlink_inode_operations = {
1090        .get_link       = f2fs_encrypted_get_link,
1091        .getattr        = f2fs_getattr,
1092        .setattr        = f2fs_setattr,
1093#ifdef CONFIG_F2FS_FS_XATTR
1094        .listxattr      = f2fs_listxattr,
1095#endif
1096};
1097
1098const struct inode_operations f2fs_dir_inode_operations = {
1099        .create         = f2fs_create,
1100        .lookup         = f2fs_lookup,
1101        .link           = f2fs_link,
1102        .unlink         = f2fs_unlink,
1103        .symlink        = f2fs_symlink,
1104        .mkdir          = f2fs_mkdir,
1105        .rmdir          = f2fs_rmdir,
1106        .mknod          = f2fs_mknod,
1107        .rename         = f2fs_rename2,
1108        .tmpfile        = f2fs_tmpfile,
1109        .getattr        = f2fs_getattr,
1110        .setattr        = f2fs_setattr,
1111        .get_acl        = f2fs_get_acl,
1112        .set_acl        = f2fs_set_acl,
1113#ifdef CONFIG_F2FS_FS_XATTR
1114        .listxattr      = f2fs_listxattr,
1115#endif
1116};
1117
1118const struct inode_operations f2fs_symlink_inode_operations = {
1119        .get_link       = f2fs_get_link,
1120        .getattr        = f2fs_getattr,
1121        .setattr        = f2fs_setattr,
1122#ifdef CONFIG_F2FS_FS_XATTR
1123        .listxattr      = f2fs_listxattr,
1124#endif
1125};
1126
1127const struct inode_operations f2fs_special_inode_operations = {
1128        .getattr        = f2fs_getattr,
1129        .setattr        = f2fs_setattr,
1130        .get_acl        = f2fs_get_acl,
1131        .set_acl        = f2fs_set_acl,
1132#ifdef CONFIG_F2FS_FS_XATTR
1133        .listxattr      = f2fs_listxattr,
1134#endif
1135};
1136