提交 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( ...@@ -1508,13 +1508,18 @@ xfs_vm_direct_IO(
} }
STATIC int STATIC int
xfs_vm_prepare_write( xfs_vm_write_begin(
struct file *file, struct file *file,
struct page *page, struct address_space *mapping,
unsigned int from, loff_t pos,
unsigned int to) 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 STATIC sector_t
...@@ -1568,8 +1573,8 @@ const struct address_space_operations xfs_address_space_operations = { ...@@ -1568,8 +1573,8 @@ const struct address_space_operations xfs_address_space_operations = {
.sync_page = block_sync_page, .sync_page = block_sync_page,
.releasepage = xfs_vm_releasepage, .releasepage = xfs_vm_releasepage,
.invalidatepage = xfs_vm_invalidatepage, .invalidatepage = xfs_vm_invalidatepage,
.prepare_write = xfs_vm_prepare_write, .write_begin = xfs_vm_write_begin,
.commit_write = generic_commit_write, .write_end = generic_write_end,
.bmap = xfs_vm_bmap, .bmap = xfs_vm_bmap,
.direct_IO = xfs_vm_direct_IO, .direct_IO = xfs_vm_direct_IO,
.migratepage = buffer_migrate_page, .migratepage = buffer_migrate_page,
......
...@@ -134,45 +134,34 @@ xfs_iozero( ...@@ -134,45 +134,34 @@ xfs_iozero(
loff_t pos, /* offset in file */ loff_t pos, /* offset in file */
size_t count) /* size of data to zero */ size_t count) /* size of data to zero */
{ {
unsigned bytes;
struct page *page; struct page *page;
struct address_space *mapping; struct address_space *mapping;
int status; int status;
mapping = ip->i_mapping; mapping = ip->i_mapping;
do { do {
unsigned long index, offset; unsigned offset, bytes;
void *fsdata;
offset = (pos & (PAGE_CACHE_SIZE -1)); /* Within page */ offset = (pos & (PAGE_CACHE_SIZE -1)); /* Within page */
index = pos >> PAGE_CACHE_SHIFT;
bytes = PAGE_CACHE_SIZE - offset; bytes = PAGE_CACHE_SIZE - offset;
if (bytes > count) if (bytes > count)
bytes = count; bytes = count;
status = -ENOMEM; status = pagecache_write_begin(NULL, mapping, pos, bytes,
page = grab_cache_page(mapping, index); AOP_FLAG_UNINTERRUPTIBLE,
if (!page) &page, &fsdata);
break;
status = mapping->a_ops->prepare_write(NULL, page, offset,
offset + bytes);
if (status) if (status)
goto unlock; break;
zero_user_page(page, offset, bytes, KM_USER0); zero_user_page(page, offset, bytes, KM_USER0);
status = mapping->a_ops->commit_write(NULL, page, offset, status = pagecache_write_end(NULL, mapping, pos, bytes, bytes,
offset + bytes); page, fsdata);
if (!status) { WARN_ON(status <= 0); /* can't return less than zero! */
pos += bytes; pos += bytes;
count -= bytes; count -= bytes;
} status = 0;
unlock:
unlock_page(page);
page_cache_release(page);
if (status)
break;
} while (count); } while (count);
return (-status); return (-status);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册