aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorNick Piggin <npiggin@suse.de>2007-10-16 04:25:06 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-16 12:42:55 -0400
commitd79689c7038ea07182e8d7340786f7fcf8c77780 (patch)
tree8275c8ab209a8ecd03838f41e42228b053de00af /fs
parentbfc1af650a8f36feba6b90a6c398325f885c00bc (diff)
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>
Diffstat (limited to 'fs')
-rw-r--r--fs/xfs/linux-2.6/xfs_aops.c19
-rw-r--r--fs/xfs/linux-2.6/xfs_lrw.c35
2 files changed, 24 insertions, 30 deletions
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c
index 6f4c29e9c3d9..354d68a32d4a 100644
--- a/fs/xfs/linux-2.6/xfs_aops.c
+++ b/fs/xfs/linux-2.6/xfs_aops.c
@@ -1508,13 +1508,18 @@ xfs_vm_direct_IO(
1508} 1508}
1509 1509
1510STATIC int 1510STATIC int
1511xfs_vm_prepare_write( 1511xfs_vm_write_begin(
1512 struct file *file, 1512 struct file *file,
1513 struct page *page, 1513 struct address_space *mapping,
1514 unsigned int from, 1514 loff_t pos,
1515 unsigned int to) 1515 unsigned len,
1516 unsigned flags,
1517 struct page **pagep,
1518 void **fsdata)
1516{ 1519{
1517 return block_prepare_write(page, from, to, xfs_get_blocks); 1520 *pagep = NULL;
1521 return block_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
1522 xfs_get_blocks);
1518} 1523}
1519 1524
1520STATIC sector_t 1525STATIC sector_t
@@ -1568,8 +1573,8 @@ const struct address_space_operations xfs_address_space_operations = {
1568 .sync_page = block_sync_page, 1573 .sync_page = block_sync_page,
1569 .releasepage = xfs_vm_releasepage, 1574 .releasepage = xfs_vm_releasepage,
1570 .invalidatepage = xfs_vm_invalidatepage, 1575 .invalidatepage = xfs_vm_invalidatepage,
1571 .prepare_write = xfs_vm_prepare_write, 1576 .write_begin = xfs_vm_write_begin,
1572 .commit_write = generic_commit_write, 1577 .write_end = generic_write_end,
1573 .bmap = xfs_vm_bmap, 1578 .bmap = xfs_vm_bmap,
1574 .direct_IO = xfs_vm_direct_IO, 1579 .direct_IO = xfs_vm_direct_IO,
1575 .migratepage = buffer_migrate_page, 1580 .migratepage = buffer_migrate_page,
diff --git a/fs/xfs/linux-2.6/xfs_lrw.c b/fs/xfs/linux-2.6/xfs_lrw.c
index 765ec16a6e39..7e7aeb4c8a08 100644
--- a/fs/xfs/linux-2.6/xfs_lrw.c
+++ b/fs/xfs/linux-2.6/xfs_lrw.c
@@ -134,45 +134,34 @@ xfs_iozero(
134 loff_t pos, /* offset in file */ 134 loff_t pos, /* offset in file */
135 size_t count) /* size of data to zero */ 135 size_t count) /* size of data to zero */
136{ 136{
137 unsigned bytes;
138 struct page *page; 137 struct page *page;
139 struct address_space *mapping; 138 struct address_space *mapping;
140 int status; 139 int status;
141 140
142 mapping = ip->i_mapping; 141 mapping = ip->i_mapping;
143 do { 142 do {
144 unsigned long index, offset; 143 unsigned offset, bytes;
144 void *fsdata;
145 145
146 offset = (pos & (PAGE_CACHE_SIZE -1)); /* Within page */ 146 offset = (pos & (PAGE_CACHE_SIZE -1)); /* Within page */
147 index = pos >> PAGE_CACHE_SHIFT;
148 bytes = PAGE_CACHE_SIZE - offset; 147 bytes = PAGE_CACHE_SIZE - offset;
149 if (bytes > count) 148 if (bytes > count)
150 bytes = count; 149 bytes = count;
151 150
152 status = -ENOMEM; 151 status = pagecache_write_begin(NULL, mapping, pos, bytes,
153 page = grab_cache_page(mapping, index); 152 AOP_FLAG_UNINTERRUPTIBLE,
154 if (!page) 153 &page, &fsdata);
155 break;
156
157 status = mapping->a_ops->prepare_write(NULL, page, offset,
158 offset + bytes);
159 if (status) 154 if (status)
160 goto unlock; 155 break;
161 156
162 zero_user_page(page, offset, bytes, KM_USER0); 157 zero_user_page(page, offset, bytes, KM_USER0);
163 158
164 status = mapping->a_ops->commit_write(NULL, page, offset, 159 status = pagecache_write_end(NULL, mapping, pos, bytes, bytes,
165 offset + bytes); 160 page, fsdata);
166 if (!status) { 161 WARN_ON(status <= 0); /* can't return less than zero! */
167 pos += bytes; 162 pos += bytes;
168 count -= bytes; 163 count -= bytes;
169 } 164 status = 0;
170
171unlock:
172 unlock_page(page);
173 page_cache_release(page);
174 if (status)
175 break;
176 } while (count); 165 } while (count);
177 166
178 return (-status); 167 return (-status);