From mboxrd@z Thu Jan 1 00:00:00 1970 From: Badari Pulavarty Subject: Re: get_blocks_t semantics Date: Thu, 21 Jul 2005 15:40:48 -0700 Message-ID: <42E02470.6070706@us.ibm.com> References: <1121868182.18164.9.camel@nexus.cs.bgu.ac.il> <42DF131D.1080802@us.ibm.com> <1121928397.31997.6.camel@nexus.cs.bgu.ac.il> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Cc: linux-fsdevel@vger.kernel.org Return-path: Received: from e2.ny.us.ibm.com ([32.97.182.142]:26821 "EHLO e2.ny.us.ibm.com") by vger.kernel.org with ESMTP id S261929AbVGUWkt (ORCPT ); Thu, 21 Jul 2005 18:40:49 -0400 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by e2.ny.us.ibm.com (8.12.11/8.12.11) with ESMTP id j6LMelxu016818 for ; Thu, 21 Jul 2005 18:40:47 -0400 Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay02.pok.ibm.com (8.12.10/NCO/VERS6.7) with ESMTP id j6LMelWU244528 for ; Thu, 21 Jul 2005 18:40:47 -0400 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.12.11/8.13.3) with ESMTP id j6LMek41000307 for ; Thu, 21 Jul 2005 18:40:47 -0400 To: tzachar@cs.bgu.ac.il In-Reply-To: <1121928397.31997.6.camel@nexus.cs.bgu.ac.il> Sender: linux-fsdevel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org Nir Tzachar wrote: > On Wed, 2005-07-20 at 20:14 -0700, Badari Pulavarty wrote: > >>Nir Tzachar wrote: >> >> >>>hello list. >>> >>>can someone please explain the exact semantics the get_block_t function >>>(which is passed to mpage_readpage(s)) should implement?? >>>i could not find any documentation, and existing code kind of baffled >>>me... >>> >>>my current understanding goes like this: >>>if the block is present, call map_bh on the bh, with the physical block >>>number. >>>else, if "create" is set, allocate a new block for the inode, and again >>>update the new physical block number. >>> >>>is this all?? >>> >>>thanks. >>> >> >>For a given file offset, get_block() function is supposed to return the >>physical disk block# of the block. (and size of the block). If "create" >>is one, it needs to allocate the block (if it doesn't already exist). >>Makes sense ? > > > from fs.h: > typedef int (get_block_t)(struct inode *inode, sector_t iblock, > struct buffer_head *bh_result, int create); > > so, iblock is the block number in the file, or the offset in the file?? iblock = fileoffset in represented sectors. (for example, file offset 4K = 8) > furthermore, what set_buffer_mapped (used in map_bh) does?? i could not > find it's definition anywhere?? When the filesystems map the fileoffset to a disk block, it returns the block# in the "bh->b_blocknr" and sets the flag to indicate that the buffer is mapped (to a disk block). If get_block() returned sucess, but if the buffer mapped is not set, means thats there is a hole. > > about create, "allocate a block" means just deciding which block should > be allocated, update the fs control structures, and return that block #, > right?? > yep. Thanks, Badari