]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - fs/xfs/xfs_vnodeops.c
[POWERPC] mpic: Fix use of uninitialized variable
[mv-sheeva.git] / fs / xfs / xfs_vnodeops.c
index 637fc1a2bb44f51c49e78517194329a782517eed..70702a60b4bbd908669a6d6e46dfb864db1e8241 100644 (file)
@@ -1305,7 +1305,7 @@ xfs_inactive_attrs(
        int             error;
        xfs_mount_t     *mp;
 
-       ASSERT(ismrlocked(&ip->i_iolock, MR_UPDATE));
+       ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL));
        tp = *tpp;
        mp = ip->i_mount;
        ASSERT(ip->i_d.di_forkoff != 0);
@@ -1776,7 +1776,7 @@ xfs_create(
         * It is locked (and joined to the transaction).
         */
 
-       ASSERT(ismrlocked (&ip->i_lock, MR_UPDATE));
+       ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
 
        /*
         * Now we join the directory inode to the transaction.  We do not do it
@@ -1982,7 +1982,7 @@ again:
 
                ips[0] = ip;
                ips[1] = dp;
-               xfs_lock_inodes(ips, 2, 0, XFS_ILOCK_EXCL);
+               xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL);
        }
        /* else  e_inum == dp->i_ino */
        /*     This can happen if we're asked to lock /x/..
@@ -2030,7 +2030,6 @@ void
 xfs_lock_inodes(
        xfs_inode_t     **ips,
        int             inodes,
-       int             first_locked,
        uint            lock_mode)
 {
        int             attempts = 0, i, j, try_lock;
@@ -2038,13 +2037,8 @@ xfs_lock_inodes(
 
        ASSERT(ips && (inodes >= 2)); /* we need at least two */
 
-       if (first_locked) {
-               try_lock = 1;
-               i = 1;
-       } else {
-               try_lock = 0;
-               i = 0;
-       }
+       try_lock = 0;
+       i = 0;
 
 again:
        for (; i < inodes; i++) {
@@ -2168,29 +2162,14 @@ xfs_remove(
                        return error;
        }
 
-       /*
-        * We need to get a reference to ip before we get our log
-        * reservation. The reason for this is that we cannot call
-        * xfs_iget for an inode for which we do not have a reference
-        * once we've acquired a log reservation. This is because the
-        * inode we are trying to get might be in xfs_inactive going
-        * for a log reservation. Since we'll have to wait for the
-        * inactive code to complete before returning from xfs_iget,
-        * we need to make sure that we don't have log space reserved
-        * when we call xfs_iget.  Instead we get an unlocked reference
-        * to the inode before getting our log reservation.
-        */
-       IHOLD(ip);
-
        xfs_itrace_entry(ip);
        xfs_itrace_ref(ip);
 
        error = XFS_QM_DQATTACH(mp, dp, 0);
-       if (!error && dp != ip)
+       if (!error)
                error = XFS_QM_DQATTACH(mp, ip, 0);
        if (error) {
                REMOVE_DEBUG_TRACE(__LINE__);
-               IRELE(ip);
                goto std_return;
        }
 
@@ -2217,7 +2196,6 @@ xfs_remove(
                ASSERT(error != ENOSPC);
                REMOVE_DEBUG_TRACE(__LINE__);
                xfs_trans_cancel(tp, 0);
-               IRELE(ip);
                return error;
        }
 
@@ -2225,7 +2203,6 @@ xfs_remove(
        if (error) {
                REMOVE_DEBUG_TRACE(__LINE__);
                xfs_trans_cancel(tp, cancel_flags);
-               IRELE(ip);
                goto std_return;
        }
 
@@ -2233,16 +2210,11 @@ xfs_remove(
         * At this point, we've gotten both the directory and the entry
         * inodes locked.
         */
+       IHOLD(ip);
        xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
-       if (dp != ip) {
-               /*
-                * Increment vnode ref count only in this case since
-                * there's an extra vnode reference in the case where
-                * dp == ip.
-                */
-               IHOLD(dp);
-               xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
-       }
+
+       IHOLD(dp);
+       xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
 
        /*
         * Entry must exist since we did a lookup in xfs_lock_dir_and_entry.
@@ -2271,12 +2243,6 @@ xfs_remove(
         */
        link_zero = (ip)->i_d.di_nlink==0;
 
-       /*
-        * Take an extra ref on the inode so that it doesn't
-        * go to xfs_inactive() from within the commit.
-        */
-       IHOLD(ip);
-
        /*
         * If this is a synchronous mount, make sure that the
         * remove transaction goes to disk before returning to
@@ -2293,10 +2259,8 @@ xfs_remove(
        }
 
        error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
-       if (error) {
-               IRELE(ip);
+       if (error)
                goto std_return;
-       }
 
        /*
         * If we are using filestreams, kill the stream association.
@@ -2308,7 +2272,6 @@ xfs_remove(
                xfs_filestream_deassociate(ip);
 
        xfs_itrace_exit(ip);
-       IRELE(ip);
 
 /*     Fall through to std_return with error = 0 */
  std_return:
@@ -2337,8 +2300,6 @@ xfs_remove(
        cancel_flags |= XFS_TRANS_ABORT;
        xfs_trans_cancel(tp, cancel_flags);
 
-       IRELE(ip);
-
        goto std_return;
 }
 
@@ -2406,7 +2367,7 @@ xfs_link(
                ips[1] = sip;
        }
 
-       xfs_lock_inodes(ips, 2, 0, XFS_ILOCK_EXCL);
+       xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL);
 
        /*
         * Increment vnode ref counts since xfs_trans_commit &
@@ -2710,7 +2671,6 @@ xfs_rmdir(
        struct xfs_name         *name,
        xfs_inode_t             *cdp)
 {
-       bhv_vnode_t             *dir_vp = XFS_ITOV(dp);
        xfs_mount_t             *mp = dp->i_mount;
        xfs_trans_t             *tp;
        int                     error;
@@ -2735,28 +2695,13 @@ xfs_rmdir(
                        return XFS_ERROR(error);
        }
 
-       /*
-        * We need to get a reference to cdp before we get our log
-        * reservation.  The reason for this is that we cannot call
-        * xfs_iget for an inode for which we do not have a reference
-        * once we've acquired a log reservation.  This is because the
-        * inode we are trying to get might be in xfs_inactive going
-        * for a log reservation.  Since we'll have to wait for the
-        * inactive code to complete before returning from xfs_iget,
-        * we need to make sure that we don't have log space reserved
-        * when we call xfs_iget.  Instead we get an unlocked reference
-        * to the inode before getting our log reservation.
-        */
-       IHOLD(cdp);
-
        /*
         * Get the dquots for the inodes.
         */
        error = XFS_QM_DQATTACH(mp, dp, 0);
-       if (!error && dp != cdp)
+       if (!error)
                error = XFS_QM_DQATTACH(mp, cdp, 0);
        if (error) {
-               IRELE(cdp);
                REMOVE_DEBUG_TRACE(__LINE__);
                goto std_return;
        }
@@ -2783,7 +2728,6 @@ xfs_rmdir(
        if (error) {
                ASSERT(error != ENOSPC);
                cancel_flags = 0;
-               IRELE(cdp);
                goto error_return;
        }
        XFS_BMAP_INIT(&free_list, &first_block);
@@ -2797,21 +2741,13 @@ xfs_rmdir(
        error = xfs_lock_dir_and_entry(dp, cdp);
        if (error) {
                xfs_trans_cancel(tp, cancel_flags);
-               IRELE(cdp);
                goto std_return;
        }
 
+       IHOLD(dp);
        xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
-       if (dp != cdp) {
-               /*
-                * Only increment the parent directory vnode count if
-                * we didn't bump it in looking up cdp.  The only time
-                * we don't bump it is when we're looking up ".".
-                */
-               VN_HOLD(dir_vp);
-       }
 
-       xfs_itrace_ref(cdp);
+       IHOLD(cdp);
        xfs_trans_ijoin(tp, cdp, XFS_ILOCK_EXCL);
 
        ASSERT(cdp->i_d.di_nlink >= 2);
@@ -2864,12 +2800,6 @@ xfs_rmdir(
        /* Determine these before committing transaction */
        last_cdp_link = (cdp)->i_d.di_nlink==0;
 
-       /*
-        * Take an extra ref on the child vnode so that it
-        * does not go to xfs_inactive() from within the commit.
-        */
-       IHOLD(cdp);
-
        /*
         * If this is a synchronous mount, make sure that the
         * rmdir transaction goes to disk before returning to
@@ -2884,19 +2814,15 @@ xfs_rmdir(
                xfs_bmap_cancel(&free_list);
                xfs_trans_cancel(tp, (XFS_TRANS_RELEASE_LOG_RES |
                                 XFS_TRANS_ABORT));
-               IRELE(cdp);
                goto std_return;
        }
 
        error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
        if (error) {
-               IRELE(cdp);
                goto std_return;
        }
 
 
-       IRELE(cdp);
-
        /* Fall through to std_return with error = 0 or the errno
         * from xfs_trans_commit. */
  std_return: