PERFORCE change 179138 for review
Zheng Liu
lz at FreeBSD.org
Thu Jun 3 11:29:07 UTC 2010
http://p4web.freebsd.org/@@179138?ac=10
Change 179138 by lz at gnehzuil-freebsd on 2010/06/03 11:28:32
Fix a bug.
* When it find a window, rsv_alloc_hit's value is wrong. It
reduce the accuracy at next allocation.
Affected files ...
.. //depot/projects/soc2010/extfs/src/sys/fs/ext2fs/ext2_alloc.c#20 edit
Differences ...
==== //depot/projects/soc2010/extfs/src/sys/fs/ext2fs/ext2_alloc.c#20 (text+ko) ====
@@ -252,7 +252,7 @@
if (RB_EMPTY(&fs->e2fs_rsv_tree)) {
EXT2_TREE_UNLOCK(fs);
- if (dtog(fs, bpref) != cg)
+ if (bpref < 0 || dtog(fs, bpref) != cg)
bpref = 0;
if (bpref != 0) {
bpref = dtogd(fs, bpref);
@@ -283,6 +283,9 @@
return (0);
goto gotit;
} else {
+ if (bpref < 0)
+ bpref = cg * fs->e2fs->e2fs_fpg + fs->e2fs->e2fs_first_dblock;
+
search_rsv = ext2_search_rsv_win(&fs->e2fs_rsv_tree, bpref);
repeat:
@@ -324,7 +327,7 @@
start = cg * fs->e2fs->e2fs_fpg + fs->e2fs->e2fs_first_dblock + bpref;
if (start >= rp->rsv_start &&
start < rp->rsv_end) {
- rp->rsv_alloc_hit++;
+ rp->rsv_alloc_hit = start - rp->rsv_start + 1;
goto allocated;
}
@@ -508,7 +511,7 @@
}
EXT2_RSV_LOCK(ip);
- bno = ext2_rsvalloc(fs, ip, cg, bp, bpref, size);
+ bno = ext2_rsvalloc(fs, ip, cg, bp, -1, size);
EXT2_RSV_UNLOCK(ip);
if (bno > 0)
goto allocated;
More information about the p4-projects
mailing list