mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 23:21:31 +00:00
7dc4e97a4f
FUSE_PASSTHROUGH capability to passthrough FUSE operations to backing files will be made available with kernel config CONFIG_FUSE_PASSTHROUGH. When requesting FUSE_PASSTHROUGH, userspace needs to specify the max_stack_depth that is allowed for FUSE on top of backing files. Introduce the flag FOPEN_PASSTHROUGH and backing_id to fuse_open_out argument that can be used when replying to OPEN request, to setup passthrough of io operations on the fuse inode to a backing file. Introduce a refcounted fuse_backing object that will be used to associate an open backing file with a fuse inode. Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
31 lines
545 B
C
31 lines
545 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* FUSE passthrough to backing file.
|
|
*
|
|
* Copyright (c) 2023 CTERA Networks.
|
|
*/
|
|
|
|
#include "fuse_i.h"
|
|
|
|
#include <linux/file.h>
|
|
|
|
struct fuse_backing *fuse_backing_get(struct fuse_backing *fb)
|
|
{
|
|
if (fb && refcount_inc_not_zero(&fb->count))
|
|
return fb;
|
|
return NULL;
|
|
}
|
|
|
|
static void fuse_backing_free(struct fuse_backing *fb)
|
|
{
|
|
if (fb->file)
|
|
fput(fb->file);
|
|
kfree_rcu(fb, rcu);
|
|
}
|
|
|
|
void fuse_backing_put(struct fuse_backing *fb)
|
|
{
|
|
if (fb && refcount_dec_and_test(&fb->count))
|
|
fuse_backing_free(fb);
|
|
}
|