From owner-p4-projects@FreeBSD.ORG Sat Jul 4 17:53:09 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 840301065675; Sat, 4 Jul 2009 17:53:09 +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 448811065672 for ; Sat, 4 Jul 2009 17:53:09 +0000 (UTC) (envelope-from truncs@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 32B248FC14 for ; Sat, 4 Jul 2009 17:53:09 +0000 (UTC) (envelope-from truncs@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n64Hr96g010517 for ; Sat, 4 Jul 2009 17:53:09 GMT (envelope-from truncs@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n64Hr9YH010515 for perforce@freebsd.org; Sat, 4 Jul 2009 17:53:09 GMT (envelope-from truncs@FreeBSD.org) Date: Sat, 4 Jul 2009 17:53:09 GMT Message-Id: <200907041753.n64Hr9YH010515@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to truncs@FreeBSD.org using -f From: Aditya Sarawgi To: Perforce Change Reviews Cc: Subject: PERFORCE change 165601 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 04 Jul 2009 17:53:10 -0000 http://perforce.freebsd.org/chv.cgi?CH=165601 Change 165601 by truncs@aditya on 2009/07/04 17:53:04 New implementation of blkfree. Affected files ... .. //depot/projects/soc2009/soc_ext2fs/src/sys/gnu/fs/ext2fs/ext2_alloc.c#28 edit Differences ... ==== //depot/projects/soc2009/soc_ext2fs/src/sys/gnu/fs/ext2fs/ext2_alloc.c#28 (text+ko) ==== @@ -456,12 +456,40 @@ long size; { struct m_ext2fs *fs; + struct buf *bp; + struct ext2_gd *gdp = NULL; + int cg, error; + char *bbp; fs = ip->i_e2fs; - /* - * call Linux code with mount *, block number, count - */ - ext2_free_blocks(ITOV(ip)->v_mount, bno, size / fs->e2fs_fsize); + cg = dtog(fs, bno); + gdp = get_group_desc2(fs, cg, NULL); + if ((u_int)bno >= fs->e2fs->e2fs_bcount) { + printf("bad block %lld, ino %llu\n", (long long)bno, + (unsigned long long)ip->i_number); + ext2_fserr(fs, ip->i_uid, "bad block"); + return; + } + error = bread(ip->i_devvp, + fsbtodb(fs, gdp->ext2bgd_b_bitmap), + (int)fs->e2fs_bsize, NOCRED, &bp); + if (error) { + brelse(bp); + return; + } + bbp = (char *)bp->b_data; + bno = dtogd(fs, bno); + if (isclr(bbp, bno)) { + printf("block = %lld, fs = %s\n", + (long long)bno, fs->e2fs_fsmnt); + panic("blkfree: freeing free block"); + } + clrbit(bbp, bno); + fs->e2fs->e2fs_fbcount++; + gdp->ext2bgd_nbfree++; + + fs->e2fs_fmod = 1; + bdwrite(bp); } /*