From owner-freebsd-fs@FreeBSD.ORG Tue Oct 3 03:31:51 2006 Return-Path: X-Original-To: freebsd-fs@freebsd.org Delivered-To: freebsd-fs@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1680216A407 for ; Tue, 3 Oct 2006 03:31:51 +0000 (UTC) (envelope-from scottl@samsco.org) Received: from pooker.samsco.org (pooker.samsco.org [168.103.85.57]) by mx1.FreeBSD.org (Postfix) with ESMTP id A2C5643D46 for ; Tue, 3 Oct 2006 03:31:50 +0000 (GMT) (envelope-from scottl@samsco.org) Received: from pooker.samsco.home (pooker.samsco.home [192.168.254.1]) by pooker.samsco.org (8.13.4/8.13.4) with ESMTP id k933ViA5055539; Mon, 2 Oct 2006 21:31:49 -0600 (MDT) (envelope-from scottl@samsco.org) Date: Mon, 2 Oct 2006 21:31:44 -0600 (MDT) From: Scott Long To: Shane Adams In-Reply-To: <20061003011243.19533.qmail@web31812.mail.mud.yahoo.com> Message-ID: <20061002212040.V38801@pooker.samsco.org> References: <20061003011243.19533.qmail@web31812.mail.mud.yahoo.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Spam-Status: No, score=-1.4 required=3.8 tests=ALL_TRUSTED autolearn=failed version=3.1.1 X-Spam-Checker-Version: SpamAssassin 3.1.1 (2006-03-10) on pooker.samsco.org Cc: freebsd-fs@freebsd.org Subject: Re: curiosity between bread and UFS_BALLOC on struct buf X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Oct 2006 03:31:51 -0000 On Mon, 2 Oct 2006, Shane Adams wrote: > Hey all, > I've been puzzling with a bit of code. I'm creating a file from within > a kernel module, that works fine, but I've got a question if perhaps I'm > missing something: > > I use UFS_BALLOC to allocate some space. That function has a struct buf > thats returned. What I would expect is that I could manipulate the > bp->b_data field then do a bwrite and have my changes saved. Doesnt > workthat way. Only way I can get it to work is > > 1 UFS_BALLOC( ... ) > > 2 bwrite( .. ) > > 3 bread( ... ) > > 4 /* Make changes to what I read */ > > 5 bwrite() > > Seems like I could get rid of, 2 and 3. I'm not sure why I have to > bwrite the buffer returned from UFS_BALLOC. I dug around and there are > a few examples of where ffs/ufs manipulate the buffer returned from > UFS_BALLOC so I am guessing I'm missing a flag or something. > > Hope the question is clear enough! You shouldn't be groping around in UFS internals like this. Using VOP_WRITE will probably serve you much better. Look at something like kern_ktrace.c to see how file writing in the kernel is done. Scott