Commit 1fcdf534885b65e6d39780a5a89e9dfc5431cf68
1 parent
545db45f0f
Exists in
master
and in
39 other branches
NFS: Add read context retention for FS-Cache to call back with
Add read context retention so that FS-Cache can call back into NFS when a read operation on the cache fails EIO rather than reading data. This permits NFS to then fetch the data from the server instead using the appropriate security context. Signed-off-by: David Howells <dhowells@redhat.com> Acked-by: Steve Dickson <steved@redhat.com> Acked-by: Trond Myklebust <Trond.Myklebust@netapp.com> Acked-by: Al Viro <viro@zeniv.linux.org.uk> Tested-by: Daire Byrne <Daire.Byrne@framestore.com>
Showing 1 changed file with 26 additions and 0 deletions Side-by-side Diff
fs/nfs/fscache-index.c
... | ... | @@ -292,6 +292,30 @@ |
292 | 292 | } |
293 | 293 | |
294 | 294 | /* |
295 | + * Get an extra reference on a read context. | |
296 | + * - This function can be absent if the completion function doesn't require a | |
297 | + * context. | |
298 | + * - The read context is passed back to NFS in the event that a data read on the | |
299 | + * cache fails with EIO - in which case the server must be contacted to | |
300 | + * retrieve the data, which requires the read context for security. | |
301 | + */ | |
302 | +static void nfs_fh_get_context(void *cookie_netfs_data, void *context) | |
303 | +{ | |
304 | + get_nfs_open_context(context); | |
305 | +} | |
306 | + | |
307 | +/* | |
308 | + * Release an extra reference on a read context. | |
309 | + * - This function can be absent if the completion function doesn't require a | |
310 | + * context. | |
311 | + */ | |
312 | +static void nfs_fh_put_context(void *cookie_netfs_data, void *context) | |
313 | +{ | |
314 | + if (context) | |
315 | + put_nfs_open_context(context); | |
316 | +} | |
317 | + | |
318 | +/* | |
295 | 319 | * Define the inode object for FS-Cache. This is used to describe an inode |
296 | 320 | * object to fscache_acquire_cookie(). It is keyed by the NFS file handle for |
297 | 321 | * an inode. |
... | ... | @@ -308,5 +332,7 @@ |
308 | 332 | .get_aux = nfs_fscache_inode_get_aux, |
309 | 333 | .check_aux = nfs_fscache_inode_check_aux, |
310 | 334 | .now_uncached = nfs_fscache_inode_now_uncached, |
335 | + .get_context = nfs_fh_get_context, | |
336 | + .put_context = nfs_fh_put_context, | |
311 | 337 | }; |