Signed-off-by: Nick Piggin <npiggin@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Nick Piggin 2007-10-16 01:25:16 -07:00 коммит произвёл Linus Torvalds
Родитель 4899f9c852
Коммит fb53b30948
1 изменённых файлов: 24 добавлений и 8 удалений

Просмотреть файл

@ -292,29 +292,45 @@ out:
* If the writer ends up delaying the write, the writer needs to
* increment the page use counts until he is done with the page.
*/
static int smb_prepare_write(struct file *file, struct page *page,
unsigned offset, unsigned to)
static int smb_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata)
{
pgoff_t index = pos >> PAGE_CACHE_SHIFT;
*pagep = __grab_cache_page(mapping, index);
if (!*pagep)
return -ENOMEM;
return 0;
}
static int smb_commit_write(struct file *file, struct page *page,
unsigned offset, unsigned to)
static int smb_write_end(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned copied,
struct page *page, void *fsdata)
{
int status;
unsigned offset = pos & (PAGE_CACHE_SIZE - 1);
status = -EFAULT;
lock_kernel();
status = smb_updatepage(file, page, offset, to-offset);
status = smb_updatepage(file, page, offset, copied);
unlock_kernel();
if (!status) {
if (!PageUptodate(page) && copied == PAGE_CACHE_SIZE)
SetPageUptodate(page);
status = copied;
}
unlock_page(page);
page_cache_release(page);
return status;
}
const struct address_space_operations smb_file_aops = {
.readpage = smb_readpage,
.writepage = smb_writepage,
.prepare_write = smb_prepare_write,
.commit_write = smb_commit_write
.write_begin = smb_write_begin,
.write_end = smb_write_end,
};
/*