]> err.no Git - linux-2.6/blobdiff - fs/gfs2/inode.c
Merge branch 'linux-2.6' into for-2.6.22
[linux-2.6] / fs / gfs2 / inode.c
index 88fcfb4f5c4ddc163d7c6c8e093e9090c248f7d3..df0b8b3018b934e72a30830b5a2936498c969be9 100644 (file)
@@ -43,7 +43,8 @@ static int iget_test(struct inode *inode, void *opaque)
        struct gfs2_inode *ip = GFS2_I(inode);
        struct gfs2_inum_host *inum = opaque;
 
-       if (ip->i_num.no_addr == inum->no_addr)
+       if (ip->i_num.no_addr == inum->no_addr &&
+           inode->i_private != NULL)
                return 1;
 
        return 0;
@@ -61,13 +62,13 @@ static int iget_set(struct inode *inode, void *opaque)
 
 struct inode *gfs2_ilookup(struct super_block *sb, struct gfs2_inum_host *inum)
 {
-       return ilookup5(sb, (unsigned long)inum->no_formal_ino,
+       return ilookup5(sb, (unsigned long)inum->no_addr,
                        iget_test, inum);
 }
 
 static struct inode *gfs2_iget(struct super_block *sb, struct gfs2_inum_host *inum)
 {
-       return iget5_locked(sb, (unsigned long)inum->no_formal_ino,
+       return iget5_locked(sb, (unsigned long)inum->no_addr,
                     iget_test, iget_set, inum);
 }
 
@@ -280,50 +281,6 @@ out:
        return error;
 }
 
-static int gfs2_change_nlink_i(struct gfs2_inode *ip)
-{
-       struct gfs2_sbd *sdp = ip->i_inode.i_sb->s_fs_info;
-       struct gfs2_inode *rindex = GFS2_I(sdp->sd_rindex);
-       struct gfs2_glock *ri_gl = rindex->i_gl;
-       struct gfs2_rgrpd *rgd;
-       struct gfs2_holder ri_gh, rg_gh;
-       int existing, error;
-
-       /* if we come from rename path, we could have the lock already */
-       existing = gfs2_glock_is_locked_by_me(ri_gl);
-       if (!existing) {
-               error = gfs2_rindex_hold(sdp, &ri_gh);
-               if (error)
-                       goto out;
-       }
-
-       /* find the matching rgd */
-       error = -EIO;
-       rgd = gfs2_blk2rgrpd(sdp, ip->i_num.no_addr);
-       if (!rgd)
-               goto out_norgrp;
-
-       /*
-        * Eventually we may want to move rgd(s) to a linked list
-        * and piggyback the free logic into one of gfs2 daemons
-        * to gain some performance.
-        */
-       if (!rgd->rd_gl || !gfs2_glock_is_locked_by_me(rgd->rd_gl)) {
-               error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &rg_gh);
-               if (error)
-                       goto out_norgrp;
-
-               gfs2_unlink_di(&ip->i_inode); /* mark inode unlinked */
-               gfs2_glock_dq_uninit(&rg_gh);
-       }
-
-out_norgrp:
-       if (!existing)
-               gfs2_glock_dq_uninit(&ri_gh);
-out:
-       return error;
-}
-
 /**
  * gfs2_change_nlink - Change nlink count on inode
  * @ip: The GFS2 inode
@@ -365,7 +322,7 @@ int gfs2_change_nlink(struct gfs2_inode *ip, int diff)
        mark_inode_dirty(&ip->i_inode);
 
        if (ip->i_inode.i_nlink == 0)
-               error = gfs2_change_nlink_i(ip);
+               gfs2_unlink_di(&ip->i_inode); /* mark inode unlinked */
 
        return error;
 }