diff options
Diffstat (limited to 'fs/cifs/cache.c')
-rw-r--r-- | fs/cifs/cache.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/fs/cifs/cache.c b/fs/cifs/cache.c index b2649cfd3a04..224d7bbd1fcc 100644 --- a/fs/cifs/cache.c +++ b/fs/cifs/cache.c | |||
@@ -290,6 +290,36 @@ fscache_checkaux cifs_fscache_inode_check_aux(void *cookie_netfs_data, | |||
290 | return FSCACHE_CHECKAUX_OKAY; | 290 | return FSCACHE_CHECKAUX_OKAY; |
291 | } | 291 | } |
292 | 292 | ||
293 | static void cifs_fscache_inode_now_uncached(void *cookie_netfs_data) | ||
294 | { | ||
295 | struct cifsInodeInfo *cifsi = cookie_netfs_data; | ||
296 | struct pagevec pvec; | ||
297 | pgoff_t first; | ||
298 | int loop, nr_pages; | ||
299 | |||
300 | pagevec_init(&pvec, 0); | ||
301 | first = 0; | ||
302 | |||
303 | cFYI(1, "cifs inode 0x%p now uncached", cifsi); | ||
304 | |||
305 | for (;;) { | ||
306 | nr_pages = pagevec_lookup(&pvec, | ||
307 | cifsi->vfs_inode.i_mapping, first, | ||
308 | PAGEVEC_SIZE - pagevec_count(&pvec)); | ||
309 | if (!nr_pages) | ||
310 | break; | ||
311 | |||
312 | for (loop = 0; loop < nr_pages; loop++) | ||
313 | ClearPageFsCache(pvec.pages[loop]); | ||
314 | |||
315 | first = pvec.pages[nr_pages - 1]->index + 1; | ||
316 | |||
317 | pvec.nr = nr_pages; | ||
318 | pagevec_release(&pvec); | ||
319 | cond_resched(); | ||
320 | } | ||
321 | } | ||
322 | |||
293 | const struct fscache_cookie_def cifs_fscache_inode_object_def = { | 323 | const struct fscache_cookie_def cifs_fscache_inode_object_def = { |
294 | .name = "CIFS.uniqueid", | 324 | .name = "CIFS.uniqueid", |
295 | .type = FSCACHE_COOKIE_TYPE_DATAFILE, | 325 | .type = FSCACHE_COOKIE_TYPE_DATAFILE, |
@@ -297,4 +327,5 @@ const struct fscache_cookie_def cifs_fscache_inode_object_def = { | |||
297 | .get_attr = cifs_fscache_inode_get_attr, | 327 | .get_attr = cifs_fscache_inode_get_attr, |
298 | .get_aux = cifs_fscache_inode_get_aux, | 328 | .get_aux = cifs_fscache_inode_get_aux, |
299 | .check_aux = cifs_fscache_inode_check_aux, | 329 | .check_aux = cifs_fscache_inode_check_aux, |
330 | .now_uncached = cifs_fscache_inode_now_uncached, | ||
300 | }; | 331 | }; |