static void scan_glock(struct gfs2_glock *gl)
{
if (gfs2_glmutex_trylock(gl)) {
- if (gl->gl_ops == &gfs2_inode_glops) {
- struct gfs2_inode *ip = gl->gl_object;
- if (ip == NULL) {
- struct gfs2_sbd *sdp = gl->gl_sbd;
- gfs2_assert_withdraw(sdp, gl->gl_state == LM_ST_UNLOCKED);
- goto out_schedule;
- }
- }
+ if (gl->gl_ops == &gfs2_inode_glops)
+ goto out;
if (queue_empty(gl, &gl->gl_holders) &&
gl->gl_state != LM_ST_UNLOCKED &&
demote_ok(gl))
goto out_schedule;
-
+out:
gfs2_glmutex_unlock(gl);
}
uint32_t nlink;
int error;
+ BUG_ON(ip->i_di.di_nlink != ip->i_inode.i_nlink);
nlink = ip->i_di.di_nlink + diff;
/* If we are reducing the nlink count, but the new value ends up being
ip->i_di.di_nlink = nlink;
ip->i_di.di_ctime = get_seconds();
+ ip->i_inode.i_nlink = nlink;
gfs2_trans_add_bh(ip->i_gl, dibh, 1);
gfs2_dinode_out(&ip->i_di, dibh->b_data);
gfs2_holder_uninit(ghs + 1);
if (!error) {
+ atomic_inc(&inode->i_count);
d_instantiate(dentry, inode);
mark_inode_dirty(inode);
}
struct buffer_head *bh;
unsigned int start, end;
- for (bh = head, start = 0;
- bh != head || !start;
+ for (bh = head, start = 0; bh != head || !start;
bh = bh->b_this_page, start = end) {
end = start + bsize;
if (end <= from || start >= to)