return volume;
 }
 
+struct fscache_volume *fscache_try_get_volume(struct fscache_volume *volume,
+                                             enum fscache_volume_trace where)
+{
+       int ref;
+
+       if (!__refcount_inc_not_zero(&volume->ref, &ref))
+               return NULL;
+
+       trace_fscache_volume(volume->debug_id, ref + 1, where);
+       return volume;
+}
+EXPORT_SYMBOL(fscache_try_get_volume);
+
 static void fscache_see_volume(struct fscache_volume *volume,
                               enum fscache_volume_trace where)
 {
                        fscache_free_volume(volume);
        }
 }
+EXPORT_SYMBOL(fscache_put_volume);
 
 /*
  * Relinquish a volume representation cookie.
 
 
 struct fscache_volume *fscache_get_volume(struct fscache_volume *volume,
                                          enum fscache_volume_trace where);
-void fscache_put_volume(struct fscache_volume *volume,
-                       enum fscache_volume_trace where);
 bool fscache_begin_volume_access(struct fscache_volume *volume,
                                 struct fscache_cookie *cookie,
                                 enum fscache_access_trace why);
 
 enum fscache_cache_trace;
 enum fscache_cookie_trace;
 enum fscache_access_trace;
+enum fscache_volume_trace;
 
 enum fscache_cache_state {
        FSCACHE_CACHE_IS_NOT_PRESENT,   /* No cache is present for this name */
 
 extern void fscache_io_error(struct fscache_cache *cache);
 
+extern struct fscache_volume *
+fscache_try_get_volume(struct fscache_volume *volume,
+                      enum fscache_volume_trace where);
+extern void fscache_put_volume(struct fscache_volume *volume,
+                              enum fscache_volume_trace where);
 extern void fscache_end_volume_access(struct fscache_volume *volume,
                                      struct fscache_cookie *cookie,
                                      enum fscache_access_trace why);