|
@@ -2267,6 +2267,22 @@ out:
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
+static int cifs_release_page(struct page *page, gfp_t gfp)
|
|
|
+{
|
|
|
+ if (PagePrivate(page))
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ return cifs_fscache_release_page(page, gfp);
|
|
|
+}
|
|
|
+
|
|
|
+static void cifs_invalidate_page(struct page *page, unsigned long offset)
|
|
|
+{
|
|
|
+ struct cifsInodeInfo *cifsi = CIFS_I(page->mapping->host);
|
|
|
+
|
|
|
+ if (offset == 0)
|
|
|
+ cifs_fscache_invalidate_page(page, &cifsi->vfs_inode);
|
|
|
+}
|
|
|
+
|
|
|
static void
|
|
|
cifs_oplock_break(struct slow_work *work)
|
|
|
{
|
|
@@ -2340,6 +2356,8 @@ const struct address_space_operations cifs_addr_ops = {
|
|
|
.write_begin = cifs_write_begin,
|
|
|
.write_end = cifs_write_end,
|
|
|
.set_page_dirty = __set_page_dirty_nobuffers,
|
|
|
+ .releasepage = cifs_release_page,
|
|
|
+ .invalidatepage = cifs_invalidate_page,
|
|
|
/* .sync_page = cifs_sync_page, */
|
|
|
/* .direct_IO = */
|
|
|
};
|
|
@@ -2356,6 +2374,8 @@ const struct address_space_operations cifs_addr_ops_smallbuf = {
|
|
|
.write_begin = cifs_write_begin,
|
|
|
.write_end = cifs_write_end,
|
|
|
.set_page_dirty = __set_page_dirty_nobuffers,
|
|
|
+ .releasepage = cifs_release_page,
|
|
|
+ .invalidatepage = cifs_invalidate_page,
|
|
|
/* .sync_page = cifs_sync_page, */
|
|
|
/* .direct_IO = */
|
|
|
};
|