From owner-p4-projects@FreeBSD.ORG Fri Aug 20 11:19:04 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2F29710656AE; Fri, 20 Aug 2010 11:19:04 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E51FE1065693 for ; Fri, 20 Aug 2010 11:19:03 +0000 (UTC) (envelope-from lz@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id D1ACF8FC1B for ; Fri, 20 Aug 2010 11:19:03 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id o7KBJ37l085754 for ; Fri, 20 Aug 2010 11:19:03 GMT (envelope-from lz@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id o7KBJ3eG085751 for perforce@freebsd.org; Fri, 20 Aug 2010 11:19:03 GMT (envelope-from lz@FreeBSD.org) Date: Fri, 20 Aug 2010 11:19:03 GMT Message-Id: <201008201119.o7KBJ3eG085751@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to lz@FreeBSD.org using -f From: Zheng Liu To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 182649 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 20 Aug 2010 11:19:04 -0000 http://p4web.freebsd.org/@@182649?ac=10 Change 182649 by lz@gnehzuil-freebsd on 2010/08/20 11:18:29 Remove reservation window codes to prepare for generating a patch. Affected files ... .. //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2_alloc.c#3 edit .. //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2_balloc.c#3 edit .. //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2_inode.c#4 edit .. //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2_vfsops.c#10 edit .. //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2fs.h#7 edit .. //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/inode.h#6 edit Differences ... ==== //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2_alloc.c#3 (text+ko) ==== @@ -50,11 +50,7 @@ #include #include #include -#include -/* Just for clear */ -#define phy_blk(cg, fs) (((cg) * (fs->e2fs->e2fs_fpg)) + fs->e2fs->e2fs_first_dblock) - static daddr_t ext2_alloccg(struct inode *, int, daddr_t, int); static u_long ext2_dirpref(struct inode *); static void ext2_fserr(struct m_ext2fs *, uid_t, char *); @@ -63,521 +59,39 @@ int)); static daddr_t ext2_nodealloccg(struct inode *, int, daddr_t, int); static daddr_t ext2_mapsearch(struct m_ext2fs *, char *, daddr_t); - -/* For reservation window */ -static u_long ext2_alloc_blk(struct inode *, int, struct buf *, int32_t, struct ext2_rsv_win *); -static int ext2_alloc_new_rsv(struct inode *, int, struct buf *, int32_t); -static int ext2_bpref_in_rsv(struct ext2_rsv_win *, int32_t); -static int ext2_find_rsv(struct ext2_rsv_win *, struct ext2_rsv_win *, - struct m_ext2fs *, int32_t, int); -static void ext2_remove_rsv_win(struct m_ext2fs *, struct ext2_rsv_win *); -static u_long ext2_rsvalloc(struct m_ext2fs *, struct inode *, - int, struct buf *, int32_t, int); -static daddr_t ext2_search_next_block(struct m_ext2fs *, char *, int, int); -static struct ext2_rsv_win *ext2_search_rsv(struct ext2_rsv_win_tree *, int32_t); - -RB_GENERATE(ext2_rsv_win_tree, ext2_rsv_win, rsv_link, ext2_rsv_win_cmp); - /* * Allocate a block in the file system. * - * By given preference: - * It checks whether inode has a reservation window and preference - * is within it. If so, it will try to allocate a free block from - * this reservation window. - * Otherwise, it traverses RB tree to find a place, which is not - * in any window. then it inserts it to RB tree and tries to allocate - * a free block again. - * If fails, it will try to allocate a free block in other cylinder - * groups without perference. - */ - -/* - * Allocate a free block. + * A preference may be optionally specified. If a preference is given + * the following hierarchy is used to allocate a block: + * 1) allocate the requested block. + * 2) allocate a rotationally optimal block in the same cylinder. + * 3) allocate a block in the same cylinder group. + * 4) quadradically rehash into other cylinder groups, until an + * available block is located. + * If no block preference is given the following hierarchy is used + * to allocate a block: + * 1) allocate a block in the cylinder group that contains the + * inode for the file. + * 2) quadradically rehash into other cylinder groups, until an + * available block is located. * - * Firstly it checks whether reservation window is used. - * If it use reservation window, it will try to allocate a free - * block from the reservation window. If failed, it will traverse - * the bitmap to find a free block. - * If it not use reservation window, it will try to allocate - * a free block by bpref. If failed, it will traverse the bitmap - * to find a free block. - */ -static u_long -ext2_alloc_blk(struct inode *ip, int cg, struct buf *bp, - int32_t bpref, struct ext2_rsv_win *rp) -{ - struct m_ext2fs *fs; - struct ext2mount *ump; - int bno, start, end; - char *bbp; - - fs = ip->i_e2fs; - ump = ip->i_ump; - bbp = (char *)bp->b_data; - - if (fs->e2fs_gd[cg].ext2bgd_nbfree_lo == 0) - return (0); - - if (bpref < 0) - bpref = 0; - - /* Check whther it use reservation window */ - if (rp != NULL) { - /* - * If window's start is not in this cylinder group, - * try to allocate from the beginning of this group. - * Otherwise, try to allocate from the beginning of - * the window. - */ - if (dtog(fs, rp->rsv_start) != cg) - start = phy_blk(cg, fs); - else - start = rp->rsv_start; - - /* - * If window's end cross the end of this group, - * set end variable to the end of this group. - * Otherwise, set it to window's end. - */ - if (dtog(fs, rp->rsv_end) != cg) - end = fs->e2fs->e2fs_fpg; - else - end = rp->rsv_end; - - /* If preference block is within the window, try to allocate it. */ - if (start <= bpref && bpref <= end) { - bpref = dtogd(fs, bpref); - if (isclr(bbp, bpref)) { - rp->rsv_alloc_hit++; - bno = bpref; - goto gotit; - } - } else - bpref = dtogd(fs, rp->rsv_start); - } else { - if (dtog(fs, bpref) != cg) - bpref = 0; - if (bpref != 0) { - bpref = dtogd(fs, bpref); - if (isclr(bbp, bpref)) { - bno = bpref; - goto gotit; - } - } - } - - bno = ext2_mapsearch(fs, bbp, bpref); - if (bno < 0) - return (0); - -gotit: - setbit(bbp, (daddr_t)bno); - EXT2_LOCK(ump); - fs->e2fs->e2fs_fbcount_lo--; - fs->e2fs_gd[cg].ext2bgd_nbfree_lo--; - fs->e2fs_fmod = 1; - EXT2_UNLOCK(ump); - bdwrite(bp); - bno = phy_blk(cg, fs) + bno; - ip->i_next_alloc_goal = bno; - return (bno); -} - -/* - * Initialize reservation window per inode. - */ -void -ext2_init_rsv(struct inode *ip) -{ - struct ext2_rsv_win *rp; - - rp = malloc(sizeof(struct ext2_rsv_win), - M_EXT2NODE, M_WAITOK | M_ZERO); - - /* - * If malloc failed, we just do not use - * reservation window mechanism. - */ - if (rp == NULL) - return; - - rp->rsv_start = EXT2_RSV_NOT_ALLOCATED; - rp->rsv_end = EXT2_RSV_NOT_ALLOCATED; - - rp->rsv_goal_size = EXT2_RSV_DEFAULT_RESERVE_BLKS; - rp->rsv_alloc_hit = 0; - - ip->i_rsv = rp; -} - -/* - * Discard reservation window. - * - * It is called at following locations: - * 1. free an inode - * 2. sync inode - * 3. truncate a file - */ -void -ext2_discard_rsv(struct inode *ip) -{ - struct ext2_rsv_win *rp; - - if (ip->i_rsv == NULL) - return; - - rp = ip->i_rsv; - - /* If reservation window is empty, nothing to do */ - if (rp->rsv_end == EXT2_RSV_NOT_ALLOCATED) - return; - - EXT2_TREE_LOCK(ip->i_e2fs); - ext2_remove_rsv_win(ip->i_e2fs, rp); - EXT2_TREE_UNLOCK(ip->i_e2fs); - rp->rsv_goal_size = EXT2_RSV_DEFAULT_RESERVE_BLKS; -} - -/* - * Remove a ext2_rsv_win structure from RB tree. - */ -static void -ext2_remove_rsv_win(struct m_ext2fs *fs, struct ext2_rsv_win *rp) -{ - RB_REMOVE(ext2_rsv_win_tree, &fs->e2fs_rsv_tree, rp); - rp->rsv_start = EXT2_RSV_NOT_ALLOCATED; - rp->rsv_end = EXT2_RSV_NOT_ALLOCATED; - rp->rsv_alloc_hit = 0; -} - -/* - * Check bpref is in the reservation window. - */ -static int -ext2_bpref_in_rsv(struct ext2_rsv_win *rp, int32_t bpref) -{ - if (bpref >= 0 && (bpref < rp->rsv_start || bpref > rp->rsv_end)) - return (0); - - return (1); -} - -/* - * Search a tree node from RB tree. It includes the bpref or - * the previous one if bpref is not in any window. - */ -static struct ext2_rsv_win * -ext2_search_rsv(struct ext2_rsv_win_tree *root, int32_t start) -{ - struct ext2_rsv_win *prev, *next; - - if (RB_EMPTY(root)) - return (NULL); - - next = RB_ROOT(root); - do { - prev = next; - if (start < next->rsv_start) - next = RB_LEFT(next, rsv_link); - else if (start > next->rsv_end) - next = RB_RIGHT(next, rsv_link); - else - return (next); - } while (next != NULL); - - if (prev->rsv_start > start) { - next = RB_PREV(ext2_rsv_win_tree, root, prev); - if (next != NULL) - prev = next; - } - - return (prev); -} - -/* - * Find a reservation window by given range from start to - * the end of this cylinder group. - */ -static int -ext2_find_rsv(struct ext2_rsv_win *search, struct ext2_rsv_win *rp, - struct m_ext2fs *fs, int32_t start, int cg) -{ - struct ext2_rsv_win *rsv, *prev; - int32_t cur; - int size = rp->rsv_goal_size; - - if (search == NULL) { - rp->rsv_start = start & ~7; - rp->rsv_end = start + size - 1; - rp->rsv_alloc_hit = 0; - - RB_INSERT(ext2_rsv_win_tree, &fs->e2fs_rsv_tree, rp); - - return (0); - } - - /* - * Make the start of reservation window byte-aligned - * in order to can find a free block with bit operations - * in ext2_search_next_block() function. - */ - cur = start & ~7; - rsv = search; - prev = NULL; - - while (1) { - if (cur <= rsv->rsv_end) - cur = rsv->rsv_end + 1; - - if (dtog(fs, cur) != cg) - return (-1); - - prev = rsv; - rsv = RB_NEXT(ext2_rsv_win_tree, &fs->e2fs_rsv_tree, rsv); - - if (rsv == NULL) - break; - - if (cur + size <= rsv->rsv_start) - break; - } - - if (prev != rp && rp->rsv_end != EXT2_RSV_NOT_ALLOCATED) - ext2_remove_rsv_win(fs, rp); - - rp->rsv_start = cur; - rp->rsv_end = cur + size - 1; - rp->rsv_alloc_hit = 0; - - if (prev != rp) - RB_INSERT(ext2_rsv_win_tree, &fs->e2fs_rsv_tree, rp); - - return (0); -} - -/* - * Find a free block by given range from bpref to - * the end of this cylinder group. - */ -static daddr_t -ext2_search_next_block(struct m_ext2fs *fs, char *bbp, int bpref, int cg) -{ - daddr_t bno; - int start, loc, len, map, i; - - start = bpref / NBBY; - len = howmany(fs->e2fs->e2fs_fpg, NBBY) - start; - loc = skpc(0xff, len, &bbp[start]); - if (loc == 0) - return (-1); - - i = start + len - loc; - map = bbp[i]; - bno = i * NBBY; - for (i = 1; i < (1 << NBBY); i <<= 1, bno++) { - if ((map & i) == 0) - return (bno); - } - - return (-1); -} - -/* - * Allocate a new reservation window. - */ -static int -ext2_alloc_new_rsv(struct inode *ip, int cg, struct buf *bp, int32_t bpref) -{ - struct m_ext2fs *fs; - struct ext2_rsv_win *rp, *search; - char *bbp; - int start, size, ret; - - fs = ip->i_e2fs; - rp = ip->i_rsv; - bbp = bp->b_data; - size = rp->rsv_goal_size; - - if (bpref <= 0) - start = phy_blk(cg, fs); - else - start = bpref; - - /* Dynamically increase the size of window */ - if (rp->rsv_end != EXT2_RSV_NOT_ALLOCATED) { - if (rp->rsv_alloc_hit > - ((rp->rsv_end - rp->rsv_start + 1) / 2)) { - size = size * 2; - if (size > EXT2_RSV_MAX_RESERVE_BLKS) - size = EXT2_RSV_MAX_RESERVE_BLKS; - rp->rsv_goal_size = size; - } - } - - EXT2_TREE_LOCK(fs); - - search = ext2_search_rsv(&fs->e2fs_rsv_tree, start); - -repeat: - ret = ext2_find_rsv(search, rp, fs, start, cg); - if (ret < 0) { - if (rp->rsv_end != EXT2_RSV_NOT_ALLOCATED) - ext2_remove_rsv_win(fs, rp); - EXT2_TREE_UNLOCK(fs); - return (-1); - } - EXT2_TREE_UNLOCK(fs); - - start = dtogd(fs, rp->rsv_start); - start = ext2_search_next_block(fs, bbp, start, cg); - if (start < 0) { - EXT2_TREE_LOCK(fs); - if (rp->rsv_end != EXT2_RSV_NOT_ALLOCATED) - ext2_remove_rsv_win(fs, rp); - EXT2_TREE_UNLOCK(fs); - return (-1); - } - - start = phy_blk(cg, fs) + start; - if (start >= rp->rsv_start && start <= rp->rsv_end) - return (0); - - search = rp; - EXT2_TREE_LOCK(fs); - goto repeat; -} - -/* - * Allocate a free block from reservation window. + * A preference may be optionally specified. If a preference is given + * the following hierarchy is used to allocate a block: + * 1) allocate the requested block. + * 2) allocate a rotationally optimal block in the same cylinder. + * 3) allocate a block in the same cylinder group. + * 4) quadradically rehash into other cylinder groups, until an + * available block is located. + * If no block preference is given the following hierarchy is used + * to allocate a block: + * 1) allocate a block in the cylinder group that contains the + * inode for the file. + * 2) quadradically rehash into other cylinder groups, until an + * available block is located. */ -static u_long -ext2_rsvalloc(struct m_ext2fs *fs, struct inode *ip, int cg, - struct buf *bp, int32_t bpref, int size) -{ - struct ext2_rsv_win *rp; - int ret; - - rp = ip->i_rsv; - if (rp == NULL) - return (ext2_alloc_blk(ip, cg, bp, bpref, NULL)); - if (rp->rsv_end == EXT2_RSV_NOT_ALLOCATED || - !ext2_bpref_in_rsv(rp, bpref)) { - ret = ext2_alloc_new_rsv(ip, cg, bp, bpref); - if (ret < 0) - return (0); - } - - return (ext2_alloc_blk(ip, cg, bp, bpref, rp)); -} - -/* - * Allocate a block using reservation window in ext2 file system. - * - * NOTE: This function will replace the ext2_alloc() function. - */ int -ext2_alloc_rsv(struct inode *ip, int32_t lbn, int32_t bpref, - int size, struct ucred *cred, int32_t *bnp) -{ - struct m_ext2fs *fs; - struct ext2mount *ump; - struct buf *bp; - int32_t bno = 0; - int i, cg, error; - - *bnp = 0; - fs = ip->i_e2fs; - ump = ip->i_ump; - mtx_assert(EXT2_MTX(ump), MA_OWNED); - - if (size == fs->e2fs_bsize && fs->e2fs->e2fs_fbcount_lo == 0) - goto nospace; - if (cred->cr_uid != 0 && - fs->e2fs->e2fs_fbcount_lo < fs->e2fs->e2fs_rbcount_lo) - goto nospace; - - if (bpref >= fs->e2fs->e2fs_bcount_lo) - bpref = 0; - if (bpref == 0) - cg = ino_to_cg(fs, ip->i_number); - else - cg = dtog(fs, bpref); - - /* If cg has some free blocks, then try to allocate a free block from this cg */ - if (fs->e2fs_gd[cg].ext2bgd_nbfree_lo > 0) { - /* Read block bitmap from buffer */ - EXT2_UNLOCK(ump); - error = bread(ip->i_devvp, - fsbtodb(fs, fs->e2fs_gd[cg].ext2bgd_b_bitmap_lo), - (int)fs->e2fs_bsize, NOCRED, &bp); - if (error) { - brelse(bp); - goto ioerror; - } - - EXT2_RSV_LOCK(ip); - /* Try to allocate from reservation window */ - bno = ext2_rsvalloc(fs, ip, cg, bp, bpref, size); - EXT2_RSV_UNLOCK(ip); - if (bno > 0) - goto allocated; - - brelse(bp); - EXT2_LOCK(ump); - } - - /* Just need to try to allocate a free block from rest groups. */ - cg = (cg + 1) % fs->e2fs_gcount; - for (i = 1; i < fs->e2fs_gcount; i++) { - if (fs->e2fs_gd[cg].ext2bgd_nbfree_lo > 0) { - /* Read block bitmap from buffer */ - EXT2_UNLOCK(ump); - error = bread(ip->i_devvp, - fsbtodb(fs, fs->e2fs_gd[cg].ext2bgd_b_bitmap_lo), - (int)fs->e2fs_bsize, NOCRED, &bp); - if (error) { - brelse(bp); - goto ioerror; - } - - EXT2_RSV_LOCK(ip); - bno = ext2_rsvalloc(fs, ip, cg, bp, -1, size); - EXT2_RSV_UNLOCK(ip); - if (bno > 0) - goto allocated; - - brelse(bp); - EXT2_LOCK(ump); - } - - cg++; - if (cg == fs->e2fs_gcount) - cg = 0; - } - -allocated: - if (bno > 0) { - ip->i_blocks += btodb(fs->e2fs_bsize); - ip->i_flag |= IN_CHANGE | IN_UPDATE; - *bnp = bno; - return (0); - } - -nospace: - EXT2_UNLOCK(ump); - ext2_fserr(fs, cred->cr_uid, "file system full"); - uprintf("\n%s: write failed, file system is full\n", fs->e2fs_fsmnt); - return (ENOSPC); - -ioerror: - ext2_fserr(fs, cred->cr_uid, "file system IO error"); - uprintf("\n%s: write failed, file system IO error\n", fs->e2fs_fsmnt); - return EIO; -} - -int ext2_alloc(ip, lbn, bpref, size, cred, bnp) struct inode *ip; int32_t lbn, bpref; @@ -632,7 +146,7 @@ * Reallocate a sequence of blocks into a contiguous sequence of blocks. * * The vnode and an array of buffer pointers for a range of sequential - * logicar blocks to be made contiguous is given. The allocator attempts + * logical blocks to be made contiguous is given. The allocator attempts * to find a range of sequential blocks starting as close as possible to * an fs_rotdelay offset from the end of the allocation for the logical * block immediately preceding the current range. If successful, the @@ -1409,11 +923,9 @@ start = 0; loc = skpc(0xff, len, &bbp[start]); if (loc == 0) { - /* XXX: just for reservation window */ - return -1; - /*printf("start = %d, len = %d, fs = %s\n",*/ - /*start, len, fs->e2fs_fsmnt);*/ - /*panic("ext2fs_alloccg: map corrupted");*/ + printf("start = %d, len = %d, fs = %s\n", + start, len, fs->e2fs_fsmnt); + panic("ext2fs_alloccg: map corrupted"); /* NOTREACHED */ } } ==== //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2_balloc.c#3 (text+ko) ==== @@ -49,7 +49,6 @@ #include #include #include -#include /* * Balloc defines the structure of file system storage * by allocating the physical blocks on a device given @@ -137,14 +136,9 @@ else nsize = fs->e2fs_bsize; EXT2_LOCK(ump); -/* error = ext2_alloc(ip, lbn, ext2_blkpref(ip, lbn, (int)lbn, &ip->i_db[0], 0), nsize, cred, &newb); -*/ - error = ext2_alloc_rsv(ip, lbn, - ext2_blkpref(ip, lbn, (int)lbn, &ip->i_db[0], 0), - nsize, cred, &newb); if (error) return (error); bp = getblk(vp, lbn, nsize, 0, 0, 0); @@ -176,14 +170,9 @@ EXT2_LOCK(ump); pref = ext2_blkpref(ip, lbn, indirs[0].in_off + EXT2_NDIR_BLOCKS, &ip->i_db[0], 0); -/* if ((error = ext2_alloc(ip, lbn, pref, (int)fs->e2fs_bsize, cred, &newb))) return (error); -*/ - if ((error = ext2_alloc_rsv(ip, lbn, pref, - (int)fs->e2fs_bsize, cred, &newb))) - return (error); nb = newb; bp = getblk(vp, indirs[1].in_lbn, fs->e2fs_bsize, 0, 0, 0); bp->b_blkno = fsbtodb(fs, newb); @@ -222,10 +211,7 @@ if (pref == 0) pref = ext2_blkpref(ip, lbn, indirs[i].in_off, bap, bp->b_lblkno); -/* error = ext2_alloc(ip, lbn, pref, (int)fs->e2fs_bsize, cred, &newb); -*/ - error = ext2_alloc_rsv(ip, lbn, pref, (int)fs->e2fs_bsize, cred, &newb); if (error) { brelse(bp); return (error); @@ -264,18 +250,11 @@ EXT2_LOCK(ump); pref = ext2_blkpref(ip, lbn, indirs[i].in_off, &bap[0], bp->b_lblkno); -/* if ((error = ext2_alloc(ip, lbn, pref, (int)fs->e2fs_bsize, cred, &newb)) != 0) { brelse(bp); return (error); } -*/ - if ((error = ext2_alloc_rsv(ip, lbn, pref, - (int)fs->e2fs_bsize, cred, &newb)) != 0) { - brelse(bp); - return (error); - } nb = newb; nbp = getblk(vp, lbn, fs->e2fs_bsize, 0, 0, 0); nbp->b_blkno = fsbtodb(fs, nb); ==== //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2_inode.c#4 (text+ko) ==== @@ -52,7 +52,6 @@ #include #include #include -#include static int ext2_indirtrunc(struct inode *, int32_t, int32_t, int32_t, int, long *); @@ -155,10 +154,6 @@ fs = oip->i_e2fs; osize = oip->i_size; - EXT2_RSV_LOCK(oip); - ext2_discard_rsv(oip); - EXT2_RSV_UNLOCK(oip); - /* * Lengthen the size of the file. We must ensure that the * last byte of the file is allocated. Since the smallest @@ -490,10 +485,6 @@ if (prtactive && vrefcnt(vp) != 0) vprint("ext2_inactive: pushing active", vp); - EXT2_RSV_LOCK(ip); - ext2_discard_rsv(ip); - EXT2_RSV_UNLOCK(ip); - /* * Ignore inodes related to stale file handles. */ @@ -542,14 +533,6 @@ } vfs_hash_remove(vp); - EXT2_RSV_LOCK(ip); - if (ip->i_rsv != NULL) { - free(ip->i_rsv, M_EXT2NODE); - ip->i_rsv = NULL; - } - EXT2_RSV_UNLOCK(ip); - mtx_destroy(&ip->i_rsv_lock); - mtx_destroy(&ip->i_ext_lock); free(vp->v_data, M_EXT2NODE); ==== //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2_vfsops.c#10 (text+ko) ==== @@ -679,12 +679,6 @@ if ((error = compute_sb_data(devvp, ump->um_e2fs->e2fs, ump->um_e2fs))) goto out; - /* Initial reservation window index and lock */ - bzero(&ump->um_e2fs->e2fs_rsv_lock, sizeof(struct mtx)); - mtx_init(&ump->um_e2fs->e2fs_rsv_lock, - "rsv tree lock", NULL, MTX_DEF); - RB_INIT(&ump->um_e2fs->e2fs_rsv_tree); - brelse(bp); bp = NULL; fs = ump->um_e2fs; @@ -784,7 +778,6 @@ g_topology_unlock(); PICKUP_GIANT(); vrele(ump->um_devvp); - mtx_destroy(&fs->e2fs_rsv_lock); free(fs->e2fs_fg, M_EXT2MNT); free(fs->e2fs_gd, M_EXT2MNT); free(fs->e2fs_contigdirs, M_EXT2MNT); @@ -1029,15 +1022,6 @@ ip->i_prealloc_count = 0; ip->i_prealloc_block = 0; - /* initialize rsv lock and rsv data structure */ - bzero(&ip->i_rsv_lock, sizeof(struct mtx)); - mtx_init(&ip->i_rsv_lock, "inode rsv lock", NULL, MTX_DEF); - EXT2_RSV_LOCK(ip); - ip->i_rsv = NULL; - if (ip->i_rsv == NULL) - ext2_init_rsv(ip); - EXT2_RSV_UNLOCK(ip); - /* initialize ext lock */ bzero(&ip->i_ext_lock, sizeof(struct mtx)); mtx_init(&ip->i_ext_lock, "inode ext lock", NULL, MTX_DEF); ==== //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2fs.h#7 (text+ko) ==== @@ -39,7 +39,6 @@ #include #include -#include #include /* @@ -215,9 +214,6 @@ off_t e2fs_maxfilesize; struct ext2_gd *e2fs_gd; /* Group Descriptors */ - struct mtx e2fs_rsv_lock; /* Protect reservation window RB tree */ - struct ext2_rsv_win_tree e2fs_rsv_tree; /* Reservation window index */ - u_int8_t e2fs_log_gpf; /* FLEX_BG group size */ int e2fs_descpbbits; struct ext4_flex_groups *e2fs_fg; ==== //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/inode.h#6 (text+ko) ==== @@ -43,7 +43,6 @@ #include #include -#include #include #define ROOTINO ((ino_t)2) @@ -106,10 +105,6 @@ u_int32_t i_uid; /* File owner. */ u_int32_t i_gid; /* File group. */ - /* reservation window */ - struct mtx i_rsv_lock; /* Protects i_rsv */ - struct ext2_rsv_win *i_rsv; /* Reservation window */ - /* ext4 extents support */ struct mtx i_ext_lock; /* this lock only is required in read/write mode but we still use it in read-only mode. */