aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_dir2_node.c
diff options
context:
space:
mode:
authorNathan Scott <nathans@sgi.com>2006-06-09 00:58:48 -0400
committerNathan Scott <nathans@sgi.com>2006-06-09 00:58:48 -0400
commite109007461cddfc80a908f0b015f4eeb485e1d85 (patch)
treebd3ce386cfce2905dd72182c4dbee2581bb76018 /fs/xfs/xfs_dir2_node.c
parent7d04a335b6b2d79e3742ffd28bd651204574e794 (diff)
[XFS] Fix a buffer refcount leak in dir2 code on a forced shutdown.
SGI-PV: 904196 SGI-Modid: xfs-linux-melb:xfs-kern:26097a Signed-off-by: Nathan Scott <nathans@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_dir2_node.c')
-rw-r--r--fs/xfs/xfs_dir2_node.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/xfs/xfs_dir2_node.c b/fs/xfs/xfs_dir2_node.c
index c0e8fcf5e13f..a8d483c0a84c 100644
--- a/fs/xfs/xfs_dir2_node.c
+++ b/fs/xfs/xfs_dir2_node.c
@@ -505,7 +505,6 @@ xfs_dir2_leafn_lookup_int(
505 XFS_DATA_FORK))) { 505 XFS_DATA_FORK))) {
506 return error; 506 return error;
507 } 507 }
508 curfdb = newfdb;
509 free = curbp->data; 508 free = curbp->data;
510 ASSERT(be32_to_cpu(free->hdr.magic) == 509 ASSERT(be32_to_cpu(free->hdr.magic) ==
511 XFS_DIR2_FREE_MAGIC); 510 XFS_DIR2_FREE_MAGIC);
@@ -527,8 +526,11 @@ xfs_dir2_leafn_lookup_int(
527 if (unlikely(be16_to_cpu(free->bests[fi]) == NULLDATAOFF)) { 526 if (unlikely(be16_to_cpu(free->bests[fi]) == NULLDATAOFF)) {
528 XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", 527 XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int",
529 XFS_ERRLEVEL_LOW, mp); 528 XFS_ERRLEVEL_LOW, mp);
529 if (curfdb != newfdb)
530 xfs_da_brelse(tp, curbp);
530 return XFS_ERROR(EFSCORRUPTED); 531 return XFS_ERROR(EFSCORRUPTED);
531 } 532 }
533 curfdb = newfdb;
532 if (be16_to_cpu(free->bests[fi]) >= length) { 534 if (be16_to_cpu(free->bests[fi]) >= length) {
533 *indexp = index; 535 *indexp = index;
534 state->extravalid = 1; 536 state->extravalid = 1;