libfs: get exports to definitions of objects being exported...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
cbe9c08524
commit
12f3887222
1 changed files with 34 additions and 35 deletions
69
fs/libfs.c
69
fs/libfs.c
|
@ -31,6 +31,7 @@ int simple_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||||
stat->blocks = inode->i_mapping->nrpages << (PAGE_CACHE_SHIFT - 9);
|
stat->blocks = inode->i_mapping->nrpages << (PAGE_CACHE_SHIFT - 9);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_getattr);
|
||||||
|
|
||||||
int simple_statfs(struct dentry *dentry, struct kstatfs *buf)
|
int simple_statfs(struct dentry *dentry, struct kstatfs *buf)
|
||||||
{
|
{
|
||||||
|
@ -39,6 +40,7 @@ int simple_statfs(struct dentry *dentry, struct kstatfs *buf)
|
||||||
buf->f_namelen = NAME_MAX;
|
buf->f_namelen = NAME_MAX;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_statfs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Retaining negative dentries for an in-memory filesystem just wastes
|
* Retaining negative dentries for an in-memory filesystem just wastes
|
||||||
|
@ -66,6 +68,7 @@ struct dentry *simple_lookup(struct inode *dir, struct dentry *dentry, unsigned
|
||||||
d_add(dentry, NULL);
|
d_add(dentry, NULL);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_lookup);
|
||||||
|
|
||||||
int dcache_dir_open(struct inode *inode, struct file *file)
|
int dcache_dir_open(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
|
@ -75,12 +78,14 @@ int dcache_dir_open(struct inode *inode, struct file *file)
|
||||||
|
|
||||||
return file->private_data ? 0 : -ENOMEM;
|
return file->private_data ? 0 : -ENOMEM;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(dcache_dir_open);
|
||||||
|
|
||||||
int dcache_dir_close(struct inode *inode, struct file *file)
|
int dcache_dir_close(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
dput(file->private_data);
|
dput(file->private_data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(dcache_dir_close);
|
||||||
|
|
||||||
loff_t dcache_dir_lseek(struct file *file, loff_t offset, int whence)
|
loff_t dcache_dir_lseek(struct file *file, loff_t offset, int whence)
|
||||||
{
|
{
|
||||||
|
@ -123,6 +128,7 @@ loff_t dcache_dir_lseek(struct file *file, loff_t offset, int whence)
|
||||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(dcache_dir_lseek);
|
||||||
|
|
||||||
/* Relationship between i_mode and the DT_xxx types */
|
/* Relationship between i_mode and the DT_xxx types */
|
||||||
static inline unsigned char dt_type(struct inode *inode)
|
static inline unsigned char dt_type(struct inode *inode)
|
||||||
|
@ -172,11 +178,13 @@ int dcache_readdir(struct file *file, struct dir_context *ctx)
|
||||||
spin_unlock(&dentry->d_lock);
|
spin_unlock(&dentry->d_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(dcache_readdir);
|
||||||
|
|
||||||
ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
|
ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
|
||||||
{
|
{
|
||||||
return -EISDIR;
|
return -EISDIR;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(generic_read_dir);
|
||||||
|
|
||||||
const struct file_operations simple_dir_operations = {
|
const struct file_operations simple_dir_operations = {
|
||||||
.open = dcache_dir_open,
|
.open = dcache_dir_open,
|
||||||
|
@ -186,10 +194,12 @@ const struct file_operations simple_dir_operations = {
|
||||||
.iterate = dcache_readdir,
|
.iterate = dcache_readdir,
|
||||||
.fsync = noop_fsync,
|
.fsync = noop_fsync,
|
||||||
};
|
};
|
||||||
|
EXPORT_SYMBOL(simple_dir_operations);
|
||||||
|
|
||||||
const struct inode_operations simple_dir_inode_operations = {
|
const struct inode_operations simple_dir_inode_operations = {
|
||||||
.lookup = simple_lookup,
|
.lookup = simple_lookup,
|
||||||
};
|
};
|
||||||
|
EXPORT_SYMBOL(simple_dir_inode_operations);
|
||||||
|
|
||||||
static const struct super_operations simple_super_operations = {
|
static const struct super_operations simple_super_operations = {
|
||||||
.statfs = simple_statfs,
|
.statfs = simple_statfs,
|
||||||
|
@ -244,6 +254,7 @@ Enomem:
|
||||||
deactivate_locked_super(s);
|
deactivate_locked_super(s);
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(mount_pseudo);
|
||||||
|
|
||||||
int simple_open(struct inode *inode, struct file *file)
|
int simple_open(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
|
@ -251,6 +262,7 @@ int simple_open(struct inode *inode, struct file *file)
|
||||||
file->private_data = inode->i_private;
|
file->private_data = inode->i_private;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_open);
|
||||||
|
|
||||||
int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
|
int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
|
||||||
{
|
{
|
||||||
|
@ -263,6 +275,7 @@ int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *den
|
||||||
d_instantiate(dentry, inode);
|
d_instantiate(dentry, inode);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_link);
|
||||||
|
|
||||||
int simple_empty(struct dentry *dentry)
|
int simple_empty(struct dentry *dentry)
|
||||||
{
|
{
|
||||||
|
@ -283,6 +296,7 @@ out:
|
||||||
spin_unlock(&dentry->d_lock);
|
spin_unlock(&dentry->d_lock);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_empty);
|
||||||
|
|
||||||
int simple_unlink(struct inode *dir, struct dentry *dentry)
|
int simple_unlink(struct inode *dir, struct dentry *dentry)
|
||||||
{
|
{
|
||||||
|
@ -293,6 +307,7 @@ int simple_unlink(struct inode *dir, struct dentry *dentry)
|
||||||
dput(dentry);
|
dput(dentry);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_unlink);
|
||||||
|
|
||||||
int simple_rmdir(struct inode *dir, struct dentry *dentry)
|
int simple_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
{
|
{
|
||||||
|
@ -304,6 +319,7 @@ int simple_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
drop_nlink(dir);
|
drop_nlink(dir);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_rmdir);
|
||||||
|
|
||||||
int simple_rename(struct inode *old_dir, struct dentry *old_dentry,
|
int simple_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
struct inode *new_dir, struct dentry *new_dentry)
|
struct inode *new_dir, struct dentry *new_dentry)
|
||||||
|
@ -330,6 +346,7 @@ int simple_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_rename);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* simple_setattr - setattr for simple filesystem
|
* simple_setattr - setattr for simple filesystem
|
||||||
|
@ -370,6 +387,7 @@ int simple_readpage(struct file *file, struct page *page)
|
||||||
unlock_page(page);
|
unlock_page(page);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_readpage);
|
||||||
|
|
||||||
int simple_write_begin(struct file *file, struct address_space *mapping,
|
int simple_write_begin(struct file *file, struct address_space *mapping,
|
||||||
loff_t pos, unsigned len, unsigned flags,
|
loff_t pos, unsigned len, unsigned flags,
|
||||||
|
@ -393,6 +411,7 @@ int simple_write_begin(struct file *file, struct address_space *mapping,
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_write_begin);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* simple_write_end - .write_end helper for non-block-device FSes
|
* simple_write_end - .write_end helper for non-block-device FSes
|
||||||
|
@ -444,6 +463,7 @@ int simple_write_end(struct file *file, struct address_space *mapping,
|
||||||
|
|
||||||
return copied;
|
return copied;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_write_end);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* the inodes created here are not hashed. If you use iunique to generate
|
* the inodes created here are not hashed. If you use iunique to generate
|
||||||
|
@ -512,6 +532,7 @@ out:
|
||||||
dput(root);
|
dput(root);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_fill_super);
|
||||||
|
|
||||||
static DEFINE_SPINLOCK(pin_fs_lock);
|
static DEFINE_SPINLOCK(pin_fs_lock);
|
||||||
|
|
||||||
|
@ -534,6 +555,7 @@ int simple_pin_fs(struct file_system_type *type, struct vfsmount **mount, int *c
|
||||||
mntput(mnt);
|
mntput(mnt);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_pin_fs);
|
||||||
|
|
||||||
void simple_release_fs(struct vfsmount **mount, int *count)
|
void simple_release_fs(struct vfsmount **mount, int *count)
|
||||||
{
|
{
|
||||||
|
@ -545,6 +567,7 @@ void simple_release_fs(struct vfsmount **mount, int *count)
|
||||||
spin_unlock(&pin_fs_lock);
|
spin_unlock(&pin_fs_lock);
|
||||||
mntput(mnt);
|
mntput(mnt);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_release_fs);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* simple_read_from_buffer - copy data from the buffer to user space
|
* simple_read_from_buffer - copy data from the buffer to user space
|
||||||
|
@ -579,6 +602,7 @@ ssize_t simple_read_from_buffer(void __user *to, size_t count, loff_t *ppos,
|
||||||
*ppos = pos + count;
|
*ppos = pos + count;
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_read_from_buffer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* simple_write_to_buffer - copy data from user space to the buffer
|
* simple_write_to_buffer - copy data from user space to the buffer
|
||||||
|
@ -613,6 +637,7 @@ ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos,
|
||||||
*ppos = pos + count;
|
*ppos = pos + count;
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_write_to_buffer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* memory_read_from_buffer - copy data from the buffer
|
* memory_read_from_buffer - copy data from the buffer
|
||||||
|
@ -644,6 +669,7 @@ ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(memory_read_from_buffer);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Transaction based IO.
|
* Transaction based IO.
|
||||||
|
@ -665,6 +691,7 @@ void simple_transaction_set(struct file *file, size_t n)
|
||||||
smp_mb();
|
smp_mb();
|
||||||
ar->size = n;
|
ar->size = n;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_transaction_set);
|
||||||
|
|
||||||
char *simple_transaction_get(struct file *file, const char __user *buf, size_t size)
|
char *simple_transaction_get(struct file *file, const char __user *buf, size_t size)
|
||||||
{
|
{
|
||||||
|
@ -696,6 +723,7 @@ char *simple_transaction_get(struct file *file, const char __user *buf, size_t s
|
||||||
|
|
||||||
return ar->data;
|
return ar->data;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_transaction_get);
|
||||||
|
|
||||||
ssize_t simple_transaction_read(struct file *file, char __user *buf, size_t size, loff_t *pos)
|
ssize_t simple_transaction_read(struct file *file, char __user *buf, size_t size, loff_t *pos)
|
||||||
{
|
{
|
||||||
|
@ -705,12 +733,14 @@ ssize_t simple_transaction_read(struct file *file, char __user *buf, size_t size
|
||||||
return 0;
|
return 0;
|
||||||
return simple_read_from_buffer(buf, size, pos, ar->data, ar->size);
|
return simple_read_from_buffer(buf, size, pos, ar->data, ar->size);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_transaction_read);
|
||||||
|
|
||||||
int simple_transaction_release(struct inode *inode, struct file *file)
|
int simple_transaction_release(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
free_page((unsigned long)file->private_data);
|
free_page((unsigned long)file->private_data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(simple_transaction_release);
|
||||||
|
|
||||||
/* Simple attribute files */
|
/* Simple attribute files */
|
||||||
|
|
||||||
|
@ -746,12 +776,14 @@ int simple_attr_open(struct inode *inode, struct file *file,
|
||||||
|
|
||||||
return nonseekable_open(inode, file);
|
return nonseekable_open(inode, file);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(simple_attr_open);
|
||||||
|
|
||||||
int simple_attr_release(struct inode *inode, struct file *file)
|
int simple_attr_release(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
kfree(file->private_data);
|
kfree(file->private_data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(simple_attr_release); /* GPL-only? This? Really? */
|
||||||
|
|
||||||
/* read from the buffer that is filled with the get function */
|
/* read from the buffer that is filled with the get function */
|
||||||
ssize_t simple_attr_read(struct file *file, char __user *buf,
|
ssize_t simple_attr_read(struct file *file, char __user *buf,
|
||||||
|
@ -787,6 +819,7 @@ out:
|
||||||
mutex_unlock(&attr->mutex);
|
mutex_unlock(&attr->mutex);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(simple_attr_read);
|
||||||
|
|
||||||
/* interpret the buffer as a number to call the set function with */
|
/* interpret the buffer as a number to call the set function with */
|
||||||
ssize_t simple_attr_write(struct file *file, const char __user *buf,
|
ssize_t simple_attr_write(struct file *file, const char __user *buf,
|
||||||
|
@ -819,6 +852,7 @@ out:
|
||||||
mutex_unlock(&attr->mutex);
|
mutex_unlock(&attr->mutex);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(simple_attr_write);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* generic_fh_to_dentry - generic helper for the fh_to_dentry export operation
|
* generic_fh_to_dentry - generic helper for the fh_to_dentry export operation
|
||||||
|
@ -957,39 +991,4 @@ int noop_fsync(struct file *file, loff_t start, loff_t end, int datasync)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(dcache_dir_close);
|
|
||||||
EXPORT_SYMBOL(dcache_dir_lseek);
|
|
||||||
EXPORT_SYMBOL(dcache_dir_open);
|
|
||||||
EXPORT_SYMBOL(dcache_readdir);
|
|
||||||
EXPORT_SYMBOL(generic_read_dir);
|
|
||||||
EXPORT_SYMBOL(mount_pseudo);
|
|
||||||
EXPORT_SYMBOL(simple_write_begin);
|
|
||||||
EXPORT_SYMBOL(simple_write_end);
|
|
||||||
EXPORT_SYMBOL(simple_dir_inode_operations);
|
|
||||||
EXPORT_SYMBOL(simple_dir_operations);
|
|
||||||
EXPORT_SYMBOL(simple_empty);
|
|
||||||
EXPORT_SYMBOL(simple_fill_super);
|
|
||||||
EXPORT_SYMBOL(simple_getattr);
|
|
||||||
EXPORT_SYMBOL(simple_open);
|
|
||||||
EXPORT_SYMBOL(simple_link);
|
|
||||||
EXPORT_SYMBOL(simple_lookup);
|
|
||||||
EXPORT_SYMBOL(simple_pin_fs);
|
|
||||||
EXPORT_SYMBOL(simple_readpage);
|
|
||||||
EXPORT_SYMBOL(simple_release_fs);
|
|
||||||
EXPORT_SYMBOL(simple_rename);
|
|
||||||
EXPORT_SYMBOL(simple_rmdir);
|
|
||||||
EXPORT_SYMBOL(simple_statfs);
|
|
||||||
EXPORT_SYMBOL(noop_fsync);
|
EXPORT_SYMBOL(noop_fsync);
|
||||||
EXPORT_SYMBOL(simple_unlink);
|
|
||||||
EXPORT_SYMBOL(simple_read_from_buffer);
|
|
||||||
EXPORT_SYMBOL(simple_write_to_buffer);
|
|
||||||
EXPORT_SYMBOL(memory_read_from_buffer);
|
|
||||||
EXPORT_SYMBOL(simple_transaction_set);
|
|
||||||
EXPORT_SYMBOL(simple_transaction_get);
|
|
||||||
EXPORT_SYMBOL(simple_transaction_read);
|
|
||||||
EXPORT_SYMBOL(simple_transaction_release);
|
|
||||||
EXPORT_SYMBOL_GPL(simple_attr_open);
|
|
||||||
EXPORT_SYMBOL_GPL(simple_attr_release);
|
|
||||||
EXPORT_SYMBOL_GPL(simple_attr_read);
|
|
||||||
EXPORT_SYMBOL_GPL(simple_attr_write);
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue