larger b_size, and misc fixlets
PATCH 6/15 larger b_size, and misc fixlets
Miscellany.
- make the printk in buffer_io_error() sector_t-aware.
- Some buffer.c cleanups from AntonA: remove a couple of !uptodate checks, and set a new buffer's b_blocknr to -1 in a more sensible place.
- Make buffer_head.b_size a 32-bit quantity. Needed for 64k pagesize on ia64. Does not increase sizeof(struct buffer_head).
=====================================
fs/buffer.c renamed from fs/buffer.c~sector_t-printing +9 -13
@@ -179,8 +179,8 @@ __clear_page_buffers(struct page *page)static void buffer_io_error (struct buffer_head *bh) { -printk (KERN_ERR "Buffer I/O error on device %s, logical block %ld\n" , -bdevname (bh->b_bdev), bh->b_blocknr); +printk (KERN_ERR "Buffer I/O error on device %s, logical block %Ld\n" , +bdevname (bh->b_bdev), (u64 )bh->b_blocknr); }/*
@@ -189,12 +189,12 @@ static void buffer_io_error(struct buffe*/ void end_buffer_io_sync (struct buffer_head *bh,int uptodate) { -if (!uptodate) -buffer_io_error (bh); -if (uptodate) +if (uptodate) {set_buffer_uptodate (bh); -else + }else { +buffer_io_error (bh);clear_buffer_uptodate (bh); + }unlock_buffer (bh);put_bh (bh); }
@@ -519,14 +519,12 @@ static void end_buffer_async_read(structBUG_ON (!buffer_async_read (bh)); -if (!uptodate) -buffer_io_error (bh); - page = bh->b_page;if (uptodate) {set_buffer_uptodate (bh); }else {clear_buffer_uptodate (bh); +buffer_io_error (bh);SetPageError (page); }
@@ -579,13 +577,11 @@ static void end_buffer_async_write(strucBUG_ON (!buffer_async_write (bh)); -if (!uptodate) -buffer_io_error (bh); - page = bh->b_page;if (uptodate) {set_buffer_uptodate (bh); }else { +buffer_io_error (bh);clear_buffer_uptodate (bh);SetPageError (page); }
@@ -907,6 +903,7 @@ try_again: bh->b_bdev =NULL ; bh->b_this_page = head; + bh->b_blocknr =-1 ; head = bh; bh->b_state =0 ;
@@ -2442,7 +2439,6 @@ static void init_buffer_head(void *data,struct buffer_head * bh = (struct buffer_head *)data;memset (bh,0 ,sizeof (*bh)); - bh->b_blocknr =-1 ;INIT_LIST_HEAD (&bh->b_assoc_buffers); } }
include/linux/buffer_head.h renamed from include/linux/buffer_head.h~sector_t-printing +1 -1
@@ -44,7 +44,7 @@ struct buffer_head {struct page *b_page;/* the page this bh is mapped to */ sector_t b_blocknr;/* block number */ -unsigned short b_size;/* block size */ +u32 b_size;/* block size */ char *b_data;/* pointer to data block */ struct block_device *b_bdev;
-
fs/buffer.c __clear_page_buffers(struct page *page) · line 184
Quoted 13 lines · Andrew Morton
- make the printk in
buffer_io_error()sector_t-aware.
=====================================fs/buffer.c renamed from fs/buffer.c~sector_t-printing +2
-2@@ -179,8 +179,8 @@ __clear_page_buffers(struct page *page)static void buffer_io_error (struct buffer_head *bh) { -printk (KERN_ERR "Buffer I/O error on device %s, logical block %ld\n" , -bdevname (bh->b_bdev), bh->b_blocknr); +printk (KERN_ERR "Buffer I/O error on device %s, logical block %Ld\n" , +bdevname (bh->b_bdev), (u64 )bh->b_blocknr); }
Not that I'm a 64-bit system user/developer, but it is my understanding that u64 == long on a 64-bit platform, so your cast to u64 does not actually change the type of b_blocknr as far as printk is concerned. You would need to cast it to unsigned long long instead.
Cheers, Andreas
--
Andreas Dilger
http://www-mddsp.enel.ucalgary.ca/People/adilger/
http://sourceforge.net/projects/ext2resize/
Quoted 8 lines · Andreas Dilger
Quoted 6 lines · Andrew Morton
- make the printk in
buffer_io_error()sector_t-aware.
=====================================fs/buffer.c Sun May 19 12:02:57 2002 renamed from fs/buffer.c~sector_t-printing Sun May 19 11:49:47 2002 +0
-0@@ -179,8 +179,8 @@ __clear_page_buffers(struct page *page)
Quoted 13 lines
fs/buffer.c Sun May 19 12:02:57 2002 __clear_page_buffers(struct page *page) · line 184
Quoted 7 lines
fs/buffer.c Sun May 19 12:02:57 2002 renamed from fs/buffer.c~sector_t-printing Sun May 19 11:49:47 2002 +2
-2static void buffer_io_error(struct buffer_head *bh) { - printk(KERN_ERR "Buffer I/O error on device %s, logical block %ld\n", - bdevname(bh->b_bdev), bh->b_blocknr); + printk(KERN_ERR "Buffer I/O error on device %s, logical block %Ld\n", + bdevname(bh->b_bdev), (u64)bh->b_blocknr); }Not that I'm a 64-bit system user/developer, but it is my understanding that u64 == long on a 64-bit platform, so your cast to u64 does not actually change the type of
b_blocknras far as printk is concerned. You would need to cast it to unsigned long long instead.
Yes, I suppose so. That more closely matches what "%L" does.
-
Quoted 7 lines · Andrew Morton
Quoted 6 lines · Andreas Dilger
Quoted 4 lines · Andrew Morton
fs/buffer.c renamed from fs/buffer.c~sector_t-printing +2
-2-printk (KERN_ERR "Buffer I/O error on device %s, logical block %ld\n" , -bdevname (bh->b_bdev), bh->b_blocknr); +printk (KERN_ERR "Buffer I/O error on device %s, logical block %Ld\n" , +bdevname (bh->b_bdev), (u64 )bh->b_blocknr);
Quoted 6 lines
Quoted 4 lines
Not that I'm a 64-bit system user/developer, but it is my understanding that u64 == long on a 64-bit platform, so your cast to u64 does not actually change the type of
b_blocknras far as printk is concerned. You would need to cast it to unsigned long long instead.Yes, I suppose so. That more closely matches what "%L" does.
/me can't help it: Didn't I say earlier on that one has to use (unsigned) long long and not u64? (-; But noone would listen...
But to be fully correct, if you want unsigned long long you really ought to write %Lu not %Ld... (-8
Cheers,
Anton
Signature · 3 lines
Anton Altaparmakov <aia21 at cantab.net> (replace at with @) Linux NTFS maintainer / IRC: #ntfs on irc.openprojects.net WWW: http://linux-ntfs.sf.net/ & http://www-stu.christs.cam.ac.uk/~aia21/