diff options
author | Nick Piggin <npiggin@suse.de> | 2007-10-16 04:25:06 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-16 12:42:55 -0400 |
commit | d79689c7038ea07182e8d7340786f7fcf8c77780 (patch) | |
tree | 8275c8ab209a8ecd03838f41e42228b053de00af /fs/xfs | |
parent | bfc1af650a8f36feba6b90a6c398325f885c00bc (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/xfs')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 19 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_lrw.c | 35 |
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 | ||
1510 | STATIC int | 1510 | STATIC int |
1511 | xfs_vm_prepare_write( | 1511 | xfs_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 | ||
1520 | STATIC sector_t | 1525 | STATIC 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 | |||
171 | unlock: | ||
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); |