Lines Matching full:fb
147 struct fuse_backing *fuse_backing_get(struct fuse_backing *fb) in fuse_backing_get() argument
149 if (fb && refcount_inc_not_zero(&fb->count)) in fuse_backing_get()
150 return fb; in fuse_backing_get()
154 static void fuse_backing_free(struct fuse_backing *fb) in fuse_backing_free() argument
156 pr_debug("%s: fb=0x%p\n", __func__, fb); in fuse_backing_free()
158 if (fb->file) in fuse_backing_free()
159 fput(fb->file); in fuse_backing_free()
160 put_cred(fb->cred); in fuse_backing_free()
161 kfree_rcu(fb, rcu); in fuse_backing_free()
164 void fuse_backing_put(struct fuse_backing *fb) in fuse_backing_put() argument
166 if (fb && refcount_dec_and_test(&fb->count)) in fuse_backing_put()
167 fuse_backing_free(fb); in fuse_backing_put()
175 static int fuse_backing_id_alloc(struct fuse_conn *fc, struct fuse_backing *fb) in fuse_backing_id_alloc() argument
182 id = idr_alloc_cyclic(&fc->backing_files_map, fb, 1, 0, GFP_ATOMIC); in fuse_backing_id_alloc()
193 struct fuse_backing *fb; in fuse_backing_id_remove() local
196 fb = idr_remove(&fc->backing_files_map, id); in fuse_backing_id_remove()
199 return fb; in fuse_backing_id_remove()
204 struct fuse_backing *fb = p; in fuse_backing_id_free() local
206 WARN_ON_ONCE(refcount_read(&fb->count) != 1); in fuse_backing_id_free()
207 fuse_backing_free(fb); in fuse_backing_id_free()
221 struct fuse_backing *fb = NULL; in fuse_backing_open() local
245 fb = kmalloc(sizeof(struct fuse_backing), GFP_KERNEL); in fuse_backing_open()
247 if (!fb) in fuse_backing_open()
250 fb->file = file; in fuse_backing_open()
251 fb->cred = prepare_creds(); in fuse_backing_open()
252 refcount_set(&fb->count, 1); in fuse_backing_open()
254 res = fuse_backing_id_alloc(fc, fb); in fuse_backing_open()
256 fuse_backing_free(fb); in fuse_backing_open()
257 fb = NULL; in fuse_backing_open()
261 pr_debug("%s: fb=0x%p, ret=%i\n", __func__, fb, res); in fuse_backing_open()
272 struct fuse_backing *fb = NULL; in fuse_backing_close() local
287 fb = fuse_backing_id_remove(fc, backing_id); in fuse_backing_close()
288 if (!fb) in fuse_backing_close()
291 fuse_backing_put(fb); in fuse_backing_close()
294 pr_debug("%s: fb=0x%p, err=%i\n", __func__, fb, err); in fuse_backing_close()
302 * Returns an fb object with elevated refcount to be stored in fuse inode.
310 struct fuse_backing *fb = NULL; in fuse_passthrough_open() local
319 fb = idr_find(&fc->backing_files_map, backing_id); in fuse_passthrough_open()
320 fb = fuse_backing_get(fb); in fuse_passthrough_open()
324 if (!fb) in fuse_passthrough_open()
329 &fb->file->f_path, fb->cred); in fuse_passthrough_open()
332 fuse_backing_put(fb); in fuse_passthrough_open()
338 ff->cred = get_cred(fb->cred); in fuse_passthrough_open()
340 pr_debug("%s: backing_id=%d, fb=0x%p, backing_file=0x%p, err=%i\n", __func__, in fuse_passthrough_open()
341 backing_id, fb, ff->passthrough, err); in fuse_passthrough_open()
343 return err ? ERR_PTR(err) : fb; in fuse_passthrough_open()
346 void fuse_passthrough_release(struct fuse_file *ff, struct fuse_backing *fb) in fuse_passthrough_release() argument
348 pr_debug("%s: fb=0x%p, backing_file=0x%p\n", __func__, in fuse_passthrough_release()
349 fb, ff->passthrough); in fuse_passthrough_release()