linux/fs/namei.c
<<
>>
Prefs
   1/*
   2 *  linux/fs/namei.c
   3 *
   4 *  Copyright (C) 1991, 1992  Linus Torvalds
   5 */
   6
   7/*
   8 * Some corrections by tytso.
   9 */
  10
  11/* [Feb 1997 T. Schoebel-Theuer] Complete rewrite of the pathname
  12 * lookup logic.
  13 */
  14/* [Feb-Apr 2000, AV] Rewrite to the new namespace architecture.
  15 */
  16
  17#include <linux/init.h>
  18#include <linux/module.h>
  19#include <linux/slab.h>
  20#include <linux/fs.h>
  21#include <linux/namei.h>
  22#include <linux/quotaops.h>
  23#include <linux/pagemap.h>
  24#include <linux/fsnotify.h>
  25#include <linux/personality.h>
  26#include <linux/security.h>
  27#include <linux/ima.h>
  28#include <linux/syscalls.h>
  29#include <linux/mount.h>
  30#include <linux/audit.h>
  31#include <linux/capability.h>
  32#include <linux/file.h>
  33#include <linux/fcntl.h>
  34#include <linux/device_cgroup.h>
  35#include <linux/fs_struct.h>
  36#include <asm/uaccess.h>
  37
  38#define ACC_MODE(x) ("\000\004\002\006"[(x)&O_ACCMODE])
  39
  40/* [Feb-1997 T. Schoebel-Theuer]
  41 * Fundamental changes in the pathname lookup mechanisms (namei)
  42 * were necessary because of omirr.  The reason is that omirr needs
  43 * to know the _real_ pathname, not the user-supplied one, in case
  44 * of symlinks (and also when transname replacements occur).
  45 *
  46 * The new code replaces the old recursive symlink resolution with
  47 * an iterative one (in case of non-nested symlink chains).  It does
  48 * this with calls to <fs>_follow_link().
  49 * As a side effect, dir_namei(), _namei() and follow_link() are now 
  50 * replaced with a single function lookup_dentry() that can handle all 
  51 * the special cases of the former code.
  52 *
  53 * With the new dcache, the pathname is stored at each inode, at least as
  54 * long as the refcount of the inode is positive.  As a side effect, the
  55 * size of the dcache depends on the inode cache and thus is dynamic.
  56 *
  57 * [29-Apr-1998 C. Scott Ananian] Updated above description of symlink
  58 * resolution to correspond with current state of the code.
  59 *
  60 * Note that the symlink resolution is not *completely* iterative.
  61 * There is still a significant amount of tail- and mid- recursion in
  62 * the algorithm.  Also, note that <fs>_readlink() is not used in
  63 * lookup_dentry(): lookup_dentry() on the result of <fs>_readlink()
  64 * may return different results than <fs>_follow_link().  Many virtual
  65 * filesystems (including /proc) exhibit this behavior.
  66 */
  67
  68/* [24-Feb-97 T. Schoebel-Theuer] Side effects caused by new implementation:
  69 * New symlink semantics: when open() is called with flags O_CREAT | O_EXCL
  70 * and the name already exists in form of a symlink, try to create the new
  71 * name indicated by the symlink. The old code always complained that the
  72 * name already exists, due to not following the symlink even if its target
  73 * is nonexistent.  The new semantics affects also mknod() and link() when
  74 * the name is a symlink pointing to a non-existant name.
  75 *
  76 * I don't know which semantics is the right one, since I have no access
  77 * to standards. But I found by trial that HP-UX 9.0 has the full "new"
  78 * semantics implemented, while SunOS 4.1.1 and Solaris (SunOS 5.4) have the
  79 * "old" one. Personally, I think the new semantics is much more logical.
  80 * Note that "ln old new" where "new" is a symlink pointing to a non-existing
  81 * file does succeed in both HP-UX and SunOs, but not in Solaris
  82 * and in the old Linux semantics.
  83 */
  84
  85/* [16-Dec-97 Kevin Buhr] For security reasons, we change some symlink
  86 * semantics.  See the comments in "open_namei" and "do_link" below.
  87 *
  88 * [10-Sep-98 Alan Modra] Another symlink change.
  89 */
  90
  91/* [Feb-Apr 2000 AV] Complete rewrite. Rules for symlinks:
  92 *      inside the path - always follow.
  93 *      in the last component in creation/removal/renaming - never follow.
  94 *      if LOOKUP_FOLLOW passed - follow.
  95 *      if the pathname has trailing slashes - follow.
  96 *      otherwise - don't follow.
  97 * (applied in that order).
  98 *
  99 * [Jun 2000 AV] Inconsistent behaviour of open() in case if flags==O_CREAT
 100 * restored for 2.4. This is the last surviving part of old 4.2BSD bug.
 101 * During the 2.4 we need to fix the userland stuff depending on it -
 102 * hopefully we will be able to get rid of that wart in 2.5. So far only
 103 * XEmacs seems to be relying on it...
 104 */
 105/*
 106 * [Sep 2001 AV] Single-semaphore locking scheme (kudos to David Holland)
 107 * implemented.  Let's see if raised priority of ->s_vfs_rename_mutex gives
 108 * any extra contention...
 109 */
 110
 111static int __link_path_walk(const char *name, struct nameidata *nd);
 112
 113/* In order to reduce some races, while at the same time doing additional
 114 * checking and hopefully speeding things up, we copy filenames to the
 115 * kernel data space before using them..
 116 *
 117 * POSIX.1 2.4: an empty pathname is invalid (ENOENT).
 118 * PATH_MAX includes the nul terminator --RR.
 119 */
 120static int do_getname(const char __user *filename, char *page)
 121{
 122        int retval;
 123        unsigned long len = PATH_MAX;
 124
 125        if (!segment_eq(get_fs(), KERNEL_DS)) {
 126                if ((unsigned long) filename >= TASK_SIZE)
 127                        return -EFAULT;
 128                if (TASK_SIZE - (unsigned long) filename < PATH_MAX)
 129                        len = TASK_SIZE - (unsigned long) filename;
 130        }
 131
 132        retval = strncpy_from_user(page, filename, len);
 133        if (retval > 0) {
 134                if (retval < len)
 135                        return 0;
 136                return -ENAMETOOLONG;
 137        } else if (!retval)
 138                retval = -ENOENT;
 139        return retval;
 140}
 141
 142char * getname(const char __user * filename)
 143{
 144        char *tmp, *result;
 145
 146        result = ERR_PTR(-ENOMEM);
 147        tmp = __getname();
 148        if (tmp)  {
 149                int retval = do_getname(filename, tmp);
 150
 151                result = tmp;
 152                if (retval < 0) {
 153                        __putname(tmp);
 154                        result = ERR_PTR(retval);
 155                }
 156        }
 157        audit_getname(result);
 158        return result;
 159}
 160
 161#ifdef CONFIG_AUDITSYSCALL
 162void putname(const char *name)
 163{
 164        if (unlikely(!audit_dummy_context()))
 165                audit_putname(name);
 166        else
 167                __putname(name);
 168}
 169EXPORT_SYMBOL(putname);
 170#endif
 171
 172
 173/**
 174 * generic_permission  -  check for access rights on a Posix-like filesystem
 175 * @inode:      inode to check access rights for
 176 * @mask:       right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
 177 * @check_acl:  optional callback to check for Posix ACLs
 178 *
 179 * Used to check for read/write/execute permissions on a file.
 180 * We use "fsuid" for this, letting us set arbitrary permissions
 181 * for filesystem access without changing the "normal" uids which
 182 * are used for other things..
 183 */
 184int generic_permission(struct inode *inode, int mask,
 185                int (*check_acl)(struct inode *inode, int mask))
 186{
 187        umode_t                 mode = inode->i_mode;
 188
 189        mask &= MAY_READ | MAY_WRITE | MAY_EXEC;
 190
 191        if (current_fsuid() == inode->i_uid)
 192                mode >>= 6;
 193        else {
 194                if (IS_POSIXACL(inode) && (mode & S_IRWXG) && check_acl) {
 195                        int error = check_acl(inode, mask);
 196                        if (error == -EACCES)
 197                                goto check_capabilities;
 198                        else if (error != -EAGAIN)
 199                                return error;
 200                }
 201
 202                if (in_group_p(inode->i_gid))
 203                        mode >>= 3;
 204        }
 205
 206        /*
 207         * If the DACs are ok we don't need any capability check.
 208         */
 209        if ((mask & ~mode) == 0)
 210                return 0;
 211
 212 check_capabilities:
 213        /*
 214         * Read/write DACs are always overridable.
 215         * Executable DACs are overridable if at least one exec bit is set.
 216         */
 217        if (!(mask & MAY_EXEC) || execute_ok(inode))
 218                if (capable(CAP_DAC_OVERRIDE))
 219                        return 0;
 220
 221        /*
 222         * Searching includes executable on directories, else just read.
 223         */
 224        if (mask == MAY_READ || (S_ISDIR(inode->i_mode) && !(mask & MAY_WRITE)))
 225                if (capable(CAP_DAC_READ_SEARCH))
 226                        return 0;
 227
 228        return -EACCES;
 229}
 230
 231/**
 232 * inode_permission  -  check for access rights to a given inode
 233 * @inode:      inode to check permission on
 234 * @mask:       right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
 235 *
 236 * Used to check for read/write/execute permissions on an inode.
 237 * We use "fsuid" for this, letting us set arbitrary permissions
 238 * for filesystem access without changing the "normal" uids which
 239 * are used for other things.
 240 */
 241int inode_permission(struct inode *inode, int mask)
 242{
 243        int retval;
 244
 245        if (mask & MAY_WRITE) {
 246                umode_t mode = inode->i_mode;
 247
 248                /*
 249                 * Nobody gets write access to a read-only fs.
 250                 */
 251                if (IS_RDONLY(inode) &&
 252                    (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
 253                        return -EROFS;
 254
 255                /*
 256                 * Nobody gets write access to an immutable file.
 257                 */
 258                if (IS_IMMUTABLE(inode))
 259                        return -EACCES;
 260        }
 261
 262        if (inode->i_op->permission)
 263                retval = inode->i_op->permission(inode, mask);
 264        else
 265                retval = generic_permission(inode, mask, NULL);
 266
 267        if (retval)
 268                return retval;
 269
 270        retval = devcgroup_inode_permission(inode, mask);
 271        if (retval)
 272                return retval;
 273
 274        return security_inode_permission(inode,
 275                        mask & (MAY_READ|MAY_WRITE|MAY_EXEC|MAY_APPEND));
 276}
 277
 278/**
 279 * file_permission  -  check for additional access rights to a given file
 280 * @file:       file to check access rights for
 281 * @mask:       right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
 282 *
 283 * Used to check for read/write/execute permissions on an already opened
 284 * file.
 285 *
 286 * Note:
 287 *      Do not use this function in new code.  All access checks should
 288 *      be done using inode_permission().
 289 */
 290int file_permission(struct file *file, int mask)
 291{
 292        return inode_permission(file->f_path.dentry->d_inode, mask);
 293}
 294
 295/*
 296 * get_write_access() gets write permission for a file.
 297 * put_write_access() releases this write permission.
 298 * This is used for regular files.
 299 * We cannot support write (and maybe mmap read-write shared) accesses and
 300 * MAP_DENYWRITE mmappings simultaneously. The i_writecount field of an inode
 301 * can have the following values:
 302 * 0: no writers, no VM_DENYWRITE mappings
 303 * < 0: (-i_writecount) vm_area_structs with VM_DENYWRITE set exist
 304 * > 0: (i_writecount) users are writing to the file.
 305 *
 306 * Normally we operate on that counter with atomic_{inc,dec} and it's safe
 307 * except for the cases where we don't hold i_writecount yet. Then we need to
 308 * use {get,deny}_write_access() - these functions check the sign and refuse
 309 * to do the change if sign is wrong. Exclusion between them is provided by
 310 * the inode->i_lock spinlock.
 311 */
 312
 313int get_write_access(struct inode * inode)
 314{
 315        spin_lock(&inode->i_lock);
 316        if (atomic_read(&inode->i_writecount) < 0) {
 317                spin_unlock(&inode->i_lock);
 318                return -ETXTBSY;
 319        }
 320        atomic_inc(&inode->i_writecount);
 321        spin_unlock(&inode->i_lock);
 322
 323        return 0;
 324}
 325
 326int deny_write_access(struct file * file)
 327{
 328        struct inode *inode = file->f_path.dentry->d_inode;
 329
 330        spin_lock(&inode->i_lock);
 331        if (atomic_read(&inode->i_writecount) > 0) {
 332                spin_unlock(&inode->i_lock);
 333                return -ETXTBSY;
 334        }
 335        atomic_dec(&inode->i_writecount);
 336        spin_unlock(&inode->i_lock);
 337
 338        return 0;
 339}
 340
 341/**
 342 * path_get - get a reference to a path
 343 * @path: path to get the reference to
 344 *
 345 * Given a path increment the reference count to the dentry and the vfsmount.
 346 */
 347void path_get(struct path *path)
 348{
 349        mntget(path->mnt);
 350        dget(path->dentry);
 351}
 352EXPORT_SYMBOL(path_get);
 353
 354/**
 355 * path_put - put a reference to a path
 356 * @path: path to put the reference to
 357 *
 358 * Given a path decrement the reference count to the dentry and the vfsmount.
 359 */
 360void path_put(struct path *path)
 361{
 362        dput(path->dentry);
 363        mntput(path->mnt);
 364}
 365EXPORT_SYMBOL(path_put);
 366
 367/**
 368 * release_open_intent - free up open intent resources
 369 * @nd: pointer to nameidata
 370 */
 371void release_open_intent(struct nameidata *nd)
 372{
 373        if (nd->intent.open.file->f_path.dentry == NULL)
 374                put_filp(nd->intent.open.file);
 375        else
 376                fput(nd->intent.open.file);
 377}
 378
 379static inline struct dentry *
 380do_revalidate(struct dentry *dentry, struct nameidata *nd)
 381{
 382        int status = dentry->d_op->d_revalidate(dentry, nd);
 383        if (unlikely(status <= 0)) {
 384                /*
 385                 * The dentry failed validation.
 386                 * If d_revalidate returned 0 attempt to invalidate
 387                 * the dentry otherwise d_revalidate is asking us
 388                 * to return a fail status.
 389                 */
 390                if (!status) {
 391                        if (!d_invalidate(dentry)) {
 392                                dput(dentry);
 393                                dentry = NULL;
 394                        }
 395                } else {
 396                        dput(dentry);
 397                        dentry = ERR_PTR(status);
 398                }
 399        }
 400        return dentry;
 401}
 402
 403/*
 404 * Internal lookup() using the new generic dcache.
 405 * SMP-safe
 406 */
 407static struct dentry * cached_lookup(struct dentry * parent, struct qstr * name, struct nameidata *nd)
 408{
 409        struct dentry * dentry = __d_lookup(parent, name);
 410
 411        /* lockess __d_lookup may fail due to concurrent d_move() 
 412         * in some unrelated directory, so try with d_lookup
 413         */
 414        if (!dentry)
 415                dentry = d_lookup(parent, name);
 416
 417        if (dentry && dentry->d_op && dentry->d_op->d_revalidate)
 418                dentry = do_revalidate(dentry, nd);
 419
 420        return dentry;
 421}
 422
 423/*
 424 * Short-cut version of permission(), for calling by
 425 * path_walk(), when dcache lock is held.  Combines parts
 426 * of permission() and generic_permission(), and tests ONLY for
 427 * MAY_EXEC permission.
 428 *
 429 * If appropriate, check DAC only.  If not appropriate, or
 430 * short-cut DAC fails, then call permission() to do more
 431 * complete permission check.
 432 */
 433static int exec_permission_lite(struct inode *inode)
 434{
 435        umode_t mode = inode->i_mode;
 436
 437        if (inode->i_op->permission)
 438                return -EAGAIN;
 439
 440        if (current_fsuid() == inode->i_uid)
 441                mode >>= 6;
 442        else if (in_group_p(inode->i_gid))
 443                mode >>= 3;
 444
 445        if (mode & MAY_EXEC)
 446                goto ok;
 447
 448        if ((inode->i_mode & S_IXUGO) && capable(CAP_DAC_OVERRIDE))
 449                goto ok;
 450
 451        if (S_ISDIR(inode->i_mode) && capable(CAP_DAC_OVERRIDE))
 452                goto ok;
 453
 454        if (S_ISDIR(inode->i_mode) && capable(CAP_DAC_READ_SEARCH))
 455                goto ok;
 456
 457        return -EACCES;
 458ok:
 459        return security_inode_permission(inode, MAY_EXEC);
 460}
 461
 462/*
 463 * This is called when everything else fails, and we actually have
 464 * to go to the low-level filesystem to find out what we should do..
 465 *
 466 * We get the directory semaphore, and after getting that we also
 467 * make sure that nobody added the entry to the dcache in the meantime..
 468 * SMP-safe
 469 */
 470static struct dentry * real_lookup(struct dentry * parent, struct qstr * name, struct nameidata *nd)
 471{
 472        struct dentry * result;
 473        struct inode *dir = parent->d_inode;
 474
 475        mutex_lock(&dir->i_mutex);
 476        /*
 477         * First re-do the cached lookup just in case it was created
 478         * while we waited for the directory semaphore..
 479         *
 480         * FIXME! This could use version numbering or similar to
 481         * avoid unnecessary cache lookups.
 482         *
 483         * The "dcache_lock" is purely to protect the RCU list walker
 484         * from concurrent renames at this point (we mustn't get false
 485         * negatives from the RCU list walk here, unlike the optimistic
 486         * fast walk).
 487         *
 488         * so doing d_lookup() (with seqlock), instead of lockfree __d_lookup
 489         */
 490        result = d_lookup(parent, name);
 491        if (!result) {
 492                struct dentry *dentry;
 493
 494                /* Don't create child dentry for a dead directory. */
 495                result = ERR_PTR(-ENOENT);
 496                if (IS_DEADDIR(dir))
 497                        goto out_unlock;
 498
 499                dentry = d_alloc(parent, name);
 500                result = ERR_PTR(-ENOMEM);
 501                if (dentry) {
 502                        result = dir->i_op->lookup(dir, dentry, nd);
 503                        if (result)
 504                                dput(dentry);
 505                        else
 506                                result = dentry;
 507                }
 508out_unlock:
 509                mutex_unlock(&dir->i_mutex);
 510                return result;
 511        }
 512
 513        /*
 514         * Uhhuh! Nasty case: the cache was re-populated while
 515         * we waited on the semaphore. Need to revalidate.
 516         */
 517        mutex_unlock(&dir->i_mutex);
 518        if (result->d_op && result->d_op->d_revalidate) {
 519                result = do_revalidate(result, nd);
 520                if (!result)
 521                        result = ERR_PTR(-ENOENT);
 522        }
 523        return result;
 524}
 525
 526/*
 527 * Wrapper to retry pathname resolution whenever the underlying
 528 * file system returns an ESTALE.
 529 *
 530 * Retry the whole path once, forcing real lookup requests
 531 * instead of relying on the dcache.
 532 */
 533static __always_inline int link_path_walk(const char *name, struct nameidata *nd)
 534{
 535        struct path save = nd->path;
 536        int result;
 537
 538        /* make sure the stuff we saved doesn't go away */
 539        path_get(&save);
 540
 541        result = __link_path_walk(name, nd);
 542        if (result == -ESTALE) {
 543                /* nd->path had been dropped */
 544                nd->path = save;
 545                path_get(&nd->path);
 546                nd->flags |= LOOKUP_REVAL;
 547                result = __link_path_walk(name, nd);
 548        }
 549
 550        path_put(&save);
 551
 552        return result;
 553}
 554
 555static __always_inline void set_root(struct nameidata *nd)
 556{
 557        if (!nd->root.mnt) {
 558                struct fs_struct *fs = current->fs;
 559                read_lock(&fs->lock);
 560                nd->root = fs->root;
 561                path_get(&nd->root);
 562                read_unlock(&fs->lock);
 563        }
 564}
 565
 566static __always_inline int __vfs_follow_link(struct nameidata *nd, const char *link)
 567{
 568        int res = 0;
 569        char *name;
 570        if (IS_ERR(link))
 571                goto fail;
 572
 573        if (*link == '/') {
 574                set_root(nd);
 575                path_put(&nd->path);
 576                nd->path = nd->root;
 577                path_get(&nd->root);
 578        }
 579
 580        res = link_path_walk(link, nd);
 581        if (nd->depth || res || nd->last_type!=LAST_NORM)
 582                return res;
 583        /*
 584         * If it is an iterative symlinks resolution in open_namei() we
 585         * have to copy the last component. And all that crap because of
 586         * bloody create() on broken symlinks. Furrfu...
 587         */
 588        name = __getname();
 589        if (unlikely(!name)) {
 590                path_put(&nd->path);
 591                return -ENOMEM;
 592        }
 593        strcpy(name, nd->last.name);
 594        nd->last.name = name;
 595        return 0;
 596fail:
 597        path_put(&nd->path);
 598        return PTR_ERR(link);
 599}
 600
 601static void path_put_conditional(struct path *path, struct nameidata *nd)
 602{
 603        dput(path->dentry);
 604        if (path->mnt != nd->path.mnt)
 605                mntput(path->mnt);
 606}
 607
 608static inline void path_to_nameidata(struct path *path, struct nameidata *nd)
 609{
 610        dput(nd->path.dentry);
 611        if (nd->path.mnt != path->mnt)
 612                mntput(nd->path.mnt);
 613        nd->path.mnt = path->mnt;
 614        nd->path.dentry = path->dentry;
 615}
 616
 617static __always_inline int __do_follow_link(struct path *path, struct nameidata *nd)
 618{
 619        int error;
 620        void *cookie;
 621        struct dentry *dentry = path->dentry;
 622
 623        touch_atime(path->mnt, dentry);
 624        nd_set_link(nd, NULL);
 625
 626        if (path->mnt != nd->path.mnt) {
 627                path_to_nameidata(path, nd);
 628                dget(dentry);
 629        }
 630        mntget(path->mnt);
 631        cookie = dentry->d_inode->i_op->follow_link(dentry, nd);
 632        error = PTR_ERR(cookie);
 633        if (!IS_ERR(cookie)) {
 634                char *s = nd_get_link(nd);
 635                error = 0;
 636                if (s)
 637                        error = __vfs_follow_link(nd, s);
 638                if (dentry->d_inode->i_op->put_link)
 639                        dentry->d_inode->i_op->put_link(dentry, nd, cookie);
 640        }
 641        path_put(path);
 642
 643        return error;
 644}
 645
 646/*
 647 * This limits recursive symlink follows to 8, while
 648 * limiting consecutive symlinks to 40.
 649 *
 650 * Without that kind of total limit, nasty chains of consecutive
 651 * symlinks can cause almost arbitrarily long lookups. 
 652 */
 653static inline int do_follow_link(struct path *path, struct nameidata *nd)
 654{
 655        int err = -ELOOP;
 656        if (current->link_count >= MAX_NESTED_LINKS)
 657                goto loop;
 658        if (current->total_link_count >= 40)
 659                goto loop;
 660        BUG_ON(nd->depth >= MAX_NESTED_LINKS);
 661        cond_resched();
 662        err = security_inode_follow_link(path->dentry, nd);
 663        if (err)
 664                goto loop;
 665        current->link_count++;
 666        current->total_link_count++;
 667        nd->depth++;
 668        err = __do_follow_link(path, nd);
 669        current->link_count--;
 670        nd->depth--;
 671        return err;
 672loop:
 673        path_put_conditional(path, nd);
 674        path_put(&nd->path);
 675        return err;
 676}
 677
 678int follow_up(struct path *path)
 679{
 680        struct vfsmount *parent;
 681        struct dentry *mountpoint;
 682        spin_lock(&vfsmount_lock);
 683        parent = path->mnt->mnt_parent;
 684        if (parent == path->mnt) {
 685                spin_unlock(&vfsmount_lock);
 686                return 0;
 687        }
 688        mntget(parent);
 689        mountpoint = dget(path->mnt->mnt_mountpoint);
 690        spin_unlock(&vfsmount_lock);
 691        dput(path->dentry);
 692        path->dentry = mountpoint;
 693        mntput(path->mnt);
 694        path->mnt = parent;
 695        return 1;
 696}
 697
 698/* no need for dcache_lock, as serialization is taken care in
 699 * namespace.c
 700 */
 701static int __follow_mount(struct path *path)
 702{
 703        int res = 0;
 704        while (d_mountpoint(path->dentry)) {
 705                struct vfsmount *mounted = lookup_mnt(path);
 706                if (!mounted)
 707                        break;
 708                dput(path->dentry);
 709                if (res)
 710                        mntput(path->mnt);
 711                path->mnt = mounted;
 712                path->dentry = dget(mounted->mnt_root);
 713                res = 1;
 714        }
 715        return res;
 716}
 717
 718static void follow_mount(struct path *path)
 719{
 720        while (d_mountpoint(path->dentry)) {
 721                struct vfsmount *mounted = lookup_mnt(path);
 722                if (!mounted)
 723                        break;
 724                dput(path->dentry);
 725                mntput(path->mnt);
 726                path->mnt = mounted;
 727                path->dentry = dget(mounted->mnt_root);
 728        }
 729}
 730
 731/* no need for dcache_lock, as serialization is taken care in
 732 * namespace.c
 733 */
 734int follow_down(struct path *path)
 735{
 736        struct vfsmount *mounted;
 737
 738        mounted = lookup_mnt(path);
 739        if (mounted) {
 740                dput(path->dentry);
 741                mntput(path->mnt);
 742                path->mnt = mounted;
 743                path->dentry = dget(mounted->mnt_root);
 744                return 1;
 745        }
 746        return 0;
 747}
 748
 749static __always_inline void follow_dotdot(struct nameidata *nd)
 750{
 751        set_root(nd);
 752
 753        while(1) {
 754                struct vfsmount *parent;
 755                struct dentry *old = nd->path.dentry;
 756
 757                if (nd->path.dentry == nd->root.dentry &&
 758                    nd->path.mnt == nd->root.mnt) {
 759                        break;
 760                }
 761                spin_lock(&dcache_lock);
 762                if (nd->path.dentry != nd->path.mnt->mnt_root) {
 763                        nd->path.dentry = dget(nd->path.dentry->d_parent);
 764                        spin_unlock(&dcache_lock);
 765                        dput(old);
 766                        break;
 767                }
 768                spin_unlock(&dcache_lock);
 769                spin_lock(&vfsmount_lock);
 770                parent = nd->path.mnt->mnt_parent;
 771                if (parent == nd->path.mnt) {
 772                        spin_unlock(&vfsmount_lock);
 773                        break;
 774                }
 775                mntget(parent);
 776                nd->path.dentry = dget(nd->path.mnt->mnt_mountpoint);
 777                spin_unlock(&vfsmount_lock);
 778                dput(old);
 779                mntput(nd->path.mnt);
 780                nd->path.mnt = parent;
 781        }
 782        follow_mount(&nd->path);
 783}
 784
 785/*
 786 *  It's more convoluted than I'd like it to be, but... it's still fairly
 787 *  small and for now I'd prefer to have fast path as straight as possible.
 788 *  It _is_ time-critical.
 789 */
 790static int do_lookup(struct nameidata *nd, struct qstr *name,
 791                     struct path *path)
 792{
 793        struct vfsmount *mnt = nd->path.mnt;
 794        struct dentry *dentry = __d_lookup(nd->path.dentry, name);
 795
 796        if (!dentry)
 797                goto need_lookup;
 798        if (dentry->d_op && dentry->d_op->d_revalidate)
 799                goto need_revalidate;
 800done:
 801        path->mnt = mnt;
 802        path->dentry = dentry;
 803        __follow_mount(path);
 804        return 0;
 805
 806need_lookup:
 807        dentry = real_lookup(nd->path.dentry, name, nd);
 808        if (IS_ERR(dentry))
 809                goto fail;
 810        goto done;
 811
 812need_revalidate:
 813        dentry = do_revalidate(dentry, nd);
 814        if (!dentry)
 815                goto need_lookup;
 816        if (IS_ERR(dentry))
 817                goto fail;
 818        goto done;
 819
 820fail:
 821        return PTR_ERR(dentry);
 822}
 823
 824/*
 825 * Name resolution.
 826 * This is the basic name resolution function, turning a pathname into
 827 * the final dentry. We expect 'base' to be positive and a directory.
 828 *
 829 * Returns 0 and nd will have valid dentry and mnt on success.
 830 * Returns error and drops reference to input namei data on failure.
 831 */
 832static int __link_path_walk(const char *name, struct nameidata *nd)
 833{
 834        struct path next;
 835        struct inode *inode;
 836        int err;
 837        unsigned int lookup_flags = nd->flags;
 838        
 839        while (*name=='/')
 840                name++;
 841        if (!*name)
 842                goto return_reval;
 843
 844        inode = nd->path.dentry->d_inode;
 845        if (nd->depth)
 846                lookup_flags = LOOKUP_FOLLOW | (nd->flags & LOOKUP_CONTINUE);
 847
 848        /* At this point we know we have a real path component. */
 849        for(;;) {
 850                unsigned long hash;
 851                struct qstr this;
 852                unsigned int c;
 853
 854                nd->flags |= LOOKUP_CONTINUE;
 855                err = exec_permission_lite(inode);
 856                if (err == -EAGAIN)
 857                        err = inode_permission(nd->path.dentry->d_inode,
 858                                               MAY_EXEC);
 859                if (!err)
 860                        err = ima_path_check(&nd->path, MAY_EXEC,
 861                                             IMA_COUNT_UPDATE);
 862                if (err)
 863                        break;
 864
 865                this.name = name;
 866                c = *(const unsigned char *)name;
 867
 868                hash = init_name_hash();
 869                do {
 870                        name++;
 871                        hash = partial_name_hash(c, hash);
 872                        c = *(const unsigned char *)name;
 873                } while (c && (c != '/'));
 874                this.len = name - (const char *) this.name;
 875                this.hash = end_name_hash(hash);
 876
 877                /* remove trailing slashes? */
 878                if (!c)
 879                        goto last_component;
 880                while (*++name == '/');
 881                if (!*name)
 882                        goto last_with_slashes;
 883
 884                /*
 885                 * "." and ".." are special - ".." especially so because it has
 886                 * to be able to know about the current root directory and
 887                 * parent relationships.
 888                 */
 889                if (this.name[0] == '.') switch (this.len) {
 890                        default:
 891                                break;
 892                        case 2: 
 893                                if (this.name[1] != '.')
 894                                        break;
 895                                follow_dotdot(nd);
 896                                inode = nd->path.dentry->d_inode;
 897                                /* fallthrough */
 898                        case 1:
 899                                continue;
 900                }
 901                /*
 902                 * See if the low-level filesystem might want
 903                 * to use its own hash..
 904                 */
 905                if (nd->path.dentry->d_op && nd->path.dentry->d_op->d_hash) {
 906                        err = nd->path.dentry->d_op->d_hash(nd->path.dentry,
 907                                                            &this);
 908                        if (err < 0)
 909                                break;
 910                }
 911                /* This does the actual lookups.. */
 912                err = do_lookup(nd, &this, &next);
 913                if (err)
 914                        break;
 915
 916                err = -ENOENT;
 917                inode = next.dentry->d_inode;
 918                if (!inode)
 919                        goto out_dput;
 920
 921                if (inode->i_op->follow_link) {
 922                        err = do_follow_link(&next, nd);
 923                        if (err)
 924                                goto return_err;
 925                        err = -ENOENT;
 926                        inode = nd->path.dentry->d_inode;
 927                        if (!inode)
 928                                break;
 929                } else
 930                        path_to_nameidata(&next, nd);
 931                err = -ENOTDIR; 
 932                if (!inode->i_op->lookup)
 933                        break;
 934                continue;
 935                /* here ends the main loop */
 936
 937last_with_slashes:
 938                lookup_flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
 939last_component:
 940                /* Clear LOOKUP_CONTINUE iff it was previously unset */
 941                nd->flags &= lookup_flags | ~LOOKUP_CONTINUE;
 942                if (lookup_flags & LOOKUP_PARENT)
 943                        goto lookup_parent;
 944                if (this.name[0] == '.') switch (this.len) {
 945                        default:
 946                                break;
 947                        case 2: 
 948                                if (this.name[1] != '.')
 949                                        break;
 950                                follow_dotdot(nd);
 951                                inode = nd->path.dentry->d_inode;
 952                                /* fallthrough */
 953                        case 1:
 954                                goto return_reval;
 955                }
 956                if (nd->path.dentry->d_op && nd->path.dentry->d_op->d_hash) {
 957                        err = nd->path.dentry->d_op->d_hash(nd->path.dentry,
 958                                                            &this);
 959                        if (err < 0)
 960                                break;
 961                }
 962                err = do_lookup(nd, &this, &next);
 963                if (err)
 964                        break;
 965                inode = next.dentry->d_inode;
 966                if ((lookup_flags & LOOKUP_FOLLOW)
 967                    && inode && inode->i_op->follow_link) {
 968                        err = do_follow_link(&next, nd);
 969                        if (err)
 970                                goto return_err;
 971                        inode = nd->path.dentry->d_inode;
 972                } else
 973                        path_to_nameidata(&next, nd);
 974                err = -ENOENT;
 975                if (!inode)
 976                        break;
 977                if (lookup_flags & LOOKUP_DIRECTORY) {
 978                        err = -ENOTDIR; 
 979                        if (!inode->i_op->lookup)
 980                                break;
 981                }
 982                goto return_base;
 983lookup_parent:
 984                nd->last = this;
 985                nd->last_type = LAST_NORM;
 986                if (this.name[0] != '.')
 987                        goto return_base;
 988                if (this.len == 1)
 989                        nd->last_type = LAST_DOT;
 990                else if (this.len == 2 && this.name[1] == '.')
 991                        nd->last_type = LAST_DOTDOT;
 992                else
 993                        goto return_base;
 994return_reval:
 995                /*
 996                 * We bypassed the ordinary revalidation routines.
 997                 * We may need to check the cached dentry for staleness.
 998                 */
 999                if (nd->path.dentry && nd->path.dentry->d_sb &&
1000                    (nd->path.dentry->d_sb->s_type->fs_flags & FS_REVAL_DOT)) {
1001                        err = -ESTALE;
1002                        /* Note: we do not d_invalidate() */
1003                        if (!nd->path.dentry->d_op->d_revalidate(
1004                                        nd->path.dentry, nd))
1005                                break;
1006                }
1007return_base:
1008                return 0;
1009out_dput:
1010                path_put_conditional(&next, nd);
1011                break;
1012        }
1013        path_put(&nd->path);
1014return_err:
1015        return err;
1016}
1017
1018static int path_walk(const char *name, struct nameidata *nd)
1019{
1020        current->total_link_count = 0;
1021        return link_path_walk(name, nd);
1022}
1023
1024static int path_init(int dfd, const char *name, unsigned int flags, struct nameidata *nd)
1025{
1026        int retval = 0;
1027        int fput_needed;
1028        struct file *file;
1029
1030        nd->last_type = LAST_ROOT; /* if there are only slashes... */
1031        nd->flags = flags;
1032        nd->depth = 0;
1033        nd->root.mnt = NULL;
1034
1035        if (*name=='/') {
1036                set_root(nd);
1037                nd->path = nd->root;
1038                path_get(&nd->root);
1039        } else if (dfd == AT_FDCWD) {
1040                struct fs_struct *fs = current->fs;
1041                read_lock(&fs->lock);
1042                nd->path = fs->pwd;
1043                path_get(&fs->pwd);
1044                read_unlock(&fs->lock);
1045        } else {
1046                struct dentry *dentry;
1047
1048                file = fget_light(dfd, &fput_needed);
1049                retval = -EBADF;
1050                if (!file)
1051                        goto out_fail;
1052
1053                dentry = file->f_path.dentry;
1054
1055                retval = -ENOTDIR;
1056                if (!S_ISDIR(dentry->d_inode->i_mode))
1057                        goto fput_fail;
1058
1059                retval = file_permission(file, MAY_EXEC);
1060                if (retval)
1061                        goto fput_fail;
1062
1063                nd->path = file->f_path;
1064                path_get(&file->f_path);
1065
1066                fput_light(file, fput_needed);
1067        }
1068        return 0;
1069
1070fput_fail:
1071        fput_light(file, fput_needed);
1072out_fail:
1073        return retval;
1074}
1075
1076/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
1077static int do_path_lookup(int dfd, const char *name,
1078                                unsigned int flags, struct nameidata *nd)
1079{
1080        int retval = path_init(dfd, name, flags, nd);
1081        if (!retval)
1082                retval = path_walk(name, nd);
1083        if (unlikely(!retval && !audit_dummy_context() && nd->path.dentry &&
1084                                nd->path.dentry->d_inode))
1085                audit_inode(name, nd->path.dentry);
1086        if (nd->root.mnt) {
1087                path_put(&nd->root);
1088                nd->root.mnt = NULL;
1089        }
1090        return retval;
1091}
1092
1093int path_lookup(const char *name, unsigned int flags,
1094                        struct nameidata *nd)
1095{
1096        return do_path_lookup(AT_FDCWD, name, flags, nd);
1097}
1098
1099int kern_path(const char *name, unsigned int flags, struct path *path)
1100{
1101        struct nameidata nd;
1102        int res = do_path_lookup(AT_FDCWD, name, flags, &nd);
1103        if (!res)
1104                *path = nd.path;
1105        return res;
1106}
1107
1108/**
1109 * vfs_path_lookup - lookup a file path relative to a dentry-vfsmount pair
1110 * @dentry:  pointer to dentry of the base directory
1111 * @mnt: pointer to vfs mount of the base directory
1112 * @name: pointer to file name
1113 * @flags: lookup flags
1114 * @nd: pointer to nameidata
1115 */
1116int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
1117                    const char *name, unsigned int flags,
1118                    struct nameidata *nd)
1119{
1120        int retval;
1121
1122        /* same as do_path_lookup */
1123        nd->last_type = LAST_ROOT;
1124        nd->flags = flags;
1125        nd->depth = 0;
1126
1127        nd->path.dentry = dentry;
1128        nd->path.mnt = mnt;
1129        path_get(&nd->path);
1130        nd->root = nd->path;
1131        path_get(&nd->root);
1132
1133        retval = path_walk(name, nd);
1134        if (unlikely(!retval && !audit_dummy_context() && nd->path.dentry &&
1135                                nd->path.dentry->d_inode))
1136                audit_inode(name, nd->path.dentry);
1137
1138        path_put(&nd->root);
1139        nd->root.mnt = NULL;
1140
1141        return retval;
1142}
1143
1144/**
1145 * path_lookup_open - lookup a file path with open intent
1146 * @dfd: the directory to use as base, or AT_FDCWD
1147 * @name: pointer to file name
1148 * @lookup_flags: lookup intent flags
1149 * @nd: pointer to nameidata
1150 * @open_flags: open intent flags
1151 */
1152static int path_lookup_open(int dfd, const char *name,
1153                unsigned int lookup_flags, struct nameidata *nd, int open_flags)
1154{
1155        struct file *filp = get_empty_filp();
1156        int err;
1157
1158        if (filp == NULL)
1159                return -ENFILE;
1160        nd->intent.open.file = filp;
1161        nd->intent.open.flags = open_flags;
1162        nd->intent.open.create_mode = 0;
1163        err = do_path_lookup(dfd, name, lookup_flags|LOOKUP_OPEN, nd);
1164        if (IS_ERR(nd->intent.open.file)) {
1165                if (err == 0) {
1166                        err = PTR_ERR(nd->intent.open.file);
1167                        path_put(&nd->path);
1168                }
1169        } else if (err != 0)
1170                release_open_intent(nd);
1171        return err;
1172}
1173
1174static struct dentry *__lookup_hash(struct qstr *name,
1175                struct dentry *base, struct nameidata *nd)
1176{
1177        struct dentry *dentry;
1178        struct inode *inode;
1179        int err;
1180
1181        inode = base->d_inode;
1182
1183        /*
1184         * See if the low-level filesystem might want
1185         * to use its own hash..
1186         */
1187        if (base->d_op && base->d_op->d_hash) {
1188                err = base->d_op->d_hash(base, name);
1189                dentry = ERR_PTR(err);
1190                if (err < 0)
1191                        goto out;
1192        }
1193
1194        dentry = cached_lookup(base, name, nd);
1195        if (!dentry) {
1196                struct dentry *new;
1197
1198                /* Don't create child dentry for a dead directory. */
1199                dentry = ERR_PTR(-ENOENT);
1200                if (IS_DEADDIR(inode))
1201                        goto out;
1202
1203                new = d_alloc(base, name);
1204                dentry = ERR_PTR(-ENOMEM);
1205                if (!new)
1206                        goto out;
1207                dentry = inode->i_op->lookup(inode, new, nd);
1208                if (!dentry)
1209                        dentry = new;
1210                else
1211                        dput(new);
1212        }
1213out:
1214        return dentry;
1215}
1216
1217/*
1218 * Restricted form of lookup. Doesn't follow links, single-component only,
1219 * needs parent already locked. Doesn't follow mounts.
1220 * SMP-safe.
1221 */
1222static struct dentry *lookup_hash(struct nameidata *nd)
1223{
1224        int err;
1225
1226        err = inode_permission(nd->path.dentry->d_inode, MAY_EXEC);
1227        if (err)
1228                return ERR_PTR(err);
1229        return __lookup_hash(&nd->last, nd->path.dentry, nd);
1230}
1231
1232static int __lookup_one_len(const char *name, struct qstr *this,
1233                struct dentry *base, int len)
1234{
1235        unsigned long hash;
1236        unsigned int c;
1237
1238        this->name = name;
1239        this->len = len;
1240        if (!len)
1241                return -EACCES;
1242
1243        hash = init_name_hash();
1244        while (len--) {
1245                c = *(const unsigned char *)name++;
1246                if (c == '/' || c == '\0')
1247                        return -EACCES;
1248                hash = partial_name_hash(c, hash);
1249        }
1250        this->hash = end_name_hash(hash);
1251        return 0;
1252}
1253
1254/**
1255 * lookup_one_len - filesystem helper to lookup single pathname component
1256 * @name:       pathname component to lookup
1257 * @base:       base directory to lookup from
1258 * @len:        maximum length @len should be interpreted to
1259 *
1260 * Note that this routine is purely a helper for filesystem usage and should
1261 * not be called by generic code.  Also note that by using this function the
1262 * nameidata argument is passed to the filesystem methods and a filesystem
1263 * using this helper needs to be prepared for that.
1264 */
1265struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
1266{
1267        int err;
1268        struct qstr this;
1269
1270        WARN_ON_ONCE(!mutex_is_locked(&base->d_inode->i_mutex));
1271
1272        err = __lookup_one_len(name, &this, base, len);
1273        if (err)
1274                return ERR_PTR(err);
1275
1276        err = inode_permission(base->d_inode, MAY_EXEC);
1277        if (err)
1278                return ERR_PTR(err);
1279        return __lookup_hash(&this, base, NULL);
1280}
1281
1282/**
1283 * lookup_one_noperm - bad hack for sysfs
1284 * @name:       pathname component to lookup
1285 * @base:       base directory to lookup from
1286 *
1287 * This is a variant of lookup_one_len that doesn't perform any permission
1288 * checks.   It's a horrible hack to work around the braindead sysfs
1289 * architecture and should not be used anywhere else.
1290 *
1291 * DON'T USE THIS FUNCTION EVER, thanks.
1292 */
1293struct dentry *lookup_one_noperm(const char *name, struct dentry *base)
1294{
1295        int err;
1296        struct qstr this;
1297
1298        err = __lookup_one_len(name, &this, base, strlen(name));
1299        if (err)
1300                return ERR_PTR(err);
1301        return __lookup_hash(&this, base, NULL);
1302}
1303
1304int user_path_at(int dfd, const char __user *name, unsigned flags,
1305                 struct path *path)
1306{
1307        struct nameidata nd;
1308        char *tmp = getname(name);
1309        int err = PTR_ERR(tmp);
1310        if (!IS_ERR(tmp)) {
1311
1312                BUG_ON(flags & LOOKUP_PARENT);
1313
1314                err = do_path_lookup(dfd, tmp, flags, &nd);
1315                putname(tmp);
1316                if (!err)
1317                        *path = nd.path;
1318        }
1319        return err;
1320}
1321
1322static int user_path_parent(int dfd, const char __user *path,
1323                        struct nameidata *nd, char **name)
1324{
1325        char *s = getname(path);
1326        int error;
1327
1328        if (IS_ERR(s))
1329                return PTR_ERR(s);
1330
1331        error = do_path_lookup(dfd, s, LOOKUP_PARENT, nd);
1332        if (error)
1333                putname(s);
1334        else
1335                *name = s;
1336
1337        return error;
1338}
1339
1340/*
1341 * It's inline, so penalty for filesystems that don't use sticky bit is
1342 * minimal.
1343 */
1344static inline int check_sticky(struct inode *dir, struct inode *inode)
1345{
1346        uid_t fsuid = current_fsuid();
1347
1348        if (!(dir->i_mode & S_ISVTX))
1349                return 0;
1350        if (inode->i_uid == fsuid)
1351                return 0;
1352        if (dir->i_uid == fsuid)
1353                return 0;
1354        return !capable(CAP_FOWNER);
1355}
1356
1357/*
1358 *      Check whether we can remove a link victim from directory dir, check
1359 *  whether the type of victim is right.
1360 *  1. We can't do it if dir is read-only (done in permission())
1361 *  2. We should have write and exec permissions on dir
1362 *  3. We can't remove anything from append-only dir
1363 *  4. We can't do anything with immutable dir (done in permission())
1364 *  5. If the sticky bit on dir is set we should either
1365 *      a. be owner of dir, or
1366 *      b. be owner of victim, or
1367 *      c. have CAP_FOWNER capability
1368 *  6. If the victim is append-only or immutable we can't do antyhing with
1369 *     links pointing to it.
1370 *  7. If we were asked to remove a directory and victim isn't one - ENOTDIR.
1371 *  8. If we were asked to remove a non-directory and victim isn't one - EISDIR.
1372 *  9. We can't remove a root or mountpoint.
1373 * 10. We don't allow removal of NFS sillyrenamed files; it's handled by
1374 *     nfs_async_unlink().
1375 */
1376static int may_delete(struct inode *dir,struct dentry *victim,int isdir)
1377{
1378        int error;
1379
1380        if (!victim->d_inode)
1381                return -ENOENT;
1382
1383        BUG_ON(victim->d_parent->d_inode != dir);
1384        audit_inode_child(victim->d_name.name, victim, dir);
1385
1386        error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
1387        if (error)
1388                return error;
1389        if (IS_APPEND(dir))
1390                return -EPERM;
1391        if (check_sticky(dir, victim->d_inode)||IS_APPEND(victim->d_inode)||
1392            IS_IMMUTABLE(victim->d_inode) || IS_SWAPFILE(victim->d_inode))
1393                return -EPERM;
1394        if (isdir) {
1395                if (!S_ISDIR(victim->d_inode->i_mode))
1396                        return -ENOTDIR;
1397                if (IS_ROOT(victim))
1398                        return -EBUSY;
1399        } else if (S_ISDIR(victim->d_inode->i_mode))
1400                return -EISDIR;
1401        if (IS_DEADDIR(dir))
1402                return -ENOENT;
1403        if (victim->d_flags & DCACHE_NFSFS_RENAMED)
1404                return -EBUSY;
1405        return 0;
1406}
1407
1408/*      Check whether we can create an object with dentry child in directory
1409 *  dir.
1410 *  1. We can't do it if child already exists (open has special treatment for
1411 *     this case, but since we are inlined it's OK)
1412 *  2. We can't do it if dir is read-only (done in permission())
1413 *  3. We should have write and exec permissions on dir
1414 *  4. We can't do it if dir is immutable (done in permission())
1415 */
1416static inline int may_create(struct inode *dir, struct dentry *child)
1417{
1418        if (child->d_inode)
1419                return -EEXIST;
1420        if (IS_DEADDIR(dir))
1421                return -ENOENT;
1422        return inode_permission(dir, MAY_WRITE | MAY_EXEC);
1423}
1424
1425/* 
1426 * O_DIRECTORY translates into forcing a directory lookup.
1427 */
1428static inline int lookup_flags(unsigned int f)
1429{
1430        unsigned long retval = LOOKUP_FOLLOW;
1431
1432        if (f & O_NOFOLLOW)
1433                retval &= ~LOOKUP_FOLLOW;
1434        
1435        if (f & O_DIRECTORY)
1436                retval |= LOOKUP_DIRECTORY;
1437
1438        return retval;
1439}
1440
1441/*
1442 * p1 and p2 should be directories on the same fs.
1443 */
1444struct dentry *lock_rename(struct dentry *p1, struct dentry *p2)
1445{
1446        struct dentry *p;
1447
1448        if (p1 == p2) {
1449                mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
1450                return NULL;
1451        }
1452
1453        mutex_lock(&p1->d_inode->i_sb->s_vfs_rename_mutex);
1454
1455        p = d_ancestor(p2, p1);
1456        if (p) {
1457                mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_PARENT);
1458                mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_CHILD);
1459                return p;
1460        }
1461
1462        p = d_ancestor(p1, p2);
1463        if (p) {
1464                mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
1465                mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_CHILD);
1466                return p;
1467        }
1468
1469        mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
1470        mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_CHILD);
1471        return NULL;
1472}
1473
1474void unlock_rename(struct dentry *p1, struct dentry *p2)
1475{
1476        mutex_unlock(&p1->d_inode->i_mutex);
1477        if (p1 != p2) {
1478                mutex_unlock(&p2->d_inode->i_mutex);
1479                mutex_unlock(&p1->d_inode->i_sb->s_vfs_rename_mutex);
1480        }
1481}
1482
1483int vfs_create(struct inode *dir, struct dentry *dentry, int mode,
1484                struct nameidata *nd)
1485{
1486        int error = may_create(dir, dentry);
1487
1488        if (error)
1489                return error;
1490
1491        if (!dir->i_op->create)
1492                return -EACCES; /* shouldn't it be ENOSYS? */
1493        mode &= S_IALLUGO;
1494        mode |= S_IFREG;
1495        error = security_inode_create(dir, dentry, mode);
1496        if (error)
1497                return error;
1498        vfs_dq_init(dir);
1499        error = dir->i_op->create(dir, dentry, mode, nd);
1500        if (!error)
1501                fsnotify_create(dir, dentry);
1502        return error;
1503}
1504
1505int may_open(struct path *path, int acc_mode, int flag)
1506{
1507        struct dentry *dentry = path->dentry;
1508        struct inode *inode = dentry->d_inode;
1509        int error;
1510
1511        if (!inode)
1512                return -ENOENT;
1513
1514        switch (inode->i_mode & S_IFMT) {
1515        case S_IFLNK:
1516                return -ELOOP;
1517        case S_IFDIR:
1518                if (acc_mode & MAY_WRITE)
1519                        return -EISDIR;
1520                break;
1521        case S_IFBLK:
1522        case S_IFCHR:
1523                if (path->mnt->mnt_flags & MNT_NODEV)
1524                        return -EACCES;
1525                /*FALLTHRU*/
1526        case S_IFIFO:
1527        case S_IFSOCK:
1528                flag &= ~O_TRUNC;
1529                break;
1530        }
1531
1532        error = inode_permission(inode, acc_mode);
1533        if (error)
1534                return error;
1535
1536        error = ima_path_check(path,
1537                               acc_mode & (MAY_READ | MAY_WRITE | MAY_EXEC),
1538                               IMA_COUNT_UPDATE);
1539        if (error)
1540                return error;
1541        /*
1542         * An append-only file must be opened in append mode for writing.
1543         */
1544        if (IS_APPEND(inode)) {
1545                error = -EPERM;
1546                if  ((flag & FMODE_WRITE) && !(flag & O_APPEND))
1547                        goto err_out;
1548                if (flag & O_TRUNC)
1549                        goto err_out;
1550        }
1551
1552        /* O_NOATIME can only be set by the owner or superuser */
1553        if (flag & O_NOATIME)
1554                if (!is_owner_or_cap(inode)) {
1555                        error = -EPERM;
1556                        goto err_out;
1557                }
1558
1559        /*
1560         * Ensure there are no outstanding leases on the file.
1561         */
1562        error = break_lease(inode, flag);
1563        if (error)
1564                goto err_out;
1565
1566        if (flag & O_TRUNC) {
1567                error = get_write_access(inode);
1568                if (error)
1569                        goto err_out;
1570
1571                /*
1572                 * Refuse to truncate files with mandatory locks held on them.
1573                 */
1574                error = locks_verify_locked(inode);
1575                if (!error)
1576                        error = security_path_truncate(path, 0,
1577                                               ATTR_MTIME|ATTR_CTIME|ATTR_OPEN);
1578                if (!error) {
1579                        vfs_dq_init(inode);
1580
1581                        error = do_truncate(dentry, 0,
1582                                            ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
1583                                            NULL);
1584                }
1585                put_write_access(inode);
1586                if (error)
1587                        goto err_out;
1588        } else
1589                if (flag & FMODE_WRITE)
1590                        vfs_dq_init(inode);
1591
1592        return 0;
1593err_out:
1594        ima_counts_put(path, acc_mode ?
1595                       acc_mode & (MAY_READ | MAY_WRITE | MAY_EXEC) :
1596                       ACC_MODE(flag) & (MAY_READ | MAY_WRITE));
1597        return error;
1598}
1599
1600/*
1601 * Be careful about ever adding any more callers of this
1602 * function.  Its flags must be in the namei format, not
1603 * what get passed to sys_open().
1604 */
1605static int __open_namei_create(struct nameidata *nd, struct path *path,
1606                                int flag, int mode)
1607{
1608        int error;
1609        struct dentry *dir = nd->path.dentry;
1610
1611        if (!IS_POSIXACL(dir->d_inode))
1612                mode &= ~current_umask();
1613        error = security_path_mknod(&nd->path, path->dentry, mode, 0);
1614        if (error)
1615                goto out_unlock;
1616        error = vfs_create(dir->d_inode, path->dentry, mode, nd);
1617out_unlock:
1618        mutex_unlock(&dir->d_inode->i_mutex);
1619        dput(nd->path.dentry);
1620        nd->path.dentry = path->dentry;
1621        if (error)
1622                return error;
1623        /* Don't check for write permission, don't truncate */
1624        return may_open(&nd->path, 0, flag & ~O_TRUNC);
1625}
1626
1627/*
1628 * Note that while the flag value (low two bits) for sys_open means:
1629 *      00 - read-only
1630 *      01 - write-only
1631 *      10 - read-write
1632 *      11 - special
1633 * it is changed into
1634 *      00 - no permissions needed
1635 *      01 - read-permission
1636 *      10 - write-permission
1637 *      11 - read-write
1638 * for the internal routines (ie open_namei()/follow_link() etc)
1639 * This is more logical, and also allows the 00 "no perm needed"
1640 * to be used for symlinks (where the permissions are checked
1641 * later).
1642 *
1643*/
1644static inline int open_to_namei_flags(int flag)
1645{
1646        if ((flag+1) & O_ACCMODE)
1647                flag++;
1648        return flag;
1649}
1650
1651static int open_will_write_to_fs(int flag, struct inode *inode)
1652{
1653        /*
1654         * We'll never write to the fs underlying
1655         * a device file.
1656         */
1657        if (special_file(inode->i_mode))
1658                return 0;
1659        return (flag & O_TRUNC);
1660}
1661
1662/*
1663 * Note that the low bits of the passed in "open_flag"
1664 * are not the same as in the local variable "flag". See
1665 * open_to_namei_flags() for more details.
1666 */
1667struct file *do_filp_open(int dfd, const char *pathname,
1668                int open_flag, int mode, int acc_mode)
1669{
1670        struct file *filp;
1671        struct nameidata nd;
1672        int error;
1673        struct path path;
1674        struct dentry *dir;
1675        int count = 0;
1676        int will_write;
1677        int flag = open_to_namei_flags(open_flag);
1678
1679        if (!acc_mode)
1680                acc_mode = MAY_OPEN | ACC_MODE(flag);
1681
1682        /* O_TRUNC implies we need access checks for write permissions */
1683        if (flag & O_TRUNC)
1684                acc_mode |= MAY_WRITE;
1685
1686        /* Allow the LSM permission hook to distinguish append 
1687           access from general write access. */
1688        if (flag & O_APPEND)
1689                acc_mode |= MAY_APPEND;
1690
1691        /*
1692         * The simplest case - just a plain lookup.
1693         */
1694        if (!(flag & O_CREAT)) {
1695                error = path_lookup_open(dfd, pathname, lookup_flags(flag),
1696                                         &nd, flag);
1697                if (error)
1698                        return ERR_PTR(error);
1699                goto ok;
1700        }
1701
1702        /*
1703         * Create - we need to know the parent.
1704         */
1705        error = path_init(dfd, pathname, LOOKUP_PARENT, &nd);
1706        if (error)
1707                return ERR_PTR(error);
1708        error = path_walk(pathname, &nd);
1709        if (error) {
1710                if (nd.root.mnt)
1711                        path_put(&nd.root);
1712                return ERR_PTR(error);
1713        }
1714        if (unlikely(!audit_dummy_context()))
1715                audit_inode(pathname, nd.path.dentry);
1716
1717        /*
1718         * We have the parent and last component. First of all, check
1719         * that we are not asked to creat(2) an obvious directory - that
1720         * will not do.
1721         */
1722        error = -EISDIR;
1723        if (nd.last_type != LAST_NORM || nd.last.name[nd.last.len])
1724                goto exit_parent;
1725
1726        error = -ENFILE;
1727        filp = get_empty_filp();
1728        if (filp == NULL)
1729                goto exit_parent;
1730        nd.intent.open.file = filp;
1731        nd.intent.open.flags = flag;
1732        nd.intent.open.create_mode = mode;
1733        dir = nd.path.dentry;
1734        nd.flags &= ~LOOKUP_PARENT;
1735        nd.flags |= LOOKUP_CREATE | LOOKUP_OPEN;
1736        if (flag & O_EXCL)
1737                nd.flags |= LOOKUP_EXCL;
1738        mutex_lock(&dir->d_inode->i_mutex);
1739        path.dentry = lookup_hash(&nd);
1740        path.mnt = nd.path.mnt;
1741
1742do_last:
1743        error = PTR_ERR(path.dentry);
1744        if (IS_ERR(path.dentry)) {
1745                mutex_unlock(&dir->d_inode->i_mutex);
1746                goto exit;
1747        }
1748
1749        if (IS_ERR(nd.intent.open.file)) {
1750                error = PTR_ERR(nd.intent.open.file);
1751                goto exit_mutex_unlock;
1752        }
1753
1754        /* Negative dentry, just create the file */
1755        if (!path.dentry->d_inode) {
1756                /*
1757                 * This write is needed to ensure that a
1758                 * ro->rw transition does not occur between
1759                 * the time when the file is created and when
1760                 * a permanent write count is taken through
1761                 * the 'struct file' in nameidata_to_filp().
1762                 */
1763                error = mnt_want_write(nd.path.mnt);
1764                if (error)
1765                        goto exit_mutex_unlock;
1766                error = __open_namei_create(&nd, &path, flag, mode);
1767                if (error) {
1768                        mnt_drop_write(nd.path.mnt);
1769                        goto exit;
1770                }
1771                filp = nameidata_to_filp(&nd, open_flag);
1772                if (IS_ERR(filp))
1773                        ima_counts_put(&nd.path,
1774                                       acc_mode & (MAY_READ | MAY_WRITE |
1775                                                   MAY_EXEC));
1776                mnt_drop_write(nd.path.mnt);
1777                if (nd.root.mnt)
1778                        path_put(&nd.root);
1779                return filp;
1780        }
1781
1782        /*
1783         * It already exists.
1784         */
1785        mutex_unlock(&dir->d_inode->i_mutex);
1786        audit_inode(pathname, path.dentry);
1787
1788        error = -EEXIST;
1789        if (flag & O_EXCL)
1790                goto exit_dput;
1791
1792        if (__follow_mount(&path)) {
1793                error = -ELOOP;
1794                if (flag & O_NOFOLLOW)
1795                        goto exit_dput;
1796        }
1797
1798        error = -ENOENT;
1799        if (!path.dentry->d_inode)
1800                goto exit_dput;
1801        if (path.dentry->d_inode->i_op->follow_link)
1802                goto do_link;
1803
1804        path_to_nameidata(&path, &nd);
1805        error = -EISDIR;
1806        if (path.dentry->d_inode && S_ISDIR(path.dentry->d_inode->i_mode))
1807                goto exit;
1808ok:
1809        /*
1810         * Consider:
1811         * 1. may_open() truncates a file
1812         * 2. a rw->ro mount transition occurs
1813         * 3. nameidata_to_filp() fails due to
1814         *    the ro mount.
1815         * That would be inconsistent, and should
1816         * be avoided. Taking this mnt write here
1817         * ensures that (2) can not occur.
1818         */
1819        will_write = open_will_write_to_fs(flag, nd.path.dentry->d_inode);
1820        if (will_write) {
1821                error = mnt_want_write(nd.path.mnt);
1822                if (error)
1823                        goto exit;
1824        }
1825        error = may_open(&nd.path, acc_mode, flag);
1826        if (error) {
1827                if (will_write)
1828                        mnt_drop_write(nd.path.mnt);
1829                goto exit;
1830        }
1831        filp = nameidata_to_filp(&nd, open_flag);
1832        if (IS_ERR(filp))
1833                ima_counts_put(&nd.path,
1834                               acc_mode & (MAY_READ | MAY_WRITE | MAY_EXEC));
1835        /*
1836         * It is now safe to drop the mnt write
1837         * because the filp has had a write taken
1838         * on its behalf.
1839         */
1840        if (will_write)
1841                mnt_drop_write(nd.path.mnt);
1842        if (nd.root.mnt)
1843                path_put(&nd.root);
1844        return filp;
1845
1846exit_mutex_unlock:
1847        mutex_unlock(&dir->d_inode->i_mutex);
1848exit_dput:
1849        path_put_conditional(&path, &nd);
1850exit:
1851        if (!IS_ERR(nd.intent.open.file))
1852                release_open_intent(&nd);
1853exit_parent:
1854        if (nd.root.mnt)
1855                path_put(&nd.root);
1856        path_put(&nd.path);
1857        return ERR_PTR(error);
1858
1859do_link:
1860        error = -ELOOP;
1861        if (flag & O_NOFOLLOW)
1862                goto exit_dput;
1863        /*
1864         * This is subtle. Instead of calling do_follow_link() we do the
1865         * thing by hands. The reason is that this way we have zero link_count
1866         * and path_walk() (called from ->follow_link) honoring LOOKUP_PARENT.
1867         * After that we have the parent and last component, i.e.
1868         * we are in the same situation as after the first path_walk().
1869         * Well, almost - if the last component is normal we get its copy
1870         * stored in nd->last.name and we will have to putname() it when we
1871         * are done. Procfs-like symlinks just set LAST_BIND.
1872         */
1873        nd.flags |= LOOKUP_PARENT;
1874        error = security_inode_follow_link(path.dentry, &nd);
1875        if (error)
1876                goto exit_dput;
1877        error = __do_follow_link(&path, &nd);
1878        if (error) {
1879                /* Does someone understand code flow here? Or it is only
1880                 * me so stupid? Anathema to whoever designed this non-sense
1881                 * with "intent.open".
1882                 */
1883                release_open_intent(&nd);
1884                if (nd.root.mnt)
1885                        path_put(&nd.root);
1886                return ERR_PTR(error);
1887        }
1888        nd.flags &= ~LOOKUP_PARENT;
1889        if (nd.last_type == LAST_BIND)
1890                goto ok;
1891        error = -EISDIR;
1892        if (nd.last_type != LAST_NORM)
1893                goto exit;
1894        if (nd.last.name[nd.last.len]) {
1895                __putname(nd.last.name);
1896                goto exit;
1897        }
1898        error = -ELOOP;
1899        if (count++==32) {
1900                __putname(nd.last.name);
1901                goto exit;
1902        }
1903        dir = nd.path.dentry;
1904        mutex_lock(&dir->d_inode->i_mutex);
1905        path.dentry = lookup_hash(&nd);
1906        path.mnt = nd.path.mnt;
1907        __putname(nd.last.name);
1908        goto do_last;
1909}
1910
1911/**
1912 * filp_open - open file and return file pointer
1913 *
1914 * @filename:   path to open
1915 * @flags:      open flags as per the open(2) second argument
1916 * @mode:       mode for the new file if O_CREAT is set, else ignored
1917 *
1918 * This is the helper to open a file from kernelspace if you really
1919 * have to.  But in generally you should not do this, so please move
1920 * along, nothing to see here..
1921 */
1922struct file *filp_open(const char *filename, int flags, int mode)
1923{
1924        return do_filp_open(AT_FDCWD, filename, flags, mode, 0);
1925}
1926EXPORT_SYMBOL(filp_open);
1927
1928/**
1929 * lookup_create - lookup a dentry, creating it if it doesn't exist
1930 * @nd: nameidata info
1931 * @is_dir: directory flag
1932 *
1933 * Simple function to lookup and return a dentry and create it
1934 * if it doesn't exist.  Is SMP-safe.
1935 *
1936 * Returns with nd->path.dentry->d_inode->i_mutex locked.
1937 */
1938struct dentry *lookup_create(struct nameidata *nd, int is_dir)
1939{
1940        struct dentry *dentry = ERR_PTR(-EEXIST);
1941
1942        mutex_lock_nested(&nd->path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
1943        /*
1944         * Yucky last component or no last component at all?
1945         * (foo/., foo/.., /////)
1946         */
1947        if (nd->last_type != LAST_NORM)
1948                goto fail;
1949        nd->flags &= ~LOOKUP_PARENT;
1950        nd->flags |= LOOKUP_CREATE | LOOKUP_EXCL;
1951        nd->intent.open.flags = O_EXCL;
1952
1953        /*
1954         * Do the final lookup.
1955         */
1956        dentry = lookup_hash(nd);
1957        if (IS_ERR(dentry))
1958                goto fail;
1959
1960        if (dentry->d_inode)
1961                goto eexist;
1962        /*
1963         * Special case - lookup gave negative, but... we had foo/bar/
1964         * From the vfs_mknod() POV we just have a negative dentry -
1965         * all is fine. Let's be bastards - you had / on the end, you've
1966         * been asking for (non-existent) directory. -ENOENT for you.
1967         */
1968        if (unlikely(!is_dir && nd->last.name[nd->last.len])) {
1969                dput(dentry);
1970                dentry = ERR_PTR(-ENOENT);
1971        }
1972        return dentry;
1973eexist:
1974        dput(dentry);
1975        dentry = ERR_PTR(-EEXIST);
1976fail:
1977        return dentry;
1978}
1979EXPORT_SYMBOL_GPL(lookup_create);
1980
1981int vfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
1982{
1983        int error = may_create(dir, dentry);
1984
1985        if (error)
1986                return error;
1987
1988        if ((S_ISCHR(mode) || S_ISBLK(mode)) && !capable(CAP_MKNOD))
1989                return -EPERM;
1990
1991        if (!dir->i_op->mknod)
1992                return -EPERM;
1993
1994        error = devcgroup_inode_mknod(mode, dev);
1995        if (error)
1996                return error;
1997
1998        error = security_inode_mknod(dir, dentry, mode, dev);
1999        if (error)
2000                return error;
2001
2002        vfs_dq_init(dir);
2003        error = dir->i_op->mknod(dir, dentry, mode, dev);
2004        if (!error)
2005                fsnotify_create(dir, dentry);
2006        return error;
2007}
2008
2009static int may_mknod(mode_t mode)
2010{
2011        switch (mode & S_IFMT) {
2012        case S_IFREG:
2013        case S_IFCHR:
2014        case S_IFBLK:
2015        case S_IFIFO:
2016        case S_IFSOCK:
2017        case 0: /* zero mode translates to S_IFREG */
2018                return 0;
2019        case S_IFDIR:
2020                return -EPERM;
2021        default:
2022                return -EINVAL;
2023        }
2024}
2025
2026SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, int, mode,
2027                unsigned, dev)
2028{
2029        int error;
2030        char *tmp;
2031        struct dentry *dentry;
2032        struct nameidata nd;
2033
2034        if (S_ISDIR(mode))
2035                return -EPERM;
2036
2037        error = user_path_parent(dfd, filename, &nd, &tmp);
2038        if (error)
2039                return error;
2040
2041        dentry = lookup_create(&nd, 0);
2042        if (IS_ERR(dentry)) {
2043                error = PTR_ERR(dentry);
2044                goto out_unlock;
2045        }
2046        if (!IS_POSIXACL(nd.path.dentry->d_inode))
2047                mode &= ~current_umask();
2048        error = may_mknod(mode);
2049        if (error)
2050                goto out_dput;
2051        error = mnt_want_write(nd.path.mnt);
2052        if (error)
2053                goto out_dput;
2054        error = security_path_mknod(&nd.path, dentry, mode, dev);
2055        if (error)
2056                goto out_drop_write;
2057        switch (mode & S_IFMT) {
2058                case 0: case S_IFREG:
2059                        error = vfs_create(nd.path.dentry->d_inode,dentry,mode,&nd);
2060                        break;
2061                case S_IFCHR: case S_IFBLK:
2062                        error = vfs_mknod(nd.path.dentry->d_inode,dentry,mode,
2063                                        new_decode_dev(dev));
2064                        break;
2065                case S_IFIFO: case S_IFSOCK:
2066                        error = vfs_mknod(nd.path.dentry->d_inode,dentry,mode,0);
2067                        break;
2068        }
2069out_drop_write:
2070        mnt_drop_write(nd.path.mnt);
2071out_dput:
2072        dput(dentry);
2073out_unlock:
2074        mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
2075        path_put(&nd.path);
2076        putname(tmp);
2077
2078        return error;
2079}
2080
2081SYSCALL_DEFINE3(mknod, const char __user *, filename, int, mode, unsigned, dev)
2082{
2083        return sys_mknodat(AT_FDCWD, filename, mode, dev);
2084}
2085
2086int vfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
2087{
2088        int error = may_create(dir, dentry);
2089
2090        if (error)
2091                return error;
2092
2093        if (!dir->i_op->mkdir)
2094                return -EPERM;
2095
2096        mode &= (S_IRWXUGO|S_ISVTX);
2097        error = security_inode_mkdir(dir, dentry, mode);
2098        if (error)
2099                return error;
2100
2101        vfs_dq_init(dir);
2102        error = dir->i_op->mkdir(dir, dentry, mode);
2103        if (!error)
2104                fsnotify_mkdir(dir, dentry);
2105        return error;
2106}
2107
2108SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, int, mode)
2109{
2110        int error = 0;
2111        char * tmp;
2112        struct dentry *dentry;
2113        struct nameidata nd;
2114
2115        error = user_path_parent(dfd, pathname, &nd, &tmp);
2116        if (error)
2117                goto out_err;
2118
2119        dentry = lookup_create(&nd, 1);
2120        error = PTR_ERR(dentry);
2121        if (IS_ERR(dentry))
2122                goto out_unlock;
2123
2124        if (!IS_POSIXACL(nd.path.dentry->d_inode))
2125                mode &= ~current_umask();
2126        error = mnt_want_write(nd.path.mnt);
2127        if (error)
2128                goto out_dput;
2129        error = security_path_mkdir(&nd.path, dentry, mode);
2130        if (error)
2131                goto out_drop_write;
2132        error = vfs_mkdir(nd.path.dentry->d_inode, dentry, mode);
2133out_drop_write:
2134        mnt_drop_write(nd.path.mnt);
2135out_dput:
2136        dput(dentry);
2137out_unlock:
2138        mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
2139        path_put(&nd.path);
2140        putname(tmp);
2141out_err:
2142        return error;
2143}
2144
2145SYSCALL_DEFINE2(mkdir, const char __user *, pathname, int, mode)
2146{
2147        return sys_mkdirat(AT_FDCWD, pathname, mode);
2148}
2149
2150/*
2151 * We try to drop the dentry early: we should have
2152 * a usage count of 2 if we're the only user of this
2153 * dentry, and if that is true (possibly after pruning
2154 * the dcache), then we drop the dentry now.
2155 *
2156 * A low-level filesystem can, if it choses, legally
2157 * do a
2158 *
2159 *      if (!d_unhashed(dentry))
2160 *              return -EBUSY;
2161 *
2162 * if it cannot handle the case of removing a directory
2163 * that is still in use by something else..
2164 */
2165void dentry_unhash(struct dentry *dentry)
2166{
2167        dget(dentry);
2168        shrink_dcache_parent(dentry);
2169        spin_lock(&dcache_lock);
2170        spin_lock(&dentry->d_lock);
2171        if (atomic_read(&dentry->d_count) == 2)
2172                __d_drop(dentry);
2173        spin_unlock(&dentry->d_lock);
2174        spin_unlock(&dcache_lock);
2175}
2176
2177int vfs_rmdir(struct inode *dir, struct dentry *dentry)
2178{
2179        int error = may_delete(dir, dentry, 1);
2180
2181        if (error)
2182                return error;
2183
2184        if (!dir->i_op->rmdir)
2185                return -EPERM;
2186
2187        vfs_dq_init(dir);
2188
2189        mutex_lock(&dentry->d_inode->i_mutex);
2190        dentry_unhash(dentry);
2191        if (d_mountpoint(dentry))
2192                error = -EBUSY;
2193        else {
2194                error = security_inode_rmdir(dir, dentry);
2195                if (!error) {
2196                        error = dir->i_op->rmdir(dir, dentry);
2197                        if (!error)
2198                                dentry->d_inode->i_flags |= S_DEAD;
2199                }
2200        }
2201        mutex_unlock(&dentry->d_inode->i_mutex);
2202        if (!error) {
2203                d_delete(dentry);
2204        }
2205        dput(dentry);
2206
2207        return error;
2208}
2209
2210static long do_rmdir(int dfd, const char __user *pathname)
2211{
2212        int error = 0;
2213        char * name;
2214        struct dentry *dentry;
2215        struct nameidata nd;
2216
2217        error = user_path_parent(dfd, pathname, &nd, &name);
2218        if (error)
2219                return error;
2220
2221        switch(nd.last_type) {
2222        case LAST_DOTDOT:
2223                error = -ENOTEMPTY;
2224                goto exit1;
2225        case LAST_DOT:
2226                error = -EINVAL;
2227                goto exit1;
2228        case LAST_ROOT:
2229                error = -EBUSY;
2230                goto exit1;
2231        }
2232
2233        nd.flags &= ~LOOKUP_PARENT;
2234
2235        mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
2236        dentry = lookup_hash(&nd);
2237        error = PTR_ERR(dentry);
2238        if (IS_ERR(dentry))
2239                goto exit2;
2240        error = mnt_want_write(nd.path.mnt);
2241        if (error)
2242                goto exit3;
2243        error = security_path_rmdir(&nd.path, dentry);
2244        if (error)
2245                goto exit4;
2246        error = vfs_rmdir(nd.path.dentry->d_inode, dentry);
2247exit4:
2248        mnt_drop_write(nd.path.mnt);
2249exit3:
2250        dput(dentry);
2251exit2:
2252        mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
2253exit1:
2254        path_put(&nd.path);
2255        putname(name);
2256        return error;
2257}
2258
2259SYSCALL_DEFINE1(rmdir, const char __user *, pathname)
2260{
2261        return do_rmdir(AT_FDCWD, pathname);
2262}
2263
2264int vfs_unlink(struct inode *dir, struct dentry *dentry)
2265{
2266        int error = may_delete(dir, dentry, 0);
2267
2268        if (error)
2269                return error;
2270
2271        if (!dir->i_op->unlink)
2272                return -EPERM;
2273
2274        vfs_dq_init(dir);
2275
2276        mutex_lock(&dentry->d_inode->i_mutex);
2277        if (d_mountpoint(dentry))
2278                error = -EBUSY;
2279        else {
2280                error = security_inode_unlink(dir, dentry);
2281                if (!error)
2282                        error = dir->i_op->unlink(dir, dentry);
2283        }
2284        mutex_unlock(&dentry->d_inode->i_mutex);
2285
2286        /* We don't d_delete() NFS sillyrenamed files--they still exist. */
2287        if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) {
2288                fsnotify_link_count(dentry->d_inode);
2289                d_delete(dentry);
2290        }
2291
2292        return error;
2293}
2294
2295/*
2296 * Make sure that the actual truncation of the file will occur outside its
2297 * directory's i_mutex.  Truncate can take a long time if there is a lot of
2298 * writeout happening, and we don't want to prevent access to the directory
2299 * while waiting on the I/O.
2300 */
2301static long do_unlinkat(int dfd, const char __user *pathname)
2302{
2303        int error;
2304        char *name;
2305        struct dentry *dentry;
2306        struct nameidata nd;
2307        struct inode *inode = NULL;
2308
2309        error = user_path_parent(dfd, pathname, &nd, &name);
2310        if (error)
2311                return error;
2312
2313        error = -EISDIR;
2314        if (nd.last_type != LAST_NORM)
2315                goto exit1;
2316
2317        nd.flags &= ~LOOKUP_PARENT;
2318
2319        mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
2320        dentry = lookup_hash(&nd);
2321        error = PTR_ERR(dentry);
2322        if (!IS_ERR(dentry)) {
2323                /* Why not before? Because we want correct error value */
2324                if (nd.last.name[nd.last.len])
2325                        goto slashes;
2326                inode = dentry->d_inode;
2327                if (inode)
2328                        atomic_inc(&inode->i_count);
2329                error = mnt_want_write(nd.path.mnt);
2330                if (error)
2331                        goto exit2;
2332                error = security_path_unlink(&nd.path, dentry);
2333                if (error)
2334                        goto exit3;
2335                error = vfs_unlink(nd.path.dentry->d_inode, dentry);
2336exit3:
2337                mnt_drop_write(nd.path.mnt);
2338        exit2:
2339                dput(dentry);
2340        }
2341        mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
2342        if (inode)
2343                iput(inode);    /* truncate the inode here */
2344exit1:
2345        path_put(&nd.path);
2346        putname(name);
2347        return error;
2348
2349slashes:
2350        error = !dentry->d_inode ? -ENOENT :
2351                S_ISDIR(dentry->d_inode->i_mode) ? -EISDIR : -ENOTDIR;
2352        goto exit2;
2353}
2354
2355SYSCALL_DEFINE3(unlinkat, int, dfd, const char __user *, pathname, int, flag)
2356{
2357        if ((flag & ~AT_REMOVEDIR) != 0)
2358                return -EINVAL;
2359
2360        if (flag & AT_REMOVEDIR)
2361                return do_rmdir(dfd, pathname);
2362
2363        return do_unlinkat(dfd, pathname);
2364}
2365
2366SYSCALL_DEFINE1(unlink, const char __user *, pathname)
2367{
2368        return do_unlinkat(AT_FDCWD, pathname);
2369}
2370
2371int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname)
2372{
2373        int error = may_create(dir, dentry);
2374
2375        if (error)
2376                return error;
2377
2378        if (!dir->i_op->symlink)
2379                return -EPERM;
2380
2381        error = security_inode_symlink(dir, dentry, oldname);
2382        if (error)
2383                return error;
2384
2385        vfs_dq_init(dir);
2386        error = dir->i_op->symlink(dir, dentry, oldname);
2387        if (!error)
2388                fsnotify_create(dir, dentry);
2389        return error;
2390}
2391
2392SYSCALL_DEFINE3(symlinkat, const char __user *, oldname,
2393                int, newdfd, const char __user *, newname)
2394{
2395        int error;
2396        char *from;
2397        char *to;
2398        struct dentry *dentry;
2399        struct nameidata nd;
2400
2401        from = getname(oldname);
2402        if (IS_ERR(from))
2403                return PTR_ERR(from);
2404
2405        error = user_path_parent(newdfd, newname, &nd, &to);
2406        if (error)
2407                goto out_putname;
2408
2409        dentry = lookup_create(&nd, 0);
2410        error = PTR_ERR(dentry);
2411        if (IS_ERR(dentry))
2412                goto out_unlock;
2413
2414        error = mnt_want_write(nd.path.mnt);
2415        if (error)
2416                goto out_dput;
2417        error = security_path_symlink(&nd.path, dentry, from);
2418        if (error)
2419                goto out_drop_write;
2420        error = vfs_symlink(nd.path.dentry->d_inode, dentry, from);
2421out_drop_write:
2422        mnt_drop_write(nd.path.mnt);
2423out_dput:
2424        dput(dentry);
2425out_unlock:
2426        mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
2427        path_put(&nd.path);
2428        putname(to);
2429out_putname:
2430        putname(from);
2431        return error;
2432}
2433
2434SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname)
2435{
2436        return sys_symlinkat(oldname, AT_FDCWD, newname);
2437}
2438
2439int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry)
2440{
2441        struct inode *inode = old_dentry->d_inode;
2442        int error;
2443
2444        if (!inode)
2445                return -ENOENT;
2446
2447        error = may_create(dir, new_dentry);
2448        if (error)
2449                return error;
2450
2451        if (dir->i_sb != inode->i_sb)
2452                return -EXDEV;
2453
2454        /*
2455         * A link to an append-only or immutable file cannot be created.
2456         */
2457        if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
2458                return -EPERM;
2459        if (!dir->i_op->link)
2460                return -EPERM;
2461        if (S_ISDIR(inode->i_mode))
2462                return -EPERM;
2463
2464        error = security_inode_link(old_dentry, dir, new_dentry);
2465        if (error)
2466                return error;
2467
2468        mutex_lock(&inode->i_mutex);
2469        vfs_dq_init(dir);
2470        error = dir->i_op->link(old_dentry, dir, new_dentry);
2471        mutex_unlock(&inode->i_mutex);
2472        if (!error)
2473                fsnotify_link(dir, inode, new_dentry);
2474        return error;
2475}
2476
2477/*
2478 * Hardlinks are often used in delicate situations.  We avoid
2479 * security-related surprises by not following symlinks on the
2480 * newname.  --KAB
2481 *
2482 * We don't follow them on the oldname either to be compatible
2483 * with linux 2.0, and to avoid hard-linking to directories
2484 * and other special files.  --ADM
2485 */
2486SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
2487                int, newdfd, const char __user *, newname, int, flags)
2488{
2489        struct dentry *new_dentry;
2490        struct nameidata nd;
2491        struct path old_path;
2492        int error;
2493        char *to;
2494
2495        if ((flags & ~AT_SYMLINK_FOLLOW) != 0)
2496                return -EINVAL;
2497
2498        error = user_path_at(olddfd, oldname,
2499                             flags & AT_SYMLINK_FOLLOW ? LOOKUP_FOLLOW : 0,
2500                             &old_path);
2501        if (error)
2502                return error;
2503
2504        error = user_path_parent(newdfd, newname, &nd, &to);
2505        if (error)
2506                goto out;
2507        error = -EXDEV;
2508        if (old_path.mnt != nd.path.mnt)
2509                goto out_release;
2510        new_dentry = lookup_create(&nd, 0);
2511        error = PTR_ERR(new_dentry);
2512        if (IS_ERR(new_dentry))
2513                goto out_unlock;
2514        error = mnt_want_write(nd.path.mnt);
2515        if (error)
2516                goto out_dput;
2517        error = security_path_link(old_path.dentry, &nd.path, new_dentry);
2518        if (error)
2519                goto out_drop_write;
2520        error = vfs_link(old_path.dentry, nd.path.dentry->d_inode, new_dentry);
2521out_drop_write:
2522        mnt_drop_write(nd.path.mnt);
2523out_dput:
2524        dput(new_dentry);
2525out_unlock:
2526        mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
2527out_release:
2528        path_put(&nd.path);
2529        putname(to);
2530out:
2531        path_put(&old_path);
2532
2533        return error;
2534}
2535
2536SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, newname)
2537{
2538        return sys_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
2539}
2540
2541/*
2542 * The worst of all namespace operations - renaming directory. "Perverted"
2543 * doesn't even start to describe it. Somebody in UCB had a heck of a trip...
2544 * Problems:
2545 *      a) we can get into loop creation. Check is done in is_subdir().
2546 *      b) race potential - two innocent renames can create a loop together.
2547 *         That's where 4.4 screws up. Current fix: serialization on
2548 *         sb->s_vfs_rename_mutex. We might be more accurate, but that's another
2549 *         story.
2550 *      c) we have to lock _three_ objects - parents and victim (if it exists).
2551 *         And that - after we got ->i_mutex on parents (until then we don't know
2552 *         whether the target exists).  Solution: try to be smart with locking
2553 *         order for inodes.  We rely on the fact that tree topology may change
2554 *         only under ->s_vfs_rename_mutex _and_ that parent of the object we
2555 *         move will be locked.  Thus we can rank directories by the tree
2556 *         (ancestors first) and rank all non-directories after them.
2557 *         That works since everybody except rename does "lock parent, lookup,
2558 *         lock child" and rename is under ->s_vfs_rename_mutex.
2559 *         HOWEVER, it relies on the assumption that any object with ->lookup()
2560 *         has no more than 1 dentry.  If "hybrid" objects will ever appear,
2561 *         we'd better make sure that there's no link(2) for them.
2562 *      d) some filesystems don't support opened-but-unlinked directories,
2563 *         either because of layout or because they are not ready to deal with
2564 *         all cases correctly. The latter will be fixed (taking this sort of
2565 *         stuff into VFS), but the former is not going away. Solution: the same
2566 *         trick as in rmdir().
2567 *      e) conversion from fhandle to dentry may come in the wrong moment - when
2568 *         we are removing the target. Solution: we will have to grab ->i_mutex
2569 *         in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on
2570 *         ->i_mutex on parents, which works but leads to some truely excessive
2571 *         locking].
2572 */
2573static int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry,
2574                          struct inode *new_dir, struct dentry *new_dentry)
2575{
2576        int error = 0;
2577        struct inode *target;
2578
2579        /*
2580         * If we are going to change the parent - check write permissions,
2581         * we'll need to flip '..'.
2582         */
2583        if (new_dir != old_dir) {
2584                error = inode_permission(old_dentry->d_inode, MAY_WRITE);
2585                if (error)
2586                        return error;
2587        }
2588
2589        error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry);
2590        if (error)
2591                return error;
2592
2593        target = new_dentry->d_inode;
2594        if (target) {
2595                mutex_lock(&target->i_mutex);
2596                dentry_unhash(new_dentry);
2597        }
2598        if (d_mountpoint(old_dentry)||d_mountpoint(new_dentry))
2599                error = -EBUSY;
2600        else 
2601                error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry);
2602        if (target) {
2603                if (!error)
2604                        target->i_flags |= S_DEAD;
2605                mutex_unlock(&target->i_mutex);
2606                if (d_unhashed(new_dentry))
2607                        d_rehash(new_dentry);
2608                dput(new_dentry);
2609        }
2610        if (!error)
2611                if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE))
2612                        d_move(old_dentry,new_dentry);
2613        return error;
2614}
2615
2616static int vfs_rename_other(struct inode *old_dir, struct dentry *old_dentry,
2617                            struct inode *new_dir, struct dentry *new_dentry)
2618{
2619        struct inode *target;
2620        int error;
2621
2622        error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry);
2623        if (error)
2624                return error;
2625
2626        dget(new_dentry);
2627        target = new_dentry->d_inode;
2628        if (target)
2629                mutex_lock(&target->i_mutex);
2630        if (d_mountpoint(old_dentry)||d_mountpoint(new_dentry))
2631                error = -EBUSY;
2632        else
2633                error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry);
2634        if (!error) {
2635                if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE))
2636                        d_move(old_dentry, new_dentry);
2637        }
2638        if (target)
2639                mutex_unlock(&target->i_mutex);
2640        dput(new_dentry);
2641        return error;
2642}
2643
2644int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2645               struct inode *new_dir, struct dentry *new_dentry)
2646{
2647        int error;
2648        int is_dir = S_ISDIR(old_dentry->d_inode->i_mode);
2649        const char *old_name;
2650
2651        if (old_dentry->d_inode == new_dentry->d_inode)
2652                return 0;
2653 
2654        error = may_delete(old_dir, old_dentry, is_dir);
2655        if (error)
2656                return error;
2657
2658        if (!new_dentry->d_inode)
2659                error = may_create(new_dir, new_dentry);
2660        else
2661                error = may_delete(new_dir, new_dentry, is_dir);
2662        if (error)
2663                return error;
2664
2665        if (!old_dir->i_op->rename)
2666                return -EPERM;
2667
2668        vfs_dq_init(old_dir);
2669        vfs_dq_init(new_dir);
2670
2671        old_name = fsnotify_oldname_init(old_dentry->d_name.name);
2672
2673        if (is_dir)
2674                error = vfs_rename_dir(old_dir,old_dentry,new_dir,new_dentry);
2675        else
2676                error = vfs_rename_other(old_dir,old_dentry,new_dir,new_dentry);
2677        if (!error) {
2678                const char *new_name = old_dentry->d_name.name;
2679                fsnotify_move(old_dir, new_dir, old_name, new_name, is_dir,
2680                              new_dentry->d_inode, old_dentry);
2681        }
2682        fsnotify_oldname_free(old_name);
2683
2684        return error;
2685}
2686
2687SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,
2688                int, newdfd, const char __user *, newname)
2689{
2690        struct dentry *old_dir, *new_dir;
2691        struct dentry *old_dentry, *new_dentry;
2692        struct dentry *trap;
2693        struct nameidata oldnd, newnd;
2694        char *from;
2695        char *to;
2696        int error;
2697
2698        error = user_path_parent(olddfd, oldname, &oldnd, &from);
2699        if (error)
2700                goto exit;
2701
2702        error = user_path_parent(newdfd, newname, &newnd, &to);
2703        if (error)
2704                goto exit1;
2705
2706        error = -EXDEV;
2707        if (oldnd.path.mnt != newnd.path.mnt)
2708                goto exit2;
2709
2710        old_dir = oldnd.path.dentry;
2711        error = -EBUSY;
2712        if (oldnd.last_type != LAST_NORM)
2713                goto exit2;
2714
2715        new_dir = newnd.path.dentry;
2716        if (newnd.last_type != LAST_NORM)
2717                goto exit2;
2718
2719        oldnd.flags &= ~LOOKUP_PARENT;
2720        newnd.flags &= ~LOOKUP_PARENT;
2721        newnd.flags |= LOOKUP_RENAME_TARGET;
2722
2723        trap = lock_rename(new_dir, old_dir);
2724
2725        old_dentry = lookup_hash(&oldnd);
2726        error = PTR_ERR(old_dentry);
2727        if (IS_ERR(old_dentry))
2728                goto exit3;
2729        /* source must exist */
2730        error = -ENOENT;
2731        if (!old_dentry->d_inode)
2732                goto exit4;
2733        /* unless the source is a directory trailing slashes give -ENOTDIR */
2734        if (!S_ISDIR(old_dentry->d_inode->i_mode)) {
2735                error = -ENOTDIR;
2736                if (oldnd.last.name[oldnd.last.len])
2737                        goto exit4;
2738                if (newnd.last.name[newnd.last.len])
2739                        goto exit4;
2740        }
2741        /* source should not be ancestor of target */
2742        error = -EINVAL;
2743        if (old_dentry == trap)
2744                goto exit4;
2745        new_dentry = lookup_hash(&newnd);
2746        error = PTR_ERR(new_dentry);
2747        if (IS_ERR(new_dentry))
2748                goto exit4;
2749        /* target should not be an ancestor of source */
2750        error = -ENOTEMPTY;
2751        if (new_dentry == trap)
2752                goto exit5;
2753
2754        error = mnt_want_write(oldnd.path.mnt);
2755        if (error)
2756                goto exit5;
2757        error = security_path_rename(&oldnd.path, old_dentry,
2758                                     &newnd.path, new_dentry);
2759        if (error)
2760                goto exit6;
2761        error = vfs_rename(old_dir->d_inode, old_dentry,
2762                                   new_dir->d_inode, new_dentry);
2763exit6:
2764        mnt_drop_write(oldnd.path.mnt);
2765exit5:
2766        dput(new_dentry);
2767exit4:
2768        dput(old_dentry);
2769exit3:
2770        unlock_rename(new_dir, old_dir);
2771exit2:
2772        path_put(&newnd.path);
2773        putname(to);
2774exit1:
2775        path_put(&oldnd.path);
2776        putname(from);
2777exit:
2778        return error;
2779}
2780
2781SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newname)
2782{
2783        return sys_renameat(AT_FDCWD, oldname, AT_FDCWD, newname);
2784}
2785
2786int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen, const char *link)
2787{
2788        int len;
2789
2790        len = PTR_ERR(link);
2791        if (IS_ERR(link))
2792                goto out;
2793
2794        len = strlen(link);
2795        if (len > (unsigned) buflen)
2796                len = buflen;
2797        if (copy_to_user(buffer, link, len))
2798                len = -EFAULT;
2799out:
2800        return len;
2801}
2802
2803/*
2804 * A helper for ->readlink().  This should be used *ONLY* for symlinks that
2805 * have ->follow_link() touching nd only in nd_set_link().  Using (or not
2806 * using) it for any given inode is up to filesystem.
2807 */
2808int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen)
2809{
2810        struct nameidata nd;
2811        void *cookie;
2812        int res;
2813
2814        nd.depth = 0;
2815        cookie = dentry->d_inode->i_op->follow_link(dentry, &nd);
2816        if (IS_ERR(cookie))
2817                return PTR_ERR(cookie);
2818
2819        res = vfs_readlink(dentry, buffer, buflen, nd_get_link(&nd));
2820        if (dentry->d_inode->i_op->put_link)
2821                dentry->d_inode->i_op->put_link(dentry, &nd, cookie);
2822        return res;
2823}
2824
2825int vfs_follow_link(struct nameidata *nd, const char *link)
2826{
2827        return __vfs_follow_link(nd, link);
2828}
2829
2830/* get the link contents into pagecache */
2831static char *page_getlink(struct dentry * dentry, struct page **ppage)
2832{
2833        char *kaddr;
2834        struct page *page;
2835        struct address_space *mapping = dentry->d_inode->i_mapping;
2836        page = read_mapping_page(mapping, 0, NULL);
2837        if (IS_ERR(page))
2838                return (char*)page;
2839        *ppage = page;
2840        kaddr = kmap(page);
2841        nd_terminate_link(kaddr, dentry->d_inode->i_size, PAGE_SIZE - 1);
2842        return kaddr;
2843}
2844
2845int page_readlink(struct dentry *dentry, char __user *buffer, int buflen)
2846{
2847        struct page *page = NULL;
2848        char *s = page_getlink(dentry, &page);
2849        int res = vfs_readlink(dentry,buffer,buflen,s);
2850        if (page) {
2851                kunmap(page);
2852                page_cache_release(page);
2853        }
2854        return res;
2855}
2856
2857void *page_follow_link_light(struct dentry *dentry, struct nameidata *nd)
2858{
2859        struct page *page = NULL;
2860        nd_set_link(nd, page_getlink(dentry, &page));
2861        return page;
2862}
2863
2864void page_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
2865{
2866        struct page *page = cookie;
2867
2868        if (page) {
2869                kunmap(page);
2870                page_cache_release(page);
2871        }
2872}
2873
2874/*
2875 * The nofs argument instructs pagecache_write_begin to pass AOP_FLAG_NOFS
2876 */
2877int __page_symlink(struct inode *inode, const char *symname, int len, int nofs)
2878{
2879        struct address_space *mapping = inode->i_mapping;
2880        struct page *page;
2881        void *fsdata;
2882        int err;
2883        char *kaddr;
2884        unsigned int flags = AOP_FLAG_UNINTERRUPTIBLE;
2885        if (nofs)
2886                flags |= AOP_FLAG_NOFS;
2887
2888retry:
2889        err = pagecache_write_begin(NULL, mapping, 0, len-1,
2890                                flags, &page, &fsdata);
2891        if (err)
2892                goto fail;
2893
2894        kaddr = kmap_atomic(page, KM_USER0);
2895        memcpy(kaddr, symname, len-1);
2896        kunmap_atomic(kaddr, KM_USER0);
2897
2898        err = pagecache_write_end(NULL, mapping, 0, len-1, len-1,
2899                                                        page, fsdata);
2900        if (err < 0)
2901                goto fail;
2902        if (err < len-1)
2903                goto retry;
2904
2905        mark_inode_dirty(inode);
2906        return 0;
2907fail:
2908        return err;
2909}
2910
2911int page_symlink(struct inode *inode, const char *symname, int len)
2912{
2913        return __page_symlink(inode, symname, len,
2914                        !(mapping_gfp_mask(inode->i_mapping) & __GFP_FS));
2915}
2916
2917const struct inode_operations page_symlink_inode_operations = {
2918        .readlink       = generic_readlink,
2919        .follow_link    = page_follow_link_light,
2920        .put_link       = page_put_link,
2921};
2922
2923EXPORT_SYMBOL(user_path_at);
2924EXPORT_SYMBOL(follow_down);
2925EXPORT_SYMBOL(follow_up);
2926EXPORT_SYMBOL(get_write_access); /* binfmt_aout */
2927EXPORT_SYMBOL(getname);
2928EXPORT_SYMBOL(lock_rename);
2929EXPORT_SYMBOL(lookup_one_len);
2930EXPORT_SYMBOL(page_follow_link_light);
2931EXPORT_SYMBOL(page_put_link);
2932EXPORT_SYMBOL(page_readlink);
2933EXPORT_SYMBOL(__page_symlink);
2934EXPORT_SYMBOL(page_symlink);
2935EXPORT_SYMBOL(page_symlink_inode_operations);
2936EXPORT_SYMBOL(path_lookup);
2937EXPORT_SYMBOL(kern_path);
2938EXPORT_SYMBOL(vfs_path_lookup);
2939EXPORT_SYMBOL(inode_permission);
2940EXPORT_SYMBOL(file_permission);
2941EXPORT_SYMBOL(unlock_rename);
2942EXPORT_SYMBOL(vfs_create);
2943EXPORT_SYMBOL(vfs_follow_link);
2944EXPORT_SYMBOL(vfs_link);
2945EXPORT_SYMBOL(vfs_mkdir);
2946EXPORT_SYMBOL(vfs_mknod);
2947EXPORT_SYMBOL(generic_permission);
2948EXPORT_SYMBOL(vfs_readlink);
2949EXPORT_SYMBOL(vfs_rename);
2950EXPORT_SYMBOL(vfs_rmdir);
2951EXPORT_SYMBOL(vfs_symlink);
2952EXPORT_SYMBOL(vfs_unlink);
2953EXPORT_SYMBOL(dentry_unhash);
2954EXPORT_SYMBOL(generic_readlink);
2955
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.