[GFS2] Clean up inode number handling
This patch cleans up the inode number handling code. The main difference is that instead of looking up the inodes using a struct gfs2_inum_host we now use just the no_addr member of this structure. The tests relating to no_formal_ino can then be done by the calling code. This has advantages in that we want to do different things in different code paths if the no_formal_ino doesn't match. In the NFS patch we want to return -ESTALE, but in the ->lookup() path, its a bug in the fs if the no_formal_ino doesn't match and thus we can withdraw in this case. In order to later fix bz #201012, we need to be able to look up an inode without knowing no_formal_ino, as the only information that is known to us is the on-disk location of the inode in question. This patch will also help us to fix bz #236099 at a later date by cleaning up a lot of the code in that area. There are no user visible changes as a result of this patch and there are no changes to the on-disk format either. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
@@ -157,7 +157,7 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
|
||||
if (error)
|
||||
goto out_gunlock;
|
||||
|
||||
error = gfs2_dir_search(dir, &dentry->d_name, NULL, NULL);
|
||||
error = gfs2_dir_check(dir, &dentry->d_name, NULL);
|
||||
switch (error) {
|
||||
case -ENOENT:
|
||||
break;
|
||||
@@ -217,8 +217,7 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
|
||||
goto out_ipres;
|
||||
}
|
||||
|
||||
error = gfs2_dir_add(dir, &dentry->d_name, &ip->i_num,
|
||||
IF2DT(inode->i_mode));
|
||||
error = gfs2_dir_add(dir, &dentry->d_name, ip, IF2DT(inode->i_mode));
|
||||
if (error)
|
||||
goto out_end_trans;
|
||||
|
||||
@@ -275,7 +274,7 @@ static int gfs2_unlink(struct inode *dir, struct dentry *dentry)
|
||||
gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
|
||||
gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1);
|
||||
|
||||
rgd = gfs2_blk2rgrpd(sdp, ip->i_num.no_addr);
|
||||
rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr);
|
||||
gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + 2);
|
||||
|
||||
|
||||
@@ -420,7 +419,7 @@ static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode)
|
||||
dent = (struct gfs2_dirent *)((char*)dent + GFS2_DIRENT_SIZE(1));
|
||||
gfs2_qstr2dirent(&str, dibh->b_size - GFS2_DIRENT_SIZE(1) - sizeof(struct gfs2_dinode), dent);
|
||||
|
||||
gfs2_inum_out(&dip->i_num, &dent->de_inum);
|
||||
gfs2_inum_out(dip, dent);
|
||||
dent->de_type = cpu_to_be16(DT_DIR);
|
||||
|
||||
gfs2_dinode_out(ip, di);
|
||||
@@ -472,7 +471,7 @@ static int gfs2_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
|
||||
gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1);
|
||||
|
||||
rgd = gfs2_blk2rgrpd(sdp, ip->i_num.no_addr);
|
||||
rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr);
|
||||
gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + 2);
|
||||
|
||||
error = gfs2_glock_nq_m(3, ghs);
|
||||
@@ -614,7 +613,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
|
||||
* this is the case of the target file already existing
|
||||
* so we unlink before doing the rename
|
||||
*/
|
||||
nrgd = gfs2_blk2rgrpd(sdp, nip->i_num.no_addr);
|
||||
nrgd = gfs2_blk2rgrpd(sdp, nip->i_no_addr);
|
||||
if (nrgd)
|
||||
gfs2_holder_init(nrgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh++);
|
||||
}
|
||||
@@ -653,7 +652,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
|
||||
if (error)
|
||||
goto out_gunlock;
|
||||
|
||||
error = gfs2_dir_search(ndir, &ndentry->d_name, NULL, NULL);
|
||||
error = gfs2_dir_check(ndir, &ndentry->d_name, NULL);
|
||||
switch (error) {
|
||||
case -ENOENT:
|
||||
error = 0;
|
||||
@@ -750,7 +749,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
|
||||
if (error)
|
||||
goto out_end_trans;
|
||||
|
||||
error = gfs2_dir_mvino(ip, &name, &ndip->i_num, DT_DIR);
|
||||
error = gfs2_dir_mvino(ip, &name, nip, DT_DIR);
|
||||
if (error)
|
||||
goto out_end_trans;
|
||||
} else {
|
||||
@@ -768,8 +767,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
|
||||
if (error)
|
||||
goto out_end_trans;
|
||||
|
||||
error = gfs2_dir_add(ndir, &ndentry->d_name, &ip->i_num,
|
||||
IF2DT(ip->i_inode.i_mode));
|
||||
error = gfs2_dir_add(ndir, &ndentry->d_name, ip, IF2DT(ip->i_inode.i_mode));
|
||||
if (error)
|
||||
goto out_end_trans;
|
||||
|
||||
|
Reference in New Issue
Block a user