xfs: convert to new aops

Signed-off-by: Nick Piggin <npiggin@suse.de>
Cc: David Chinner <dgc@sgi.com>
Cc: Timothy Shimmin <tes@sgi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Nick Piggin 2007-10-16 01:25:06 -07:00 committed by Linus Torvalds
parent bfc1af650a
commit d79689c703
2 changed files with 24 additions and 30 deletions

View File

@ -1508,13 +1508,18 @@ xfs_vm_direct_IO(
}
STATIC int
xfs_vm_prepare_write(
xfs_vm_write_begin(
struct file *file,
struct page *page,
unsigned int from,
unsigned int to)
struct address_space *mapping,
loff_t pos,
unsigned len,
unsigned flags,
struct page **pagep,
void **fsdata)
{
return block_prepare_write(page, from, to, xfs_get_blocks);
*pagep = NULL;
return block_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
xfs_get_blocks);
}
STATIC sector_t
@ -1568,8 +1573,8 @@ const struct address_space_operations xfs_address_space_operations = {
.sync_page = block_sync_page,
.releasepage = xfs_vm_releasepage,
.invalidatepage = xfs_vm_invalidatepage,
.prepare_write = xfs_vm_prepare_write,
.commit_write = generic_commit_write,
.write_begin = xfs_vm_write_begin,
.write_end = generic_write_end,
.bmap = xfs_vm_bmap,
.direct_IO = xfs_vm_direct_IO,
.migratepage = buffer_migrate_page,

View File

@ -134,45 +134,34 @@ xfs_iozero(
loff_t pos, /* offset in file */
size_t count) /* size of data to zero */
{
unsigned bytes;
struct page *page;
struct address_space *mapping;
int status;
mapping = ip->i_mapping;
do {
unsigned long index, offset;
unsigned offset, bytes;
void *fsdata;
offset = (pos & (PAGE_CACHE_SIZE -1)); /* Within page */
index = pos >> PAGE_CACHE_SHIFT;
bytes = PAGE_CACHE_SIZE - offset;
if (bytes > count)
bytes = count;
status = -ENOMEM;
page = grab_cache_page(mapping, index);
if (!page)
break;
status = mapping->a_ops->prepare_write(NULL, page, offset,
offset + bytes);
status = pagecache_write_begin(NULL, mapping, pos, bytes,
AOP_FLAG_UNINTERRUPTIBLE,
&page, &fsdata);
if (status)
goto unlock;
break;
zero_user_page(page, offset, bytes, KM_USER0);
status = mapping->a_ops->commit_write(NULL, page, offset,
offset + bytes);
if (!status) {
pos += bytes;
count -= bytes;
}
unlock:
unlock_page(page);
page_cache_release(page);
if (status)
break;
status = pagecache_write_end(NULL, mapping, pos, bytes, bytes,
page, fsdata);
WARN_ON(status <= 0); /* can't return less than zero! */
pos += bytes;
count -= bytes;
status = 0;
} while (count);
return (-status);