提交 d79689c7 编写于 作者: N Nick Piggin 提交者: Linus Torvalds

xfs: convert to new aops

Signed-off-by: NNick Piggin <npiggin@suse.de>
Cc: David Chinner <dgc@sgi.com>
Cc: Timothy Shimmin <tes@sgi.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 bfc1af65
......@@ -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,
......
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册