mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
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:
parent
bfc1af650a
commit
d79689c703
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user