PERFORCE change 178814 for review
Zheng Liu
lz at FreeBSD.org
Wed May 26 13:45:23 UTC 2010
http://p4web.freebsd.org/@@178814?ac=10
Change 178814 by lz at gnehzuil-freebsd on 2010/05/26 13:45:10
Just make the code to better clear.
Affected files ...
.. //depot/projects/soc2010/extfs/src/sys/fs/ext2fs/ext2_alloc.c#15 edit
Differences ...
==== //depot/projects/soc2010/extfs/src/sys/fs/ext2fs/ext2_alloc.c#15 (text+ko) ====
@@ -77,10 +77,7 @@
RB_GENERATE(ext2_rsv_win_tree, ext2_rsv_win, rsv_link, ext2_rsv_win_cmp);
/*
- * Lazily initialize reservation window per inode.
- *
- * When file need to allocate blocks first, reservation window
- * info structure will be initialized.
+ * Initialize reservation window per inode.
*/
void
ext2_init_rsv(struct inode *ip)
@@ -90,7 +87,8 @@
rp = malloc(sizeof(struct ext2_rsv_win),
M_EXT2NODE, M_WAITOK | M_ZERO);
- /* If malloc failed, we just do not use
+ /*
+ * If malloc failed, we just do not use
* reservation window mechanism
*/
if (rp == NULL)
@@ -164,7 +162,7 @@
struct ext2_rsv_win *next, *prev;
if (RB_EMPTY(root))
- return NULL;
+ return (NULL);
next = RB_ROOT(root);
do {
@@ -174,13 +172,13 @@
else if (bpref > next->rsv_end)
next = RB_RIGHT(next, rsv_link);
else
- return prev;
+ return (prev);
} while(next != NULL);
if (prev->rsv_start > bpref)
prev = RB_PREV(ext2_rsv_win_tree, root, prev);
- return prev;
+ return (prev);
}
/*
@@ -195,7 +193,7 @@
int size = EXT2_RSV_DEFAULT_RESERVE_BLKS;
if (search == NULL && RB_EMPTY(&fs->e2fs_rsv_tree))
- return -1;
+ return (-1);
else
search = RB_ROOT(&fs->e2fs_rsv_tree);
@@ -208,7 +206,7 @@
cur = rsv->rsv_end + 1;
if (dtog(fs, cur) != cg)
- return -1;
+ return (-1);
prev = rsv;
next = RB_NEXT(ext2_rsv_win_tree, &fs->e2fs_rsv_tree, rsv);
@@ -230,7 +228,7 @@
ext2_add_rsv_win(fs, rp);
- return 0;
+ return (0);
}
/*
@@ -255,7 +253,8 @@
/* If tree is empty, then try to alloc according to bpref */
if (RB_EMPTY(&fs->e2fs_rsv_tree)) {
EXT2_TREE_UNLOCK(fs);
- /* bpref is not in this cylinder group.
+ /*
+ * bpref is not in this cylinder group.
* So try to allocate it in other group.
*/
if (dtog(fs, bpref) != cg)
@@ -286,7 +285,7 @@
bpref = ext2_mapsearch(fs, bbp, bpref);
if (bpref < 0)
- return 0;
+ return (0);
goto gotit;
} else {
search_rsv = ext2_search_rsv_win(&fs->e2fs_rsv_tree, bpref);
@@ -299,26 +298,31 @@
bpref = ext2_mapsearch(fs, bbp, bpref);
if (bpref < 0)
- return 0;
+ return (0);
goto allocated1;
}
EXT2_TREE_UNLOCK(fs);
- if (dtog(fs, bpref) != cg)
- bpref = 0;
+ bpref = rp->rsv_start;
+ if (dtog(fs, bpref) != cg) {
+ EXT2_TREE_LOCK(fs);
+ if (rp->rsv_end != EXT2_RSV_NOT_ALLOCATED)
+ ext2_remove_rsv_win(fs, rp);
+ EXT2_TREE_UNLOCK(fs);
- if (bpref != 0) {
- bpref = dtogd(fs, bpref);
- if (isclr(bbp, bpref) &&
- cg * fs->e2fs->e2fs_fpg + fs->e2fs->e2fs_first_dblock + bpref >= rp->rsv_start &&
- cg * fs->e2fs->e2fs_fpg + fs->e2fs->e2fs_first_dblock + bpref < rp->rsv_end)
- goto allocated;
+ bpref = ext2_mapsearch(fs, bbp, bpref);
+ if (bpref < 0)
+ return (0);
+ goto allocated1;
}
- if (bpref != 0)
- start = dtogd(fs, bpref) / NBBY;
- else
- start = 0;
+ bpref = dtogd(fs, bpref);
+ if (isclr(bbp, bpref) &&
+ cg * fs->e2fs->e2fs_fpg + fs->e2fs->e2fs_first_dblock + bpref >= rp->rsv_start &&
+ cg * fs->e2fs->e2fs_fpg + fs->e2fs->e2fs_first_dblock + bpref < rp->rsv_end)
+ goto allocated;
+
+ start = dtogd(fs, bpref) / NBBY;
end = howmany(fs->e2fs->e2fs_fpg, NBBY) - start;
for (loc = start; loc < end; loc++) {
if (bbp[loc] == 0 &&
@@ -337,7 +341,7 @@
bpref = ext2_mapsearch(fs, bbp, bpref);
if (bpref < 0)
- return 0;
+ return (0);
goto allocated1;
}
}
@@ -354,7 +358,7 @@
rp->rsv_alloc_hit++;
allocated1:
if (isset(bbp, bpref))
- return 0;
+ return (0);
setbit(bbp, (daddr_t)bpref);
EXT2_LOCK(ump);
fs->e2fs->e2fs_fbcount--;
@@ -362,7 +366,7 @@
fs->e2fs_fmod = 1;
EXT2_UNLOCK(ump);
bdwrite(bp);
- return cg * fs->e2fs->e2fs_fpg + fs->e2fs->e2fs_first_dblock + bpref;
+ return (cg * fs->e2fs->e2fs_fpg + fs->e2fs->e2fs_first_dblock + bpref);
}
/*
@@ -379,15 +383,12 @@
ump = ip->i_ump;
bbp = (char *)bp->b_data;
- if (rp->rsv_end != EXT2_RSV_NOT_ALLOCATED) {
- start = dtogd(fs, rp->rsv_start + rp->rsv_alloc_hit);
- } else
+
+ if (dtog(fs, bpref) != cg)
goto find;
- if (dtog(fs, rp->rsv_start + rp->rsv_alloc_hit) != cg)
- goto find;
+ start = dtogd(fs, bpref);
- start = dtogd(fs, start);
if (isclr(bbp, start)) {
bno = start;
rp->rsv_alloc_hit++;
@@ -402,7 +403,7 @@
bno = ext2_mapsearch(fs, bbp, bpref);
if (bno < 0)
- return 0;
+ return (0);
gotit:
setbit(bbp, (daddr_t)bno);
@@ -412,7 +413,7 @@
fs->e2fs_fmod = 1;
EXT2_UNLOCK(ump);
bdwrite(bp);
- return cg * fs->e2fs->e2fs_fpg + fs->e2fs->e2fs_first_dblock + bno;
+ return (cg * fs->e2fs->e2fs_fpg + fs->e2fs->e2fs_first_dblock + bno);
}
/*
@@ -426,19 +427,17 @@
rp = ip->i_rsv;
- /*if (ip->i_rsv == NULL)*/
- /*return ext2_alloc_blk(fs, ip, cg, bp, bpref, rp);*/
-
/* If window is empty or bpref is not in reservation window,
* we will try to allocate a new reservation window.
* Then we try to allocate a free block.
*/
if (rp->rsv_end == EXT2_RSV_NOT_ALLOCATED)
- return ext2_alloc_new_rsv_win(ip, rp, bpref, fs, cg, bp);
+ return (ext2_alloc_new_rsv_win(ip, rp, bpref, fs, cg, bp));
else if (rp->rsv_start + rp->rsv_alloc_hit > rp->rsv_end)
- return ext2_alloc_new_rsv_win(ip, rp, rp->rsv_end, fs, cg, bp);
+ return (ext2_alloc_new_rsv_win(ip, rp, rp->rsv_end, fs, cg, bp));
- return ext2_alloc_blk(fs, ip, cg, bp, bpref, rp);
+ return (ext2_alloc_blk(fs, ip, cg, bp,
+ rp->rsv_start + rp->rsv_alloc_hit, rp));
}
/*
More information about the p4-projects
mailing list