Loading fs/smbfs/file.c +24 −8 Original line number Diff line number Diff line Loading @@ -292,29 +292,45 @@ smb_file_splice_read(struct file *file, loff_t *ppos, * 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, }; /* Loading Loading
fs/smbfs/file.c +24 −8 Original line number Diff line number Diff line Loading @@ -292,29 +292,45 @@ smb_file_splice_read(struct file *file, loff_t *ppos, * 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, }; /* Loading