X-Git-Url: http://pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=fs%2Fhfs%2Fextent.c;h=c176f67ba0a5488c116d283b444dc66f0844fa6d;hb=e93be88d7ec9d183c1cca51eabe040c051cdb687;hp=5ea6b3d45eaa608f9ab38887de18ccb8477dacc2;hpb=20445cc9159089d9d6b88d7864578efb10eb6590;p=linux-2.6-omap-h63xx.git diff --git a/fs/hfs/extent.c b/fs/hfs/extent.c index 5ea6b3d45ea..c176f67ba0a 100644 --- a/fs/hfs/extent.c +++ b/fs/hfs/extent.c @@ -464,23 +464,20 @@ void hfs_file_truncate(struct inode *inode) (long long)HFS_I(inode)->phys_size, inode->i_size); if (inode->i_size > HFS_I(inode)->phys_size) { struct address_space *mapping = inode->i_mapping; + void *fsdata; struct page *page; int res; + /* XXX: Can use generic_cont_expand? */ size = inode->i_size - 1; - page = grab_cache_page(mapping, size >> PAGE_CACHE_SHIFT); - if (!page) - return; - size &= PAGE_CACHE_SIZE - 1; - size++; - res = mapping->a_ops->prepare_write(NULL, page, size, size); - if (!res) - res = mapping->a_ops->commit_write(NULL, page, size, size); + res = pagecache_write_begin(NULL, mapping, size+1, 0, + AOP_FLAG_UNINTERRUPTIBLE, &page, &fsdata); + if (!res) { + res = pagecache_write_end(NULL, mapping, size+1, 0, 0, + page, fsdata); + } if (res) inode->i_size = HFS_I(inode)->phys_size; - unlock_page(page); - page_cache_release(page); - mark_inode_dirty(inode); return; } else if (inode->i_size == HFS_I(inode)->phys_size) return;