Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 46289
b: refs/heads/master
c: 03dc6a5
h: refs/heads/master
i:
  46287: b17c812
v: v3
  • Loading branch information
Adrian Bunk authored and Steven Whitehouse committed Feb 5, 2007
1 parent 57cd497 commit 2a6d902
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 46 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 70831465646b1fef9bf7b51b64409276411e9746
refs/heads/master: 03dc6a538e42bcc8d5dfabcee208b639db85a80c
88 changes: 44 additions & 44 deletions trunk/fs/gfs2/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,50 @@ int gfs2_dinode_dealloc(struct gfs2_inode *ip)
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
Expand Down Expand Up @@ -326,50 +370,6 @@ int gfs2_change_nlink(struct gfs2_inode *ip, int diff)
return error;
}

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;
}

struct inode *gfs2_lookup_simple(struct inode *dip, const char *name)
{
struct qstr qstr;
Expand Down
1 change: 0 additions & 1 deletion trunk/fs/gfs2/inode.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ int gfs2_inode_refresh(struct gfs2_inode *ip);

int gfs2_dinode_dealloc(struct gfs2_inode *inode);
int gfs2_change_nlink(struct gfs2_inode *ip, int diff);
int gfs2_change_nlink_i(struct gfs2_inode *ip);
struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
int is_root, struct nameidata *nd);
struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name,
Expand Down

0 comments on commit 2a6d902

Please sign in to comment.