xfs: improve xfs_inobt_get_rec prototype
Most callers of xfs_inobt_get_rec need to fill a xfs_inobt_rec_incore_t, and those who don't yet are fine with a xfs_inobt_rec_incore_t, instead of the three individual variables, too. So just change xfs_inobt_get_rec to write the output into a xfs_inobt_rec_incore_t directly. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Alex Elder <aelder@sgi.com> Signed-off-by: Felix Blyakher <felixb@sgi.com>
This commit is contained in:
parent
85c0b2ab5e
commit
2e287a731e
|
@ -135,9 +135,7 @@ xfs_inobt_update(
|
||||||
int /* error */
|
int /* error */
|
||||||
xfs_inobt_get_rec(
|
xfs_inobt_get_rec(
|
||||||
struct xfs_btree_cur *cur, /* btree cursor */
|
struct xfs_btree_cur *cur, /* btree cursor */
|
||||||
xfs_agino_t *ino, /* output: starting inode of chunk */
|
xfs_inobt_rec_incore_t *irec, /* btree record */
|
||||||
__int32_t *fcnt, /* output: number of free inodes */
|
|
||||||
xfs_inofree_t *free, /* output: free inode mask */
|
|
||||||
int *stat) /* output: success/failure */
|
int *stat) /* output: success/failure */
|
||||||
{
|
{
|
||||||
union xfs_btree_rec *rec;
|
union xfs_btree_rec *rec;
|
||||||
|
@ -145,9 +143,9 @@ xfs_inobt_get_rec(
|
||||||
|
|
||||||
error = xfs_btree_get_rec(cur, &rec, stat);
|
error = xfs_btree_get_rec(cur, &rec, stat);
|
||||||
if (!error && *stat == 1) {
|
if (!error && *stat == 1) {
|
||||||
*ino = be32_to_cpu(rec->inobt.ir_startino);
|
irec->ir_startino = be32_to_cpu(rec->inobt.ir_startino);
|
||||||
*fcnt = be32_to_cpu(rec->inobt.ir_freecount);
|
irec->ir_freecount = be32_to_cpu(rec->inobt.ir_freecount);
|
||||||
*free = be64_to_cpu(rec->inobt.ir_free);
|
irec->ir_free = be64_to_cpu(rec->inobt.ir_free);
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
@ -746,8 +744,8 @@ nextag:
|
||||||
goto error0;
|
goto error0;
|
||||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||||
do {
|
do {
|
||||||
if ((error = xfs_inobt_get_rec(cur, &rec.ir_startino,
|
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||||
&rec.ir_freecount, &rec.ir_free, &i)))
|
if (error)
|
||||||
goto error0;
|
goto error0;
|
||||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||||
freecount += rec.ir_freecount;
|
freecount += rec.ir_freecount;
|
||||||
|
@ -766,8 +764,7 @@ nextag:
|
||||||
if ((error = xfs_inobt_lookup_le(cur, pagino, 0, 0, &i)))
|
if ((error = xfs_inobt_lookup_le(cur, pagino, 0, 0, &i)))
|
||||||
goto error0;
|
goto error0;
|
||||||
if (i != 0 &&
|
if (i != 0 &&
|
||||||
(error = xfs_inobt_get_rec(cur, &rec.ir_startino,
|
(error = xfs_inobt_get_rec(cur, &rec, &j)) == 0 &&
|
||||||
&rec.ir_freecount, &rec.ir_free, &j)) == 0 &&
|
|
||||||
j == 1 &&
|
j == 1 &&
|
||||||
rec.ir_freecount > 0) {
|
rec.ir_freecount > 0) {
|
||||||
/*
|
/*
|
||||||
|
@ -799,10 +796,8 @@ nextag:
|
||||||
goto error1;
|
goto error1;
|
||||||
doneleft = !i;
|
doneleft = !i;
|
||||||
if (!doneleft) {
|
if (!doneleft) {
|
||||||
if ((error = xfs_inobt_get_rec(tcur,
|
error = xfs_inobt_get_rec(tcur, &trec, &i);
|
||||||
&trec.ir_startino,
|
if (error)
|
||||||
&trec.ir_freecount,
|
|
||||||
&trec.ir_free, &i)))
|
|
||||||
goto error1;
|
goto error1;
|
||||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error1);
|
XFS_WANT_CORRUPTED_GOTO(i == 1, error1);
|
||||||
}
|
}
|
||||||
|
@ -813,10 +808,8 @@ nextag:
|
||||||
goto error1;
|
goto error1;
|
||||||
doneright = !i;
|
doneright = !i;
|
||||||
if (!doneright) {
|
if (!doneright) {
|
||||||
if ((error = xfs_inobt_get_rec(cur,
|
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||||
&rec.ir_startino,
|
if (error)
|
||||||
&rec.ir_freecount,
|
|
||||||
&rec.ir_free, &i)))
|
|
||||||
goto error1;
|
goto error1;
|
||||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error1);
|
XFS_WANT_CORRUPTED_GOTO(i == 1, error1);
|
||||||
}
|
}
|
||||||
|
@ -876,11 +869,9 @@ nextag:
|
||||||
goto error1;
|
goto error1;
|
||||||
doneleft = !i;
|
doneleft = !i;
|
||||||
if (!doneleft) {
|
if (!doneleft) {
|
||||||
if ((error = xfs_inobt_get_rec(
|
error = xfs_inobt_get_rec(
|
||||||
tcur,
|
tcur, &trec, &i);
|
||||||
&trec.ir_startino,
|
if (error)
|
||||||
&trec.ir_freecount,
|
|
||||||
&trec.ir_free, &i)))
|
|
||||||
goto error1;
|
goto error1;
|
||||||
XFS_WANT_CORRUPTED_GOTO(i == 1,
|
XFS_WANT_CORRUPTED_GOTO(i == 1,
|
||||||
error1);
|
error1);
|
||||||
|
@ -896,11 +887,9 @@ nextag:
|
||||||
goto error1;
|
goto error1;
|
||||||
doneright = !i;
|
doneright = !i;
|
||||||
if (!doneright) {
|
if (!doneright) {
|
||||||
if ((error = xfs_inobt_get_rec(
|
error = xfs_inobt_get_rec(
|
||||||
cur,
|
cur, &rec, &i);
|
||||||
&rec.ir_startino,
|
if (error)
|
||||||
&rec.ir_freecount,
|
|
||||||
&rec.ir_free, &i)))
|
|
||||||
goto error1;
|
goto error1;
|
||||||
XFS_WANT_CORRUPTED_GOTO(i == 1,
|
XFS_WANT_CORRUPTED_GOTO(i == 1,
|
||||||
error1);
|
error1);
|
||||||
|
@ -919,8 +908,7 @@ nextag:
|
||||||
be32_to_cpu(agi->agi_newino), 0, 0, &i)))
|
be32_to_cpu(agi->agi_newino), 0, 0, &i)))
|
||||||
goto error0;
|
goto error0;
|
||||||
if (i == 1 &&
|
if (i == 1 &&
|
||||||
(error = xfs_inobt_get_rec(cur, &rec.ir_startino,
|
(error = xfs_inobt_get_rec(cur, &rec, &j)) == 0 &&
|
||||||
&rec.ir_freecount, &rec.ir_free, &j)) == 0 &&
|
|
||||||
j == 1 &&
|
j == 1 &&
|
||||||
rec.ir_freecount > 0) {
|
rec.ir_freecount > 0) {
|
||||||
/*
|
/*
|
||||||
|
@ -938,10 +926,8 @@ nextag:
|
||||||
goto error0;
|
goto error0;
|
||||||
ASSERT(i == 1);
|
ASSERT(i == 1);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if ((error = xfs_inobt_get_rec(cur,
|
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||||
&rec.ir_startino,
|
if (error)
|
||||||
&rec.ir_freecount, &rec.ir_free,
|
|
||||||
&i)))
|
|
||||||
goto error0;
|
goto error0;
|
||||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||||
if (rec.ir_freecount > 0)
|
if (rec.ir_freecount > 0)
|
||||||
|
@ -975,8 +961,8 @@ nextag:
|
||||||
if ((error = xfs_inobt_lookup_ge(cur, 0, 0, 0, &i)))
|
if ((error = xfs_inobt_lookup_ge(cur, 0, 0, 0, &i)))
|
||||||
goto error0;
|
goto error0;
|
||||||
do {
|
do {
|
||||||
if ((error = xfs_inobt_get_rec(cur, &rec.ir_startino,
|
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||||
&rec.ir_freecount, &rec.ir_free, &i)))
|
if (error)
|
||||||
goto error0;
|
goto error0;
|
||||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||||
freecount += rec.ir_freecount;
|
freecount += rec.ir_freecount;
|
||||||
|
@ -1084,8 +1070,8 @@ xfs_difree(
|
||||||
if ((error = xfs_inobt_lookup_ge(cur, 0, 0, 0, &i)))
|
if ((error = xfs_inobt_lookup_ge(cur, 0, 0, 0, &i)))
|
||||||
goto error0;
|
goto error0;
|
||||||
do {
|
do {
|
||||||
if ((error = xfs_inobt_get_rec(cur, &rec.ir_startino,
|
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||||
&rec.ir_freecount, &rec.ir_free, &i)))
|
if (error)
|
||||||
goto error0;
|
goto error0;
|
||||||
if (i) {
|
if (i) {
|
||||||
freecount += rec.ir_freecount;
|
freecount += rec.ir_freecount;
|
||||||
|
@ -1107,8 +1093,8 @@ xfs_difree(
|
||||||
goto error0;
|
goto error0;
|
||||||
}
|
}
|
||||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||||
if ((error = xfs_inobt_get_rec(cur, &rec.ir_startino, &rec.ir_freecount,
|
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||||
&rec.ir_free, &i))) {
|
if (error) {
|
||||||
cmn_err(CE_WARN,
|
cmn_err(CE_WARN,
|
||||||
"xfs_difree: xfs_inobt_get_rec() returned an error %d on %s. Returning error.",
|
"xfs_difree: xfs_inobt_get_rec() returned an error %d on %s. Returning error.",
|
||||||
error, mp->m_fsname);
|
error, mp->m_fsname);
|
||||||
|
@ -1187,10 +1173,8 @@ xfs_difree(
|
||||||
if ((error = xfs_inobt_lookup_ge(cur, 0, 0, 0, &i)))
|
if ((error = xfs_inobt_lookup_ge(cur, 0, 0, 0, &i)))
|
||||||
goto error0;
|
goto error0;
|
||||||
do {
|
do {
|
||||||
if ((error = xfs_inobt_get_rec(cur,
|
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||||
&rec.ir_startino,
|
if (error)
|
||||||
&rec.ir_freecount,
|
|
||||||
&rec.ir_free, &i)))
|
|
||||||
goto error0;
|
goto error0;
|
||||||
if (i) {
|
if (i) {
|
||||||
freecount += rec.ir_freecount;
|
freecount += rec.ir_freecount;
|
||||||
|
@ -1312,9 +1296,7 @@ xfs_imap(
|
||||||
chunk_agbno = agbno - offset_agbno;
|
chunk_agbno = agbno - offset_agbno;
|
||||||
} else {
|
} else {
|
||||||
xfs_btree_cur_t *cur; /* inode btree cursor */
|
xfs_btree_cur_t *cur; /* inode btree cursor */
|
||||||
xfs_agino_t chunk_agino; /* first agino in inode chunk */
|
xfs_inobt_rec_incore_t chunk_rec;
|
||||||
__int32_t chunk_cnt; /* count of free inodes in chunk */
|
|
||||||
xfs_inofree_t chunk_free; /* mask of free inodes in chunk */
|
|
||||||
xfs_buf_t *agbp; /* agi buffer */
|
xfs_buf_t *agbp; /* agi buffer */
|
||||||
int i; /* temp state */
|
int i; /* temp state */
|
||||||
|
|
||||||
|
@ -1337,8 +1319,7 @@ xfs_imap(
|
||||||
goto error0;
|
goto error0;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = xfs_inobt_get_rec(cur, &chunk_agino, &chunk_cnt,
|
error = xfs_inobt_get_rec(cur, &chunk_rec, &i);
|
||||||
&chunk_free, &i);
|
|
||||||
if (error) {
|
if (error) {
|
||||||
xfs_fs_cmn_err(CE_ALERT, mp, "xfs_imap: "
|
xfs_fs_cmn_err(CE_ALERT, mp, "xfs_imap: "
|
||||||
"xfs_inobt_get_rec() failed");
|
"xfs_inobt_get_rec() failed");
|
||||||
|
@ -1356,7 +1337,7 @@ xfs_imap(
|
||||||
xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR);
|
xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
chunk_agbno = XFS_AGINO_TO_AGBNO(mp, chunk_agino);
|
chunk_agbno = XFS_AGINO_TO_AGBNO(mp, chunk_rec.ir_startino);
|
||||||
offset_agbno = agbno - chunk_agbno;
|
offset_agbno = agbno - chunk_agbno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -166,7 +166,7 @@ int xfs_inobt_lookup_le(struct xfs_btree_cur *cur, xfs_agino_t ino,
|
||||||
/*
|
/*
|
||||||
* Get the data from the pointed-to record.
|
* Get the data from the pointed-to record.
|
||||||
*/
|
*/
|
||||||
extern int xfs_inobt_get_rec(struct xfs_btree_cur *cur, xfs_agino_t *ino,
|
extern int xfs_inobt_get_rec(struct xfs_btree_cur *cur,
|
||||||
__int32_t *fcnt, xfs_inofree_t *free, int *stat);
|
xfs_inobt_rec_incore_t *rec, int *stat);
|
||||||
|
|
||||||
#endif /* __XFS_IALLOC_H__ */
|
#endif /* __XFS_IALLOC_H__ */
|
||||||
|
|
|
@ -353,9 +353,6 @@ xfs_bulkstat(
|
||||||
int end_of_ag; /* set if we've seen the ag end */
|
int end_of_ag; /* set if we've seen the ag end */
|
||||||
int error; /* error code */
|
int error; /* error code */
|
||||||
int fmterror;/* bulkstat formatter result */
|
int fmterror;/* bulkstat formatter result */
|
||||||
__int32_t gcnt; /* current btree rec's count */
|
|
||||||
xfs_inofree_t gfree; /* current btree rec's free mask */
|
|
||||||
xfs_agino_t gino; /* current btree rec's start inode */
|
|
||||||
int i; /* loop index */
|
int i; /* loop index */
|
||||||
int icount; /* count of inodes good in irbuf */
|
int icount; /* count of inodes good in irbuf */
|
||||||
size_t irbsize; /* size of irec buffer in bytes */
|
size_t irbsize; /* size of irec buffer in bytes */
|
||||||
|
@ -442,6 +439,8 @@ xfs_bulkstat(
|
||||||
* we need to get the remainder of the chunk we're in.
|
* we need to get the remainder of the chunk we're in.
|
||||||
*/
|
*/
|
||||||
if (agino > 0) {
|
if (agino > 0) {
|
||||||
|
xfs_inobt_rec_incore_t r;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lookup the inode chunk that this inode lives in.
|
* Lookup the inode chunk that this inode lives in.
|
||||||
*/
|
*/
|
||||||
|
@ -449,33 +448,33 @@ xfs_bulkstat(
|
||||||
if (!error && /* no I/O error */
|
if (!error && /* no I/O error */
|
||||||
tmp && /* lookup succeeded */
|
tmp && /* lookup succeeded */
|
||||||
/* got the record, should always work */
|
/* got the record, should always work */
|
||||||
!(error = xfs_inobt_get_rec(cur, &gino, &gcnt,
|
!(error = xfs_inobt_get_rec(cur, &r, &i)) &&
|
||||||
&gfree, &i)) &&
|
|
||||||
i == 1 &&
|
i == 1 &&
|
||||||
/* this is the right chunk */
|
/* this is the right chunk */
|
||||||
agino < gino + XFS_INODES_PER_CHUNK &&
|
agino < r.ir_startino + XFS_INODES_PER_CHUNK &&
|
||||||
/* lastino was not last in chunk */
|
/* lastino was not last in chunk */
|
||||||
(chunkidx = agino - gino + 1) <
|
(chunkidx = agino - r.ir_startino + 1) <
|
||||||
XFS_INODES_PER_CHUNK &&
|
XFS_INODES_PER_CHUNK &&
|
||||||
/* there are some left allocated */
|
/* there are some left allocated */
|
||||||
xfs_inobt_maskn(chunkidx,
|
xfs_inobt_maskn(chunkidx,
|
||||||
XFS_INODES_PER_CHUNK - chunkidx) & ~gfree) {
|
XFS_INODES_PER_CHUNK - chunkidx) &
|
||||||
|
~r.ir_free) {
|
||||||
/*
|
/*
|
||||||
* Grab the chunk record. Mark all the
|
* Grab the chunk record. Mark all the
|
||||||
* uninteresting inodes (because they're
|
* uninteresting inodes (because they're
|
||||||
* before our start point) free.
|
* before our start point) free.
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < chunkidx; i++) {
|
for (i = 0; i < chunkidx; i++) {
|
||||||
if (XFS_INOBT_MASK(i) & ~gfree)
|
if (XFS_INOBT_MASK(i) & ~r.ir_free)
|
||||||
gcnt++;
|
r.ir_freecount++;
|
||||||
}
|
}
|
||||||
gfree |= xfs_inobt_maskn(0, chunkidx);
|
r.ir_free |= xfs_inobt_maskn(0, chunkidx);
|
||||||
irbp->ir_startino = gino;
|
irbp->ir_startino = r.ir_startino;
|
||||||
irbp->ir_freecount = gcnt;
|
irbp->ir_freecount = r.ir_freecount;
|
||||||
irbp->ir_free = gfree;
|
irbp->ir_free = r.ir_free;
|
||||||
irbp++;
|
irbp++;
|
||||||
agino = gino + XFS_INODES_PER_CHUNK;
|
agino = r.ir_startino + XFS_INODES_PER_CHUNK;
|
||||||
icount = XFS_INODES_PER_CHUNK - gcnt;
|
icount = XFS_INODES_PER_CHUNK - r.ir_freecount;
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* If any of those tests failed, bump the
|
* If any of those tests failed, bump the
|
||||||
|
@ -501,6 +500,8 @@ xfs_bulkstat(
|
||||||
* until we run out of inodes or space in the buffer.
|
* until we run out of inodes or space in the buffer.
|
||||||
*/
|
*/
|
||||||
while (irbp < irbufend && icount < ubcount) {
|
while (irbp < irbufend && icount < ubcount) {
|
||||||
|
xfs_inobt_rec_incore_t r;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Loop as long as we're unable to read the
|
* Loop as long as we're unable to read the
|
||||||
* inode btree.
|
* inode btree.
|
||||||
|
@ -518,43 +519,47 @@ xfs_bulkstat(
|
||||||
* If ran off the end of the ag either with an error,
|
* If ran off the end of the ag either with an error,
|
||||||
* or the normal way, set end and stop collecting.
|
* or the normal way, set end and stop collecting.
|
||||||
*/
|
*/
|
||||||
if (error ||
|
if (error) {
|
||||||
(error = xfs_inobt_get_rec(cur, &gino, &gcnt,
|
|
||||||
&gfree, &i)) ||
|
|
||||||
i == 0) {
|
|
||||||
end_of_ag = 1;
|
end_of_ag = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error = xfs_inobt_get_rec(cur, &r, &i);
|
||||||
|
if (error || i == 0) {
|
||||||
|
end_of_ag = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this chunk has any allocated inodes, save it.
|
* If this chunk has any allocated inodes, save it.
|
||||||
* Also start read-ahead now for this chunk.
|
* Also start read-ahead now for this chunk.
|
||||||
*/
|
*/
|
||||||
if (gcnt < XFS_INODES_PER_CHUNK) {
|
if (r.ir_freecount < XFS_INODES_PER_CHUNK) {
|
||||||
/*
|
/*
|
||||||
* Loop over all clusters in the next chunk.
|
* Loop over all clusters in the next chunk.
|
||||||
* Do a readahead if there are any allocated
|
* Do a readahead if there are any allocated
|
||||||
* inodes in that cluster.
|
* inodes in that cluster.
|
||||||
*/
|
*/
|
||||||
for (agbno = XFS_AGINO_TO_AGBNO(mp, gino),
|
agbno = XFS_AGINO_TO_AGBNO(mp, r.ir_startino);
|
||||||
chunkidx = 0;
|
for (chunkidx = 0;
|
||||||
chunkidx < XFS_INODES_PER_CHUNK;
|
chunkidx < XFS_INODES_PER_CHUNK;
|
||||||
chunkidx += nicluster,
|
chunkidx += nicluster,
|
||||||
agbno += nbcluster) {
|
agbno += nbcluster) {
|
||||||
if (xfs_inobt_maskn(chunkidx,
|
if (xfs_inobt_maskn(chunkidx, nicluster)
|
||||||
nicluster) & ~gfree)
|
& ~r.ir_free)
|
||||||
xfs_btree_reada_bufs(mp, agno,
|
xfs_btree_reada_bufs(mp, agno,
|
||||||
agbno, nbcluster);
|
agbno, nbcluster);
|
||||||
}
|
}
|
||||||
irbp->ir_startino = gino;
|
irbp->ir_startino = r.ir_startino;
|
||||||
irbp->ir_freecount = gcnt;
|
irbp->ir_freecount = r.ir_freecount;
|
||||||
irbp->ir_free = gfree;
|
irbp->ir_free = r.ir_free;
|
||||||
irbp++;
|
irbp++;
|
||||||
icount += XFS_INODES_PER_CHUNK - gcnt;
|
icount += XFS_INODES_PER_CHUNK - r.ir_freecount;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Set agino to after this chunk and bump the cursor.
|
* Set agino to after this chunk and bump the cursor.
|
||||||
*/
|
*/
|
||||||
agino = gino + XFS_INODES_PER_CHUNK;
|
agino = r.ir_startino + XFS_INODES_PER_CHUNK;
|
||||||
error = xfs_btree_increment(cur, 0, &tmp);
|
error = xfs_btree_increment(cur, 0, &tmp);
|
||||||
cond_resched();
|
cond_resched();
|
||||||
}
|
}
|
||||||
|
@ -820,9 +825,7 @@ xfs_inumbers(
|
||||||
int bufidx;
|
int bufidx;
|
||||||
xfs_btree_cur_t *cur;
|
xfs_btree_cur_t *cur;
|
||||||
int error;
|
int error;
|
||||||
__int32_t gcnt;
|
xfs_inobt_rec_incore_t r;
|
||||||
xfs_inofree_t gfree;
|
|
||||||
xfs_agino_t gino;
|
|
||||||
int i;
|
int i;
|
||||||
xfs_ino_t ino;
|
xfs_ino_t ino;
|
||||||
int left;
|
int left;
|
||||||
|
@ -870,9 +873,8 @@ xfs_inumbers(
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((error = xfs_inobt_get_rec(cur, &gino, &gcnt, &gfree,
|
error = xfs_inobt_get_rec(cur, &r, &i);
|
||||||
&i)) ||
|
if (error || i == 0) {
|
||||||
i == 0) {
|
|
||||||
xfs_buf_relse(agbp);
|
xfs_buf_relse(agbp);
|
||||||
agbp = NULL;
|
agbp = NULL;
|
||||||
xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR);
|
xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR);
|
||||||
|
@ -881,10 +883,12 @@ xfs_inumbers(
|
||||||
agino = 0;
|
agino = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
agino = gino + XFS_INODES_PER_CHUNK - 1;
|
agino = r.ir_startino + XFS_INODES_PER_CHUNK - 1;
|
||||||
buffer[bufidx].xi_startino = XFS_AGINO_TO_INO(mp, agno, gino);
|
buffer[bufidx].xi_startino =
|
||||||
buffer[bufidx].xi_alloccount = XFS_INODES_PER_CHUNK - gcnt;
|
XFS_AGINO_TO_INO(mp, agno, r.ir_startino);
|
||||||
buffer[bufidx].xi_allocmask = ~gfree;
|
buffer[bufidx].xi_alloccount =
|
||||||
|
XFS_INODES_PER_CHUNK - r.ir_freecount;
|
||||||
|
buffer[bufidx].xi_allocmask = ~r.ir_free;
|
||||||
bufidx++;
|
bufidx++;
|
||||||
left--;
|
left--;
|
||||||
if (bufidx == bcount) {
|
if (bufidx == bcount) {
|
||||||
|
|
Reference in New Issue