fuse: export symbols to be used by CUSE
Export the following symbols for CUSE. fuse_conn_put() fuse_conn_get() fuse_conn_kill() fuse_send_init() fuse_do_open() fuse_sync_release() fuse_direct_io() fuse_do_ioctl() fuse_file_poll() fuse_request_alloc() fuse_get_req() fuse_put_request() fuse_request_send() fuse_abort_conn() fuse_dev_release() fuse_dev_operations Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
This commit is contained in:
parent
a325f9b922
commit
08cbf542bf
4 changed files with 39 additions and 9 deletions
|
@ -46,6 +46,7 @@ struct fuse_req *fuse_request_alloc(void)
|
||||||
fuse_request_init(req);
|
fuse_request_init(req);
|
||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_request_alloc);
|
||||||
|
|
||||||
struct fuse_req *fuse_request_alloc_nofs(void)
|
struct fuse_req *fuse_request_alloc_nofs(void)
|
||||||
{
|
{
|
||||||
|
@ -124,6 +125,7 @@ struct fuse_req *fuse_get_req(struct fuse_conn *fc)
|
||||||
atomic_dec(&fc->num_waiting);
|
atomic_dec(&fc->num_waiting);
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_get_req);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return request in fuse_file->reserved_req. However that may
|
* Return request in fuse_file->reserved_req. However that may
|
||||||
|
@ -208,6 +210,7 @@ void fuse_put_request(struct fuse_conn *fc, struct fuse_req *req)
|
||||||
fuse_request_free(req);
|
fuse_request_free(req);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_put_request);
|
||||||
|
|
||||||
static unsigned len_args(unsigned numargs, struct fuse_arg *args)
|
static unsigned len_args(unsigned numargs, struct fuse_arg *args)
|
||||||
{
|
{
|
||||||
|
@ -400,6 +403,7 @@ void fuse_request_send(struct fuse_conn *fc, struct fuse_req *req)
|
||||||
}
|
}
|
||||||
spin_unlock(&fc->lock);
|
spin_unlock(&fc->lock);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_request_send);
|
||||||
|
|
||||||
static void fuse_request_send_nowait_locked(struct fuse_conn *fc,
|
static void fuse_request_send_nowait_locked(struct fuse_conn *fc,
|
||||||
struct fuse_req *req)
|
struct fuse_req *req)
|
||||||
|
@ -440,6 +444,7 @@ void fuse_request_send_background(struct fuse_conn *fc, struct fuse_req *req)
|
||||||
req->isreply = 1;
|
req->isreply = 1;
|
||||||
fuse_request_send_nowait(fc, req);
|
fuse_request_send_nowait(fc, req);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_request_send_background);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called under fc->lock
|
* Called under fc->lock
|
||||||
|
@ -1106,8 +1111,9 @@ void fuse_abort_conn(struct fuse_conn *fc)
|
||||||
}
|
}
|
||||||
spin_unlock(&fc->lock);
|
spin_unlock(&fc->lock);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_abort_conn);
|
||||||
|
|
||||||
static int fuse_dev_release(struct inode *inode, struct file *file)
|
int fuse_dev_release(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
struct fuse_conn *fc = fuse_get_conn(file);
|
struct fuse_conn *fc = fuse_get_conn(file);
|
||||||
if (fc) {
|
if (fc) {
|
||||||
|
@ -1121,6 +1127,7 @@ static int fuse_dev_release(struct inode *inode, struct file *file)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_dev_release);
|
||||||
|
|
||||||
static int fuse_dev_fasync(int fd, struct file *file, int on)
|
static int fuse_dev_fasync(int fd, struct file *file, int on)
|
||||||
{
|
{
|
||||||
|
@ -1143,6 +1150,7 @@ const struct file_operations fuse_dev_operations = {
|
||||||
.release = fuse_dev_release,
|
.release = fuse_dev_release,
|
||||||
.fasync = fuse_dev_fasync,
|
.fasync = fuse_dev_fasync,
|
||||||
};
|
};
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_dev_operations);
|
||||||
|
|
||||||
static struct miscdevice fuse_miscdevice = {
|
static struct miscdevice fuse_miscdevice = {
|
||||||
.minor = FUSE_MINOR,
|
.minor = FUSE_MINOR,
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
static const struct file_operations fuse_direct_io_file_operations;
|
static const struct file_operations fuse_direct_io_file_operations;
|
||||||
|
|
||||||
|
@ -100,8 +101,8 @@ static void fuse_file_put(struct fuse_file *ff)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
|
int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
|
||||||
bool isdir)
|
bool isdir)
|
||||||
{
|
{
|
||||||
struct fuse_open_out outarg;
|
struct fuse_open_out outarg;
|
||||||
struct fuse_file *ff;
|
struct fuse_file *ff;
|
||||||
|
@ -128,6 +129,7 @@ static int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_do_open);
|
||||||
|
|
||||||
void fuse_finish_open(struct inode *inode, struct file *file)
|
void fuse_finish_open(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
|
@ -232,6 +234,7 @@ void fuse_sync_release(struct fuse_file *ff, int flags)
|
||||||
fuse_put_request(ff->fc, ff->reserved_req);
|
fuse_put_request(ff->fc, ff->reserved_req);
|
||||||
kfree(ff);
|
kfree(ff);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_sync_release);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Scramble the ID space with XTEA, so that the value of the files_struct
|
* Scramble the ID space with XTEA, so that the value of the files_struct
|
||||||
|
@ -1009,8 +1012,8 @@ static int fuse_get_user_pages(struct fuse_req *req, const char __user *buf,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t fuse_direct_io(struct file *file, const char __user *buf,
|
ssize_t fuse_direct_io(struct file *file, const char __user *buf,
|
||||||
size_t count, loff_t *ppos, int write)
|
size_t count, loff_t *ppos, int write)
|
||||||
{
|
{
|
||||||
struct fuse_file *ff = file->private_data;
|
struct fuse_file *ff = file->private_data;
|
||||||
struct fuse_conn *fc = ff->fc;
|
struct fuse_conn *fc = ff->fc;
|
||||||
|
@ -1066,6 +1069,7 @@ static ssize_t fuse_direct_io(struct file *file, const char __user *buf,
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_direct_io);
|
||||||
|
|
||||||
static ssize_t fuse_direct_read(struct file *file, char __user *buf,
|
static ssize_t fuse_direct_read(struct file *file, char __user *buf,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
|
@ -1647,8 +1651,8 @@ static int fuse_ioctl_copy_user(struct page **pages, struct iovec *iov,
|
||||||
* limits ioctl data transfers to well-formed ioctls and is the forced
|
* limits ioctl data transfers to well-formed ioctls and is the forced
|
||||||
* behavior for all FUSE servers.
|
* behavior for all FUSE servers.
|
||||||
*/
|
*/
|
||||||
static long fuse_do_ioctl(struct file *file, unsigned int cmd,
|
long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
|
||||||
unsigned long arg, unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
struct fuse_file *ff = file->private_data;
|
struct fuse_file *ff = file->private_data;
|
||||||
struct fuse_conn *fc = ff->fc;
|
struct fuse_conn *fc = ff->fc;
|
||||||
|
@ -1813,6 +1817,7 @@ static long fuse_do_ioctl(struct file *file, unsigned int cmd,
|
||||||
|
|
||||||
return err ? err : outarg.result;
|
return err ? err : outarg.result;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_do_ioctl);
|
||||||
|
|
||||||
static long fuse_file_ioctl_common(struct file *file, unsigned int cmd,
|
static long fuse_file_ioctl_common(struct file *file, unsigned int cmd,
|
||||||
unsigned long arg, unsigned int flags)
|
unsigned long arg, unsigned int flags)
|
||||||
|
@ -1892,7 +1897,7 @@ static void fuse_register_polled_file(struct fuse_conn *fc,
|
||||||
spin_unlock(&fc->lock);
|
spin_unlock(&fc->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned fuse_file_poll(struct file *file, poll_table *wait)
|
unsigned fuse_file_poll(struct file *file, poll_table *wait)
|
||||||
{
|
{
|
||||||
struct fuse_file *ff = file->private_data;
|
struct fuse_file *ff = file->private_data;
|
||||||
struct fuse_conn *fc = ff->fc;
|
struct fuse_conn *fc = ff->fc;
|
||||||
|
@ -1939,6 +1944,7 @@ static unsigned fuse_file_poll(struct file *file, poll_table *wait)
|
||||||
}
|
}
|
||||||
return POLLERR;
|
return POLLERR;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_file_poll);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is called from fuse_handle_notify() on FUSE_NOTIFY_POLL and
|
* This is called from fuse_handle_notify() on FUSE_NOTIFY_POLL and
|
||||||
|
|
|
@ -261,6 +261,8 @@ struct fuse_req {
|
||||||
} release;
|
} release;
|
||||||
struct fuse_init_in init_in;
|
struct fuse_init_in init_in;
|
||||||
struct fuse_init_out init_out;
|
struct fuse_init_out init_out;
|
||||||
|
struct cuse_init_in cuse_init_in;
|
||||||
|
struct cuse_init_out cuse_init_out;
|
||||||
struct {
|
struct {
|
||||||
struct fuse_read_in in;
|
struct fuse_read_in in;
|
||||||
u64 attr_ver;
|
u64 attr_ver;
|
||||||
|
@ -662,6 +664,8 @@ void fuse_invalidate_entry_cache(struct dentry *entry);
|
||||||
*/
|
*/
|
||||||
struct fuse_conn *fuse_conn_get(struct fuse_conn *fc);
|
struct fuse_conn *fuse_conn_get(struct fuse_conn *fc);
|
||||||
|
|
||||||
|
void fuse_conn_kill(struct fuse_conn *fc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize fuse_conn
|
* Initialize fuse_conn
|
||||||
*/
|
*/
|
||||||
|
@ -704,4 +708,13 @@ void fuse_release_nowrite(struct inode *inode);
|
||||||
|
|
||||||
u64 fuse_get_attr_version(struct fuse_conn *fc);
|
u64 fuse_get_attr_version(struct fuse_conn *fc);
|
||||||
|
|
||||||
|
int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
|
||||||
|
bool isdir);
|
||||||
|
ssize_t fuse_direct_io(struct file *file, const char __user *buf,
|
||||||
|
size_t count, loff_t *ppos, int write);
|
||||||
|
long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
|
||||||
|
unsigned int flags);
|
||||||
|
unsigned fuse_file_poll(struct file *file, poll_table *wait);
|
||||||
|
int fuse_dev_release(struct inode *inode, struct file *file);
|
||||||
|
|
||||||
#endif /* _FS_FUSE_I_H */
|
#endif /* _FS_FUSE_I_H */
|
||||||
|
|
|
@ -280,7 +280,7 @@ static void fuse_bdi_destroy(struct fuse_conn *fc)
|
||||||
bdi_destroy(&fc->bdi);
|
bdi_destroy(&fc->bdi);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fuse_conn_kill(struct fuse_conn *fc)
|
void fuse_conn_kill(struct fuse_conn *fc)
|
||||||
{
|
{
|
||||||
spin_lock(&fc->lock);
|
spin_lock(&fc->lock);
|
||||||
fc->connected = 0;
|
fc->connected = 0;
|
||||||
|
@ -297,6 +297,7 @@ static void fuse_conn_kill(struct fuse_conn *fc)
|
||||||
mutex_unlock(&fuse_mutex);
|
mutex_unlock(&fuse_mutex);
|
||||||
fuse_bdi_destroy(fc);
|
fuse_bdi_destroy(fc);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_conn_kill);
|
||||||
|
|
||||||
static void fuse_put_super(struct super_block *sb)
|
static void fuse_put_super(struct super_block *sb)
|
||||||
{
|
{
|
||||||
|
@ -508,12 +509,14 @@ void fuse_conn_put(struct fuse_conn *fc)
|
||||||
fc->release(fc);
|
fc->release(fc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_conn_put);
|
||||||
|
|
||||||
struct fuse_conn *fuse_conn_get(struct fuse_conn *fc)
|
struct fuse_conn *fuse_conn_get(struct fuse_conn *fc)
|
||||||
{
|
{
|
||||||
atomic_inc(&fc->count);
|
atomic_inc(&fc->count);
|
||||||
return fc;
|
return fc;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fuse_conn_get);
|
||||||
|
|
||||||
static struct inode *fuse_get_root_inode(struct super_block *sb, unsigned mode)
|
static struct inode *fuse_get_root_inode(struct super_block *sb, unsigned mode)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue