aboutsummaryrefslogtreecommitdiffstats
path: root/fs/afs/write.c
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2007-05-10 06:15:21 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-10 12:26:52 -0400
commitb9b1f8d5930a813879278d0cbfc8c658d6a038dc (patch)
tree1879e0e70ce946e3519a205698f4dd1b34a3a7ea /fs/afs/write.c
parent218e180e7ea5334e1f94121940ba82cd1f0f4e58 (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.c14
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