Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 38641
b: refs/heads/master
c: e90deff
h: refs/heads/master
i:
  38639: 75ef684
v: v3
  • Loading branch information
Steven Whitehouse committed Mar 30, 2006
1 parent 6163677 commit 06cfa4f
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 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: d0dc80dbafb5c10ad2084831a61bbf945484a139
refs/heads/master: e90deff5336ac500c65f873484c326cfa8a9d379
23 changes: 14 additions & 9 deletions trunk/fs/gfs2/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -940,10 +940,15 @@ static int dir_split_leaf(struct inode *inode, const struct qstr *name)
/* Get the old leaf block */
error = get_leaf(dip, leaf_no, &obh);
if (error)
goto fail;
return error;

gfs2_trans_add_bh(dip->i_gl, obh, 1);
oleaf = (struct gfs2_leaf *)obh->b_data;
if (dip->i_di.di_depth == be16_to_cpu(oleaf->lf_depth)) {
brelse(obh);
return 1; /* can't split */
}

gfs2_trans_add_bh(dip->i_gl, obh, 1);

nleaf = new_leaf(inode, &nbh, be16_to_cpu(oleaf->lf_depth) + 1);
if (!nleaf) {
Expand All @@ -956,6 +961,7 @@ static int dir_split_leaf(struct inode *inode, const struct qstr *name)
len = 1 << (dip->i_di.di_depth - be16_to_cpu(oleaf->lf_depth));
half_len = len >> 1;
if (!half_len) {
printk(KERN_WARNING "di_depth %u lf_depth %u index %u\n", dip->i_di.di_depth, be16_to_cpu(oleaf->lf_depth), index);
gfs2_consist_inode(dip);
error = -EIO;
goto fail_brelse;
Expand Down Expand Up @@ -1038,13 +1044,11 @@ static int dir_split_leaf(struct inode *inode, const struct qstr *name)

return error;

fail_lpfree:
fail_lpfree:
kfree(lp);

fail_brelse:
fail_brelse:
brelse(obh);

fail:
brelse(nbh);
return error;
}
Expand Down Expand Up @@ -1570,16 +1574,17 @@ int gfs2_dir_add(struct inode *inode, const struct qstr *name,
error = dir_split_leaf(inode, name);
if (error == 0)
continue;
if (error != -ENOSPC)
if (error < 0)
break;
if (ip->i_di.di_depth < GFS2_DIR_MAX_DEPTH) {
error = dir_double_exhash(ip);
if (error)
break;
error = dir_split_leaf(inode, name);
if (error)
if (error < 0)
break;
continue;
if (error == 0)
continue;
}
error = dir_new_leaf(inode, name);
if (!error)
Expand Down

0 comments on commit 06cfa4f

Please sign in to comment.