]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/xfs/xfs_vnodeops.c
Merge branch 'master' into upstream
[karo-tx-linux.git] / fs / xfs / xfs_vnodeops.c
index f3c2deeed0a30cfa065e9c3a783c11a73ffb4533..23cfa58377283b073f09503734581ea4df80edf0 100644 (file)
@@ -25,7 +25,6 @@
 #include "xfs_trans.h"
 #include "xfs_sb.h"
 #include "xfs_ag.h"
-#include "xfs_dir.h"
 #include "xfs_dir2.h"
 #include "xfs_dmapi.h"
 #include "xfs_mount.h"
 #include "xfs_bmap_btree.h"
 #include "xfs_alloc_btree.h"
 #include "xfs_ialloc_btree.h"
-#include "xfs_dir_sf.h"
 #include "xfs_dir2_sf.h"
 #include "xfs_attr_sf.h"
 #include "xfs_dinode.h"
 #include "xfs_inode.h"
 #include "xfs_inode_item.h"
-#include "xfs_dir_leaf.h"
 #include "xfs_itable.h"
 #include "xfs_btree.h"
 #include "xfs_ialloc.h"
@@ -117,7 +114,7 @@ xfs_close(
 STATIC int
 xfs_getattr(
        bhv_desc_t      *bdp,
-       vattr_t         *vap,
+       bhv_vattr_t     *vap,
        int             flags,
        cred_t          *credp)
 {
@@ -250,7 +247,7 @@ xfs_getattr(
 int
 xfs_setattr(
        bhv_desc_t              *bdp,
-       vattr_t                 *vap,
+       bhv_vattr_t             *vap,
        int                     flags,
        cred_t                  *credp)
 {
@@ -1815,7 +1812,7 @@ xfs_inactive(
 STATIC int
 xfs_lookup(
        bhv_desc_t              *dir_bdp,
-       vname_t                 *dentry,
+       bhv_vname_t             *dentry,
        bhv_vnode_t             **vpp,
        int                     flags,
        bhv_vnode_t             *rdir,
@@ -1852,8 +1849,8 @@ xfs_lookup(
 STATIC int
 xfs_create(
        bhv_desc_t              *dir_bdp,
-       vname_t                 *dentry,
-       vattr_t                 *vap,
+       bhv_vname_t             *dentry,
+       bhv_vattr_t             *vap,
        bhv_vnode_t             **vpp,
        cred_t                  *credp)
 {
@@ -1958,8 +1955,7 @@ xfs_create(
        if (error)
                goto error_return;
 
-       if (resblks == 0 &&
-           (error = XFS_DIR_CANENTER(mp, tp, dp, name, namelen)))
+       if (resblks == 0 && (error = xfs_dir_canenter(tp, dp, name, namelen)))
                goto error_return;
        rdev = (vap->va_mask & XFS_AT_RDEV) ? vap->va_rdev : 0;
        error = xfs_dir_ialloc(&tp, dp, vap->va_mode, 1,
@@ -1990,9 +1986,9 @@ xfs_create(
        xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
        dp_joined_to_trans = B_TRUE;
 
-       error = XFS_DIR_CREATENAME(mp, tp, dp, name, namelen, ip->i_ino,
-               &first_block, &free_list,
-               resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0);
+       error = xfs_dir_createname(tp, dp, name, namelen, ip->i_ino,
+                                       &first_block, &free_list, resblks ?
+                                       resblks - XFS_IALLOC_SPACE_RES(mp) : 0);
        if (error) {
                ASSERT(error != ENOSPC);
                goto abort_return;
@@ -2127,7 +2123,7 @@ int xfs_rm_attempts;
 STATIC int
 xfs_lock_dir_and_entry(
        xfs_inode_t     *dp,
-       vname_t         *dentry,
+       bhv_vname_t     *dentry,
        xfs_inode_t     *ip)    /* inode of entry 'name' */
 {
        int             attempts;
@@ -2341,7 +2337,7 @@ int remove_which_error_return = 0;
 STATIC int
 xfs_remove(
        bhv_desc_t              *dir_bdp,
-       vname_t                 *dentry,
+       bhv_vname_t             *dentry,
        cred_t                  *credp)
 {
        bhv_vnode_t             *dir_vp;
@@ -2468,8 +2464,8 @@ xfs_remove(
         * Entry must exist since we did a lookup in xfs_lock_dir_and_entry.
         */
        XFS_BMAP_INIT(&free_list, &first_block);
-       error = XFS_DIR_REMOVENAME(mp, tp, dp, name, namelen, ip->i_ino,
-               &first_block, &free_list, 0);
+       error = xfs_dir_removename(tp, dp, name, namelen, ip->i_ino,
+                                       &first_block, &free_list, 0);
        if (error) {
                ASSERT(error != ENOENT);
                REMOVE_DEBUG_TRACE(__LINE__);
@@ -2585,7 +2581,7 @@ STATIC int
 xfs_link(
        bhv_desc_t              *target_dir_bdp,
        bhv_vnode_t             *src_vp,
-       vname_t                 *dentry,
+       bhv_vname_t             *dentry,
        cred_t                  *credp)
 {
        xfs_inode_t             *tdp, *sip;
@@ -2607,8 +2603,7 @@ xfs_link(
        vn_trace_entry(src_vp, __FUNCTION__, (inst_t *)__return_address);
 
        target_namelen = VNAMELEN(dentry);
-       if (VN_ISDIR(src_vp))
-               return XFS_ERROR(EPERM);
+       ASSERT(!VN_ISDIR(src_vp));
 
        sip = xfs_vtoi(src_vp);
        tdp = XFS_BHVTOI(target_dir_bdp);
@@ -2688,13 +2683,12 @@ xfs_link(
        }
 
        if (resblks == 0 &&
-           (error = XFS_DIR_CANENTER(mp, tp, tdp, target_name,
-                       target_namelen)))
+           (error = xfs_dir_canenter(tp, tdp, target_name, target_namelen)))
                goto error_return;
 
        XFS_BMAP_INIT(&free_list, &first_block);
 
-       error = XFS_DIR_CREATENAME(mp, tp, tdp, target_name, target_namelen,
+       error = xfs_dir_createname(tp, tdp, target_name, target_namelen,
                                   sip->i_ino, &first_block, &free_list,
                                   resblks);
        if (error)
@@ -2704,9 +2698,8 @@ xfs_link(
        xfs_trans_log_inode(tp, tdp, XFS_ILOG_CORE);
 
        error = xfs_bumplink(tp, sip);
-       if (error) {
+       if (error)
                goto abort_return;
-       }
 
        /*
         * If this is a synchronous mount, make sure that the
@@ -2724,9 +2717,8 @@ xfs_link(
        }
 
        error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES, NULL);
-       if (error) {
+       if (error)
                goto std_return;
-       }
 
        /* Fall through to std_return with error = 0. */
 std_return:
@@ -2747,6 +2739,8 @@ std_return:
        xfs_trans_cancel(tp, cancel_flags);
        goto std_return;
 }
+
+
 /*
  * xfs_mkdir
  *
@@ -2754,8 +2748,8 @@ std_return:
 STATIC int
 xfs_mkdir(
        bhv_desc_t              *dir_bdp,
-       vname_t                 *dentry,
-       vattr_t                 *vap,
+       bhv_vname_t             *dentry,
+       bhv_vattr_t             *vap,
        bhv_vnode_t             **vpp,
        cred_t                  *credp)
 {
@@ -2860,7 +2854,7 @@ xfs_mkdir(
                goto error_return;
 
        if (resblks == 0 &&
-           (error = XFS_DIR_CANENTER(mp, tp, dp, dir_name, dir_namelen)))
+           (error = xfs_dir_canenter(tp, dp, dir_name, dir_namelen)))
                goto error_return;
        /*
         * create the directory inode.
@@ -2887,9 +2881,9 @@ xfs_mkdir(
 
        XFS_BMAP_INIT(&free_list, &first_block);
 
-       error = XFS_DIR_CREATENAME(mp, tp, dp, dir_name, dir_namelen,
-                       cdp->i_ino, &first_block, &free_list,
-                       resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0);
+       error = xfs_dir_createname(tp, dp, dir_name, dir_namelen, cdp->i_ino,
+                                  &first_block, &free_list, resblks ?
+                                  resblks - XFS_IALLOC_SPACE_RES(mp) : 0);
        if (error) {
                ASSERT(error != ENOSPC);
                goto error1;
@@ -2903,16 +2897,14 @@ xfs_mkdir(
         */
        dp->i_gen++;
 
-       error = XFS_DIR_INIT(mp, tp, cdp, dp);
-       if (error) {
+       error = xfs_dir_init(tp, cdp, dp);
+       if (error)
                goto error2;
-       }
 
        cdp->i_gen = 1;
        error = xfs_bumplink(tp, dp);
-       if (error) {
+       if (error)
                goto error2;
-       }
 
        cvp = XFS_ITOV(cdp);
 
@@ -2989,7 +2981,7 @@ std_return:
 STATIC int
 xfs_rmdir(
        bhv_desc_t              *dir_bdp,
-       vname_t                 *dentry,
+       bhv_vname_t             *dentry,
        cred_t                  *credp)
 {
        char                    *name = VNAME(dentry);
@@ -3121,16 +3113,15 @@ xfs_rmdir(
                error = XFS_ERROR(ENOTEMPTY);
                goto error_return;
        }
-       if (!XFS_DIR_ISEMPTY(mp, cdp)) {
+       if (!xfs_dir_isempty(cdp)) {
                error = XFS_ERROR(ENOTEMPTY);
                goto error_return;
        }
 
-       error = XFS_DIR_REMOVENAME(mp, tp, dp, name, namelen, cdp->i_ino,
-               &first_block, &free_list, resblks);
-       if (error) {
+       error = xfs_dir_removename(tp, dp, name, namelen, cdp->i_ino,
+                                       &first_block, &free_list, resblks);
+       if (error)
                goto error1;
-       }
 
        xfs_ichgtime(dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
 
@@ -3229,8 +3220,6 @@ xfs_rmdir(
 
 
 /*
- * xfs_readdir
- *
  * Read dp's entries starting at uiop->uio_offset and translate them into
  * bufsize bytes worth of struct dirents starting at bufbase.
  */
@@ -3250,26 +3239,21 @@ xfs_readdir(
                                               (inst_t *)__return_address);
        dp = XFS_BHVTOI(dir_bdp);
 
-       if (XFS_FORCED_SHUTDOWN(dp->i_mount)) {
+       if (XFS_FORCED_SHUTDOWN(dp->i_mount))
                return XFS_ERROR(EIO);
-       }
 
        lock_mode = xfs_ilock_map_shared(dp);
-       error = XFS_DIR_GETDENTS(dp->i_mount, tp, dp, uiop, eofp);
+       error = xfs_dir_getdents(tp, dp, uiop, eofp);
        xfs_iunlock_map_shared(dp, lock_mode);
        return error;
 }
 
 
-/*
- * xfs_symlink
- *
- */
 STATIC int
 xfs_symlink(
        bhv_desc_t              *dir_bdp,
-       vname_t                 *dentry,
-       vattr_t                 *vap,
+       bhv_vname_t             *dentry,
+       bhv_vattr_t             *vap,
        char                    *target_path,
        bhv_vnode_t             **vpp,
        cred_t                  *credp)
@@ -3328,7 +3312,7 @@ xfs_symlink(
                int len, total;
                char *path;
 
-               for(total = 0, path = target_path; total < pathlen;) {
+               for (total = 0, path = target_path; total < pathlen;) {
                        /*
                         * Skip any slashes.
                         */
@@ -3422,7 +3406,7 @@ xfs_symlink(
         * Check for ability to enter directory entry, if no space reserved.
         */
        if (resblks == 0 &&
-           (error = XFS_DIR_CANENTER(mp, tp, dp, link_name, link_namelen)))
+           (error = xfs_dir_canenter(tp, dp, link_name, link_namelen)))
                goto error_return;
        /*
         * Initialize the bmap freelist prior to calling either
@@ -3509,11 +3493,10 @@ xfs_symlink(
        /*
         * Create the directory entry for the symlink.
         */
-       error = XFS_DIR_CREATENAME(mp, tp, dp, link_name, link_namelen,
-                       ip->i_ino, &first_block, &free_list, resblks);
-       if (error) {
+       error = xfs_dir_createname(tp, dp, link_name, link_namelen, ip->i_ino,
+                                  &first_block, &free_list, resblks);
+       if (error)
                goto error1;
-       }
        xfs_ichgtime(dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
        xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE);
 
@@ -3626,7 +3609,7 @@ xfs_fid2(
 int
 xfs_rwlock(
        bhv_desc_t      *bdp,
-       vrwlock_t       locktype)
+       bhv_vrwlock_t   locktype)
 {
        xfs_inode_t     *ip;
        bhv_vnode_t     *vp;
@@ -3657,7 +3640,7 @@ xfs_rwlock(
 void
 xfs_rwunlock(
        bhv_desc_t      *bdp,
-       vrwlock_t       locktype)
+       bhv_vrwlock_t   locktype)
 {
        xfs_inode_t     *ip;
        bhv_vnode_t     *vp;
@@ -4502,7 +4485,7 @@ xfs_change_file_space(
        xfs_off_t       startoffset;
        xfs_off_t       llen;
        xfs_trans_t     *tp;
-       vattr_t         va;
+       bhv_vattr_t     va;
        bhv_vnode_t     *vp;
 
        vp = BHV_TO_VNODE(bdp);