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:
committed by
Linus Torvalds
parent
bfc1af650a
commit
d79689c703
@@ -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 = {
|
|||||||
.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(
|
|||||||
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);
|
||||||
|
Reference in New Issue
Block a user