in simple words--- simple maths
--------------|----------------------------------|----------------------------------|---------------------------------|
0 page1 (1*2^12) page 2 2*2^12 page3
3*2^12 page4 4*2^12
now page_nr=3
we want last byte of page 3
inode->i_size=4*2^12
then
last_byte -= page_nr << PAGE_CACHE_SHIFT;
means
last_byte = 4*2^12 - 3*2^12
last_byte = 1*2^12
NOT True that is isnt it --- please CMIIW
but
actually
last_byte of page_nr=3 is 3*2^12
Nidhi
On Wed, Nov 4, 2009 at 2:47 PM, Rajat Jain <[email protected]> wrote:
> Hi,
>
> The function calculates the last byte in a page OF A PARTICULAR FILE.
>
> static unsigned
> ext2_last_byte(struct inode *inode, unsigned long page_nr)
> {
> unsigned last_byte = inode->i_size;
> /* Currently, last_byte = file size */
>
> last_byte -= page_nr << PAGE_CACHE_SHIFT;
> /* Currently, last_byte = file size - no of bytes in file BEFORE this
> page */
> /* implies last_byte = no of bytes in file in this page and any
> subsequent pages */
>
> if (last_byte > PAGE_CACHE_SIZE)
> last_byte = PAGE_CACHE_SIZE;
> /* Simply check if this is NOT the last page, then obviously last byte
> of file in THIS page = page size */
>
> return last_byte;
> /* Otherwise since this is the last page, leave last_byte as is */
> }
>
> Thanks,
>
> Rajat
>
>
> ________________________________
>
> From: [email protected]
> [mailto:[email protected]] On Behalf Of nidhi mittal
> hada
> Sent: Wednesday, November 04, 2009 2:19 PM
> To: Kernelnewbies
> Subject: doubt abt a function in ext2
>
>
> /*
> * Return the offset into page `page_nr' of the last valid
> * byte in that page, plus one.
> */
>
> static unsigned
> ext2_last_byte(struct inode *inode, unsigned long page_nr)
> {
> unsigned last_byte = inode->i_size;
>
> last_byte -= page_nr << PAGE_CACHE_SHIFT;
> if (last_byte > PAGE_CACHE_SIZE)
> last_byte = PAGE_CACHE_SIZE;
> return last_byte;
> }
>
>
> tht's a small function to get last byte of page number page_nr
> but it seems to be wrong
> as
> last byte of page_nr if byte number start with 0 for page_nr 1
>
>
> last_byte should be = page_nr * (2^12 )
>
> why its been subtracted from total size i_size?????
>
> pl tell me what i am missing ?
> Nidhi
>
>
>
>
>
> --
> Thanks & Regards
> Nidhi Mittal Hada
>
>
>
--
Thanks & Regards
Nidhi Mittal Hada