Messages in this thread | | | Date | Fri, 5 Sep 2008 10:58:55 -0400 | From | "Bob Copeland" <> | Subject | Re: __getblk infinite loop |
| |
On Fri, Sep 5, 2008 at 1:38 AM, Andrew Morton <akpm@linux-foundation.org> wrote: > That loop does lock up on people occasionally - last time was in isofs, > because it had done an insane set_blocksize() earlier on. > > Yes, it's always a case of garbage in, garbage out (or nothing out, as > the case may be). > > No, it's not particularly programmer-friendly behaviour.
Ok, I think I get it now - sector_t 0x1d4000004 is in the addressable range (by one bit) since we can address 4G blocks of PAGE_SIZE and the FS is using a block size of 2048. grow_buffers() always returns 0 because find_or_create_page() fails adding a page with that huge offset into the pagecache (?), so we try to free memory and try again. Your patch here:
http://marc.info/?l=linux-kernel&m=117202372525279&w=2
doesn't apply to the situation since index is still technically a valid page offset.
So, I guess the answer is to deal with it in fsck and tell people "don't do that." -- Bob Copeland %% www.bobcopeland.com
| |