diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h
index c741016..62f109e 100644
--- a/fs/gfs2/incore.h
+++ b/fs/gfs2/incore.h
@@ -532,7 +532,6 @@
 	struct inode *sd_qc_inode;
 	struct inode *sd_rindex;
 	struct inode *sd_quota_inode;
-	struct inode *sd_root_dir;
 
 	/* Inum stuff */
 
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
index ea9e996..cd1de61 100644
--- a/fs/gfs2/inode.c
+++ b/fs/gfs2/inode.c
@@ -288,7 +288,7 @@
  * Returns: errno
  */
 
-static int inode_create(struct gfs2_glock *i_gl, struct gfs2_inum *inum,
+static int inode_create(struct gfs2_glock *i_gl, const struct gfs2_inum *inum,
 			struct gfs2_glock *io_gl, unsigned int io_state,
 			struct gfs2_inode **ipp)
 {
@@ -354,8 +354,8 @@
  * Returns: errno
  */
 
-int gfs2_inode_get(struct gfs2_glock *i_gl, struct gfs2_inum *inum, int create,
-		   struct gfs2_inode **ipp)
+int gfs2_inode_get(struct gfs2_glock *i_gl, const struct gfs2_inum *inum,
+		   int create, struct gfs2_inode **ipp)
 {
 	struct gfs2_sbd *sdp = i_gl->gl_sbd;
 	struct gfs2_glock *io_gl;
@@ -718,6 +718,7 @@
 int gfs2_lookupi(struct inode *dir, struct qstr *name, int is_root,
 		 struct inode **inodep)
 {
+	struct super_block *sb = dir->i_sb;
 	struct gfs2_inode *ipp;
 	struct gfs2_inode *dip = dir->u.generic_ip;
 	struct gfs2_sbd *sdp = dip->i_sbd;
@@ -733,7 +734,7 @@
 		return -ENAMETOOLONG;
 
 	if (gfs2_filecmp(name, ".", 1) ||
-	    (gfs2_filecmp(name, "..", 2) && dir == sdp->sd_root_dir)) {
+	    (gfs2_filecmp(name, "..", 2) && dir == sb->s_root->d_inode)) {
 		gfs2_inode_hold(dip);
 		ipp = dip;
 		goto done;
@@ -1466,8 +1467,8 @@
 
 int gfs2_ok_to_move(struct gfs2_inode *this, struct gfs2_inode *to)
 {
-	struct gfs2_sbd *sdp = this->i_sbd;
 	struct inode *dir = to->i_vnode;
+	struct super_block *sb = dir->i_sb;
 	struct inode *tmp;
 	struct qstr dotdot;
 	int error = 0;
@@ -1483,7 +1484,7 @@
 			error = -EINVAL;
 			break;
 		}
-		if (dir == sdp->sd_root_dir) {
+		if (dir == sb->s_root->d_inode) {
 			error = 0;
 			break;
 		}
diff --git a/fs/gfs2/inode.h b/fs/gfs2/inode.h
index 069f0e21..c3fa6cf 100644
--- a/fs/gfs2/inode.h
+++ b/fs/gfs2/inode.h
@@ -35,7 +35,7 @@
 int gfs2_inode_refresh(struct gfs2_inode *ip);
 
 int gfs2_inode_get(struct gfs2_glock *i_gl,
-		   struct gfs2_inum *inum, int create,
+		   const struct gfs2_inum *inum, int create,
 		   struct gfs2_inode **ipp);
 void gfs2_inode_hold(struct gfs2_inode *ip);
 void gfs2_inode_put(struct gfs2_inode *ip);
diff --git a/fs/gfs2/ops_export.c b/fs/gfs2/ops_export.c
index d149584..a346943 100644
--- a/fs/gfs2/ops_export.c
+++ b/fs/gfs2/ops_export.c
@@ -64,8 +64,8 @@
 			  int connectable)
 {
 	struct inode *inode = dentry->d_inode;
+	struct super_block *sb = inode->i_sb;
 	struct gfs2_inode *ip = inode->u.generic_ip;
-	struct gfs2_sbd *sdp = ip->i_sbd;
 
 	if (*len < 4 || (connectable && *len < 8))
 		return 255;
@@ -80,7 +80,7 @@
 	fh[3] = cpu_to_be32(fh[3]);
 	*len = 4;
 
-	if (!connectable || ip == sdp->sd_root_dir->u.generic_ip)
+	if (!connectable || inode == sb->s_root->d_inode)
 		return *len;
 
 	spin_lock(&dentry->d_lock);
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
index 4c4115f..c3b830b 100644
--- a/fs/gfs2/ops_fstype.c
+++ b/fs/gfs2/ops_fstype.c
@@ -280,27 +280,30 @@
 	return error;
 }
 
-int gfs2_lookup_root(struct gfs2_sbd *sdp)
+static struct inode *gfs2_lookup_root(struct gfs2_sbd *sdp,
+				      const struct gfs2_inum *inum)
 {
         int error;
 	struct gfs2_glock *gl;
 	struct gfs2_inode *ip;
+	struct inode *inode;
 
-	error = gfs2_glock_get(sdp, sdp->sd_sb.sb_root_dir.no_addr,
+	error = gfs2_glock_get(sdp, inum->no_addr,
                                &gfs2_inode_glops, CREATE, &gl);
         if (!error) {
-               	error = gfs2_inode_get(gl, &sdp->sd_sb.sb_root_dir,
+               	error = gfs2_inode_get(gl, inum,
 				       CREATE, &ip);
 		if (!error) {
 			if (!error) 
 				gfs2_inode_min_init(ip, DT_DIR);
-			sdp->sd_root_dir = gfs2_ip2v(ip);
+			inode = gfs2_ip2v(ip);
 			gfs2_inode_put(ip);
+			return inode;
 		}
                 gfs2_glock_put(gl);
         }
 
-        return error;
+        return ERR_PTR(error);
 }
 
 static int init_sb(struct gfs2_sbd *sdp, int silent, int undo)
@@ -311,7 +314,6 @@
 	int error = 0;
 
 	if (undo) {
-		iput(sdp->sd_master_dir);
 		return 0;
 	}
 	
@@ -351,35 +353,24 @@
 	sb_set_blocksize(sb, sdp->sd_sb.sb_bsize);
 
 	/* Get the root inode */
-	error = gfs2_lookup_root(sdp);
-	if (error) {
+	inode = gfs2_lookup_root(sdp, &sdp->sd_sb.sb_root_dir);
+	if (IS_ERR(inode)) {
+		error = PTR_ERR(inode);
 		fs_err(sdp, "can't read in root inode: %d\n", error);
 		goto out;
 	}
 
-	/* Get the root inode/dentry */
-	inode = sdp->sd_root_dir;
-	if (!inode) {
-		fs_err(sdp, "can't get root inode\n");
-		error = -ENOMEM;
-		goto out_rooti;
-	}
-
-	igrab(inode);
 	sb->s_root = d_alloc_root(inode);
 	if (!sb->s_root) {
 		fs_err(sdp, "can't get root dentry\n");
 		error = -ENOMEM;
-		goto out_rooti;
+		iput(inode);
 	}
 
 out:
 	gfs2_glock_dq_uninit(&sb_gh);
 
 	return error;
-out_rooti:
-	iput(sdp->sd_root_dir);
-	goto out;
 }
 
 static int init_journal(struct gfs2_sbd *sdp, int undo)
@@ -529,15 +520,18 @@
 {
 	int error = 0;
 	struct gfs2_inode *ip;
+	struct inode *inode;
 
 	if (undo)
 		goto fail_qinode;
 
-	error = gfs2_lookup_master_dir(sdp);
-	if (error) {
+	inode = gfs2_lookup_root(sdp, &sdp->sd_sb.sb_master_dir);
+	if (IS_ERR(inode)) {
+		error = PTR_ERR(inode);
 		fs_err(sdp, "can't read in master directory: %d\n", error);
 		goto fail;
 	}
+	sdp->sd_master_dir = inode;
 
 	error = init_journal(sdp, undo);
 	if (error)
diff --git a/fs/gfs2/ops_super.c b/fs/gfs2/ops_super.c
index 10f70ee..f7349c0 100644
--- a/fs/gfs2/ops_super.c
+++ b/fs/gfs2/ops_super.c
@@ -103,7 +103,6 @@
 	iput(sdp->sd_statfs_inode);
 	iput(sdp->sd_rindex);
 	iput(sdp->sd_quota_inode);
-	iput(sdp->sd_root_dir);
 
 	gfs2_glock_put(sdp->sd_rename_gl);
 	gfs2_glock_put(sdp->sd_trans_gl);
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
index 9ccf0b9..fff5a96 100644
--- a/fs/gfs2/super.c
+++ b/fs/gfs2/super.c
@@ -447,25 +447,6 @@
 	return error;
 }
 
-int gfs2_lookup_master_dir(struct gfs2_sbd *sdp)
-{
-	struct inode *inode = NULL;
-	struct gfs2_glock *gl;
-	int error;
-
-	error = gfs2_glock_get(sdp,
-			       sdp->sd_sb.sb_master_dir.no_addr,
-			       &gfs2_inode_glops, CREATE, &gl);
-	if (!error) {
-		error = gfs2_lookup_simple(sdp->sd_root_dir, ".gfs2_admin",
-					   &inode);
-		sdp->sd_master_dir = inode;
-		gfs2_glock_put(gl);
-	}
-
-	return error;
-}
-
 /**
  * gfs2_make_fs_rw - Turn a Read-Only FS into a Read-Write one
  * @sdp: the filesystem
diff --git a/fs/gfs2/super.h b/fs/gfs2/super.h
index cc1a3df..6abb7b5 100644
--- a/fs/gfs2/super.h
+++ b/fs/gfs2/super.h
@@ -33,7 +33,6 @@
 struct gfs2_jdesc *gfs2_jdesc_find_dirty(struct gfs2_sbd *sdp);
 int gfs2_jdesc_check(struct gfs2_jdesc *jd);
 
-int gfs2_lookup_master_dir(struct gfs2_sbd *sdp);
 int gfs2_lookup_in_master_dir(struct gfs2_sbd *sdp, char *filename,
 			      struct gfs2_inode **ipp);
 
