diff options
author | David Howells <dhowells@redhat.com> | 2007-05-10 06:15:21 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-10 12:26:52 -0400 |
commit | b9b1f8d5930a813879278d0cbfc8c658d6a038dc (patch) | |
tree | 1879e0e70ce946e3519a205698f4dd1b34a3a7ea /fs/afs/write.c | |
parent | 218e180e7ea5334e1f94121940ba82cd1f0f4e58 (diff) |
AFS: write support fixes
AFS write support fixes:
(1) Support large files using the 64-bit file access operations if available
on the server.
(2) Use kmap_atomic() rather than kmap() in afs_prepare_page().
(3) Don't do stuff in afs_writepage() that's done by the caller.
[akpm@linux-foundation.org: fix right shift count >= width of type]
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/afs/write.c')
-rw-r--r-- | fs/afs/write.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/fs/afs/write.c b/fs/afs/write.c index 83ff29262816..aa03d43984b3 100644 --- a/fs/afs/write.c +++ b/fs/afs/write.c | |||
@@ -122,7 +122,7 @@ static int afs_prepare_page(struct afs_vnode *vnode, struct page *page, | |||
122 | if (offset == 0 && to == PAGE_SIZE) | 122 | if (offset == 0 && to == PAGE_SIZE) |
123 | return 0; | 123 | return 0; |
124 | 124 | ||
125 | p = kmap(page); | 125 | p = kmap_atomic(page, KM_USER0); |
126 | 126 | ||
127 | i_size = i_size_read(&vnode->vfs_inode); | 127 | i_size = i_size_read(&vnode->vfs_inode); |
128 | pos = (loff_t) page->index << PAGE_SHIFT; | 128 | pos = (loff_t) page->index << PAGE_SHIFT; |
@@ -133,7 +133,7 @@ static int afs_prepare_page(struct afs_vnode *vnode, struct page *page, | |||
133 | memset(p, 0, offset); | 133 | memset(p, 0, offset); |
134 | if (to < PAGE_SIZE) | 134 | if (to < PAGE_SIZE) |
135 | memset(p + to, 0, PAGE_SIZE - to); | 135 | memset(p + to, 0, PAGE_SIZE - to); |
136 | kunmap(page); | 136 | kunmap_atomic(p, KM_USER0); |
137 | return 0; | 137 | return 0; |
138 | } | 138 | } |
139 | 139 | ||
@@ -152,7 +152,7 @@ static int afs_prepare_page(struct afs_vnode *vnode, struct page *page, | |||
152 | memset(p + eof, 0, PAGE_SIZE - eof); | 152 | memset(p + eof, 0, PAGE_SIZE - eof); |
153 | } | 153 | } |
154 | 154 | ||
155 | kunmap(p); | 155 | kunmap_atomic(p, KM_USER0); |
156 | 156 | ||
157 | ret = 0; | 157 | ret = 0; |
158 | if (offset > 0 || eof > to) { | 158 | if (offset > 0 || eof > to) { |
@@ -489,14 +489,6 @@ int afs_writepage(struct page *page, struct writeback_control *wbc) | |||
489 | 489 | ||
490 | _enter("{%lx},", page->index); | 490 | _enter("{%lx},", page->index); |
491 | 491 | ||
492 | if (wbc->sync_mode != WB_SYNC_NONE) | ||
493 | wait_on_page_writeback(page); | ||
494 | |||
495 | if (PageWriteback(page) || !PageDirty(page)) { | ||
496 | unlock_page(page); | ||
497 | return 0; | ||
498 | } | ||
499 | |||
500 | wb = (struct afs_writeback *) page_private(page); | 492 | wb = (struct afs_writeback *) page_private(page); |
501 | ASSERT(wb != NULL); | 493 | ASSERT(wb != NULL); |
502 | 494 | ||