/* * Write a page to the server. This will be used for NFS swapping only * (for now), and we currently do this synchronously only. * * We are called with the page locked and we unlock it when done. */ static int smb_writepage(struct page *page) { struct address_space *mapping = page->mapping; struct inode *inode; unsigned long end_index; unsigned offset = PAGE_CACHE_SIZE; int err; if (!mapping) BUG(); inode = mapping->host; if (!inode) BUG(); end_index = inode->i_size >> PAGE_CACHE_SHIFT; /* easy case */ if (page->index < end_index) goto do_it; /* things got complicated... */ offset = inode->i_size & (PAGE_CACHE_SIZE-1); /* OK, are we completely out? */ if (page->index >= end_index+1 || !offset) return -EIO; do_it: get_page(page); err = smb_writepage_sync(inode, page, 0, offset); SetPageUptodate(page); UnlockPage(page); put_page(page); return err; }
/* * Write a page to the server. This will be used for NFS swapping only * (for now), and we currently do this synchronously only. * * We are called with the page locked and we unlock it when done. */ static int smb_writepage(struct page *page, struct writeback_control *wbc) { struct address_space *mapping = page->mapping; struct inode *inode; unsigned long end_index; unsigned offset = PAGE_CACHE_SIZE; int err; BUG_ON(!mapping); inode = mapping->host; BUG_ON(!inode); end_index = inode->i_size >> PAGE_CACHE_SHIFT; /* easy case */ if (page->index < end_index) goto do_it; /* things got complicated... */ offset = inode->i_size & (PAGE_CACHE_SIZE-1); /* OK, are we completely out? */ if (page->index >= end_index+1 || !offset) return 0; /* truncated - don't care */ do_it: page_cache_get(page); err = smb_writepage_sync(inode, page, 0, offset); SetPageUptodate(page); unlock_page(page); page_cache_release(page); return err; }
static int smb_updatepage(struct file *file, struct page *page, unsigned long offset, unsigned int count) { struct dentry *dentry = file->f_dentry; DEBUG1("(%s/%s %d@%ld)\n", DENTRY_PATH(dentry), count, (page->index << PAGE_CACHE_SHIFT)+offset); return smb_writepage_sync(dentry->d_inode, page, offset, count); }