Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 162773
b: refs/heads/master
c: 2187550
h: refs/heads/master
i:
  162771: f8d0306
v: v3
  • Loading branch information
Christoph Hellwig authored and Felix Blyakher committed Sep 1, 2009
1 parent 6d02683 commit 7550b1c
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 72 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: 4254b0bbb1c0826b7443ffa593576696bc591aa2
refs/heads/master: 2187550525d7bcb8c87689e4eca41b1955bf9ac3
77 changes: 22 additions & 55 deletions trunk/fs/xfs/xfs_ialloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,56 +57,19 @@ xfs_ialloc_cluster_alignment(
}

/*
* Lookup the record equal to ino in the btree given by cur.
* Lookup a record by ino in the btree given by cur.
*/
STATIC int /* error */
xfs_inobt_lookup_eq(
xfs_inobt_lookup(
struct xfs_btree_cur *cur, /* btree cursor */
xfs_agino_t ino, /* starting inode of chunk */
__int32_t fcnt, /* free inode count */
xfs_inofree_t free, /* free inode mask */
xfs_lookup_t dir, /* <=, >=, == */
int *stat) /* success/failure */
{
cur->bc_rec.i.ir_startino = ino;
cur->bc_rec.i.ir_freecount = fcnt;
cur->bc_rec.i.ir_free = free;
return xfs_btree_lookup(cur, XFS_LOOKUP_EQ, stat);
}

/*
* Lookup the first record greater than or equal to ino
* in the btree given by cur.
*/
int /* error */
xfs_inobt_lookup_ge(
struct xfs_btree_cur *cur, /* btree cursor */
xfs_agino_t ino, /* starting inode of chunk */
__int32_t fcnt, /* free inode count */
xfs_inofree_t free, /* free inode mask */
int *stat) /* success/failure */
{
cur->bc_rec.i.ir_startino = ino;
cur->bc_rec.i.ir_freecount = fcnt;
cur->bc_rec.i.ir_free = free;
return xfs_btree_lookup(cur, XFS_LOOKUP_GE, stat);
}

/*
* Lookup the first record less than or equal to ino
* in the btree given by cur.
*/
int /* error */
xfs_inobt_lookup_le(
struct xfs_btree_cur *cur, /* btree cursor */
xfs_agino_t ino, /* starting inode of chunk */
__int32_t fcnt, /* free inode count */
xfs_inofree_t free, /* free inode mask */
int *stat) /* success/failure */
{
cur->bc_rec.i.ir_startino = ino;
cur->bc_rec.i.ir_freecount = fcnt;
cur->bc_rec.i.ir_free = free;
return xfs_btree_lookup(cur, XFS_LOOKUP_LE, stat);
cur->bc_rec.i.ir_freecount = 0;
cur->bc_rec.i.ir_free = 0;
return xfs_btree_lookup(cur, dir, stat);
}

/*
Expand Down Expand Up @@ -162,7 +125,7 @@ xfs_check_agi_freecount(
int error;
int i;

error = xfs_inobt_lookup_ge(cur, 0, 0, 0, &i);
error = xfs_inobt_lookup(cur, 0, XFS_LOOKUP_GE, &i);
if (error)
return error;

Expand Down Expand Up @@ -431,13 +394,17 @@ xfs_ialloc_ag_alloc(
for (thisino = newino;
thisino < newino + newlen;
thisino += XFS_INODES_PER_CHUNK) {
if ((error = xfs_inobt_lookup_eq(cur, thisino,
XFS_INODES_PER_CHUNK, XFS_INOBT_ALL_FREE, &i))) {
cur->bc_rec.i.ir_startino = thisino;
cur->bc_rec.i.ir_freecount = XFS_INODES_PER_CHUNK;
cur->bc_rec.i.ir_free = XFS_INOBT_ALL_FREE;
error = xfs_btree_lookup(cur, XFS_LOOKUP_EQ, &i);
if (error) {
xfs_btree_del_cursor(cur, XFS_BTREE_ERROR);
return error;
}
ASSERT(i == 0);
if ((error = xfs_btree_insert(cur, &i))) {
error = xfs_btree_insert(cur, &i);
if (error) {
xfs_btree_del_cursor(cur, XFS_BTREE_ERROR);
return error;
}
Expand Down Expand Up @@ -818,7 +785,7 @@ xfs_dialloc(
int doneleft; /* done, to the left */
int doneright; /* done, to the right */

error = xfs_inobt_lookup_le(cur, pagino, 0, 0, &i);
error = xfs_inobt_lookup(cur, pagino, XFS_LOOKUP_LE, &i);
if (error)
goto error0;
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
Expand Down Expand Up @@ -904,8 +871,8 @@ xfs_dialloc(
* See if the most recently allocated block has any free.
*/
else if (be32_to_cpu(agi->agi_newino) != NULLAGINO) {
error = xfs_inobt_lookup_eq(cur, be32_to_cpu(agi->agi_newino),
0, 0, &i);
error = xfs_inobt_lookup(cur, be32_to_cpu(agi->agi_newino),
XFS_LOOKUP_EQ, &i);
if (error)
goto error0;

Expand All @@ -926,7 +893,7 @@ xfs_dialloc(
/*
* None left in the last group, search the whole AG
*/
error = xfs_inobt_lookup_ge(cur, 0, 0, 0, &i);
error = xfs_inobt_lookup(cur, 0, XFS_LOOKUP_GE, &i);
if (error)
goto error0;
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
Expand Down Expand Up @@ -1065,9 +1032,9 @@ xfs_difree(
/*
* Look for the entry describing this inode.
*/
if ((error = xfs_inobt_lookup_le(cur, agino, 0, 0, &i))) {
if ((error = xfs_inobt_lookup(cur, agino, XFS_LOOKUP_LE, &i))) {
cmn_err(CE_WARN,
"xfs_difree: xfs_inobt_lookup_le returned() an error %d on %s. Returning error.",
"xfs_difree: xfs_inobt_lookup returned() an error %d on %s. Returning error.",
error, mp->m_fsname);
goto error0;
}
Expand Down Expand Up @@ -1277,10 +1244,10 @@ xfs_imap(
}

cur = xfs_inobt_init_cursor(mp, tp, agbp, agno);
error = xfs_inobt_lookup_le(cur, agino, 0, 0, &i);
error = xfs_inobt_lookup(cur, agino, XFS_LOOKUP_LE, &i);
if (error) {
xfs_fs_cmn_err(CE_ALERT, mp, "xfs_imap: "
"xfs_inobt_lookup_le() failed");
"xfs_inobt_lookup() failed");
goto error0;
}

Expand Down
14 changes: 3 additions & 11 deletions trunk/fs/xfs/xfs_ialloc.h
Original file line number Diff line number Diff line change
Expand Up @@ -150,18 +150,10 @@ xfs_ialloc_pagi_init(
xfs_agnumber_t agno); /* allocation group number */

/*
* Lookup the first record greater than or equal to ino
* in the btree given by cur.
* Lookup a record by ino in the btree given by cur.
*/
int xfs_inobt_lookup_ge(struct xfs_btree_cur *cur, xfs_agino_t ino,
__int32_t fcnt, xfs_inofree_t free, int *stat);

/*
* Lookup the first record less than or equal to ino
* in the btree given by cur.
*/
int xfs_inobt_lookup_le(struct xfs_btree_cur *cur, xfs_agino_t ino,
__int32_t fcnt, xfs_inofree_t free, int *stat);
int xfs_inobt_lookup(struct xfs_btree_cur *cur, xfs_agino_t ino,
xfs_lookup_t dir, int *stat);

/*
* Get the data from the pointed-to record.
Expand Down
12 changes: 7 additions & 5 deletions trunk/fs/xfs/xfs_itable.c
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,8 @@ xfs_bulkstat(
/*
* Lookup the inode chunk that this inode lives in.
*/
error = xfs_inobt_lookup_le(cur, agino, 0, 0, &tmp);
error = xfs_inobt_lookup(cur, agino, XFS_LOOKUP_LE,
&tmp);
if (!error && /* no I/O error */
tmp && /* lookup succeeded */
/* got the record, should always work */
Expand Down Expand Up @@ -492,7 +493,7 @@ xfs_bulkstat(
/*
* Start of ag. Lookup the first inode chunk.
*/
error = xfs_inobt_lookup_ge(cur, 0, 0, 0, &tmp);
error = xfs_inobt_lookup(cur, 0, XFS_LOOKUP_GE, &tmp);
icount = 0;
}
/*
Expand All @@ -511,8 +512,8 @@ xfs_bulkstat(
if (XFS_AGINO_TO_AGBNO(mp, agino) >=
be32_to_cpu(agi->agi_length))
break;
error = xfs_inobt_lookup_ge(cur, agino, 0, 0,
&tmp);
error = xfs_inobt_lookup(cur, agino,
XFS_LOOKUP_GE, &tmp);
cond_resched();
}
/*
Expand Down Expand Up @@ -858,7 +859,8 @@ xfs_inumbers(
continue;
}
cur = xfs_inobt_init_cursor(mp, NULL, agbp, agno);
error = xfs_inobt_lookup_ge(cur, agino, 0, 0, &tmp);
error = xfs_inobt_lookup(cur, agino, XFS_LOOKUP_GE,
&tmp);
if (error) {
xfs_btree_del_cursor(cur, XFS_BTREE_ERROR);
cur = NULL;
Expand Down

0 comments on commit 7550b1c

Please sign in to comment.