On Thu, 1 Mar 2001, Linus Torvalds wrote: > In article <[EMAIL PROTECTED]>, > Alexander Viro <[EMAIL PROTECTED]> wrote: > > > >Alan, fix is really quite simple. Especially if you have vmtruncate() > >returning int (ac1 used to do it, I didn't check later ones). Actually > >just a generic_cont_expand() done on expanding path in vmtruncate() > >will be enough - it should be OK for all cases, including normal > >filesystems. <grabbing -ac7> > > > >OK, any brave soul to test that? All I can promise that it builds. > > This looks like it would create a dummy block even for non-broken > filesystems (ie truncating a file to be larger on ext2 would create a > block, no?). While that would work, it would also waste disk-space. <checking> yeah... Frankly, I'd just do --- buffer.c Thu Mar 1 15:16:34 2001 +++ buffer.c.old Thu Mar 1 15:17:55 2001 @@ -1571,6 +1571,9 @@ struct buffer_head *bh, *head, *wait[2], **wait_bh=wait; char *kaddr = kmap(page); + if (from >= to) + goto done; + blocksize = inode->i_sb->s_blocksize; if (!page->buffers) create_empty_buffers(page, inode->i_dev, blocksize); @@ -1626,6 +1629,7 @@ if (!buffer_uptodate(*wait_bh)) goto out; } +done: return 0; out: bh = head; @@ -1648,6 +1652,9 @@ unsigned blocksize; struct buffer_head *bh, *head; + if (from >= to) + goto done; + blocksize = inode->i_sb->s_blocksize; for(bh = head = page->buffers, block_start = 0; @@ -1677,6 +1684,7 @@ */ if (!partial) SetPageUptodate(page); +done: return 0; } - obviously correct, avoids disk waste and since we do it in __block... everything keeps working (block_... versions are obviously OK, cont_... also does the right thing). Dunno. I like the idea of expanding truncate() being the same as lseek() + empty write(). After all, that's what it is. Comments? Cheers, Al - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/