mirror of
https://github.com/libfuse/libfuse.git
synced 2024-11-23 20:24:17 +08:00
kernel: sync with mainline...
This commit is contained in:
parent
79b6209843
commit
b318b3d69b
@ -1,3 +1,12 @@
|
|||||||
|
2007-05-02 Miklos Szeredi <miklos@szeredi.hu>
|
||||||
|
|
||||||
|
* kernel: sync with mainline:
|
||||||
|
|
||||||
|
* Use invalidate_mapping_pages() if available
|
||||||
|
|
||||||
|
* Fix BUG when invalid file type is supplied in mount. Patch by
|
||||||
|
Timo Savola
|
||||||
|
|
||||||
2007-04-27 Miklos Szeredi <miklos@szeredi.hu>
|
2007-04-27 Miklos Szeredi <miklos@szeredi.hu>
|
||||||
|
|
||||||
* libfuse: call umount(8) directly instead of fusermount if
|
* libfuse: call umount(8) directly instead of fusermount if
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
AC_INIT(fuse, 2.7.0-pre1)
|
AC_INIT(fuse, 2.7.0-rc1)
|
||||||
AC_CANONICAL_TARGET
|
AC_CANONICAL_TARGET
|
||||||
AM_INIT_AUTOMAKE
|
AM_INIT_AUTOMAKE
|
||||||
AM_CONFIG_HEADER(include/config.h)
|
AM_CONFIG_HEADER(include/config.h)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
AC_INIT(fuse-kernel, 2.7.0-pre1)
|
AC_INIT(fuse-kernel, 2.7.0-rc1)
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
|
|
||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
|
@ -77,7 +77,7 @@ struct dentry *d_alloc_name(struct dentry *parent, const char *name)
|
|||||||
{
|
{
|
||||||
struct qstr q;
|
struct qstr q;
|
||||||
|
|
||||||
q.name = name;
|
q.name = (const unsigned char *) name;
|
||||||
q.len = strlen(name);
|
q.len = strlen(name);
|
||||||
q.hash = full_name_hash(q.name, q.len);
|
q.hash = full_name_hash(q.name, q.len);
|
||||||
return d_alloc(parent, &q);
|
return d_alloc(parent, &q);
|
||||||
@ -87,7 +87,11 @@ static struct dentry *fuse_ctl_add_dentry(struct dentry *parent,
|
|||||||
struct fuse_conn *fc,
|
struct fuse_conn *fc,
|
||||||
const char *name,
|
const char *name,
|
||||||
int mode, int nlink,
|
int mode, int nlink,
|
||||||
|
#ifdef KERNEL_2_6_21_PLUS
|
||||||
|
const struct inode_operations *iop,
|
||||||
|
#else
|
||||||
struct inode_operations *iop,
|
struct inode_operations *iop,
|
||||||
|
#endif
|
||||||
#ifdef KERNEL_2_6_17_PLUS
|
#ifdef KERNEL_2_6_17_PLUS
|
||||||
const struct file_operations *fop
|
const struct file_operations *fop
|
||||||
#else
|
#else
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
MODULE_ALIAS_MISCDEV(FUSE_MINOR);
|
MODULE_ALIAS_MISCDEV(FUSE_MINOR);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static kmem_cache_t *fuse_req_cachep;
|
static struct kmem_cache *fuse_req_cachep;
|
||||||
|
|
||||||
static struct fuse_conn *fuse_get_conn(struct file *file)
|
static struct fuse_conn *fuse_get_conn(struct file *file)
|
||||||
{
|
{
|
||||||
|
@ -195,7 +195,7 @@ static struct dentry_operations fuse_dentry_operations = {
|
|||||||
.d_revalidate = fuse_dentry_revalidate,
|
.d_revalidate = fuse_dentry_revalidate,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int valid_mode(int m)
|
int fuse_valid_type(int m)
|
||||||
{
|
{
|
||||||
return S_ISREG(m) || S_ISDIR(m) || S_ISLNK(m) || S_ISCHR(m) ||
|
return S_ISREG(m) || S_ISDIR(m) || S_ISLNK(m) || S_ISCHR(m) ||
|
||||||
S_ISBLK(m) || S_ISFIFO(m) || S_ISSOCK(m);
|
S_ISBLK(m) || S_ISFIFO(m) || S_ISSOCK(m);
|
||||||
@ -250,7 +250,8 @@ static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
|
|||||||
fuse_put_request(fc, req);
|
fuse_put_request(fc, req);
|
||||||
/* Zero nodeid is same as -ENOENT, but with valid timeout */
|
/* Zero nodeid is same as -ENOENT, but with valid timeout */
|
||||||
if (!err && outarg.nodeid &&
|
if (!err && outarg.nodeid &&
|
||||||
(invalid_nodeid(outarg.nodeid) || !valid_mode(outarg.attr.mode)))
|
(invalid_nodeid(outarg.nodeid) ||
|
||||||
|
!fuse_valid_type(outarg.attr.mode)))
|
||||||
err = -EIO;
|
err = -EIO;
|
||||||
if (!err && outarg.nodeid) {
|
if (!err && outarg.nodeid) {
|
||||||
inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation,
|
inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation,
|
||||||
|
@ -75,7 +75,11 @@ void fuse_finish_open(struct inode *inode, struct file *file,
|
|||||||
if (outarg->open_flags & FOPEN_DIRECT_IO)
|
if (outarg->open_flags & FOPEN_DIRECT_IO)
|
||||||
file->f_op = &fuse_direct_io_file_operations;
|
file->f_op = &fuse_direct_io_file_operations;
|
||||||
if (!(outarg->open_flags & FOPEN_KEEP_CACHE))
|
if (!(outarg->open_flags & FOPEN_KEEP_CACHE))
|
||||||
|
#ifdef KERNEL_2_6_21_PLUS
|
||||||
|
invalidate_mapping_pages(inode->i_mapping, 0, -1);
|
||||||
|
#else
|
||||||
invalidate_inode_pages(inode->i_mapping);
|
invalidate_inode_pages(inode->i_mapping);
|
||||||
|
#endif
|
||||||
ff->fh = outarg->fh;
|
ff->fh = outarg->fh;
|
||||||
file->private_data = ff;
|
file->private_data = ff;
|
||||||
}
|
}
|
||||||
|
@ -41,10 +41,16 @@
|
|||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
|
||||||
# define KERNEL_2_6_19_PLUS
|
# define KERNEL_2_6_19_PLUS
|
||||||
#endif
|
#endif
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
|
||||||
|
# define KERNEL_2_6_21_PLUS
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__arm__) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
|
#if defined(__arm__) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
|
||||||
#define DCACHE_BUG
|
#define DCACHE_BUG
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef KERNEL_2_6_15_PLUS
|
||||||
|
#define kmem_cache kmem_cache_s
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif /* FUSE_MAINLINE */
|
#endif /* FUSE_MAINLINE */
|
||||||
@ -617,3 +623,8 @@ int fuse_ctl_add_conn(struct fuse_conn *fc);
|
|||||||
* Remove connection from control filesystem
|
* Remove connection from control filesystem
|
||||||
*/
|
*/
|
||||||
void fuse_ctl_remove_conn(struct fuse_conn *fc);
|
void fuse_ctl_remove_conn(struct fuse_conn *fc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is file type valid?
|
||||||
|
*/
|
||||||
|
int fuse_valid_type(int m);
|
||||||
|
@ -24,7 +24,7 @@ MODULE_DESCRIPTION("Filesystem in Userspace");
|
|||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static kmem_cache_t *fuse_inode_cachep;
|
static struct kmem_cache *fuse_inode_cachep;
|
||||||
struct list_head fuse_conn_list;
|
struct list_head fuse_conn_list;
|
||||||
DEFINE_MUTEX(fuse_mutex);
|
DEFINE_MUTEX(fuse_mutex);
|
||||||
|
|
||||||
@ -124,7 +124,11 @@ void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr)
|
|||||||
{
|
{
|
||||||
struct fuse_conn *fc = get_fuse_conn(inode);
|
struct fuse_conn *fc = get_fuse_conn(inode);
|
||||||
if (S_ISREG(inode->i_mode) && i_size_read(inode) != attr->size)
|
if (S_ISREG(inode->i_mode) && i_size_read(inode) != attr->size)
|
||||||
|
#ifdef KERNEL_2_6_21_PLUS
|
||||||
|
invalidate_mapping_pages(inode->i_mapping, 0, -1);
|
||||||
|
#else
|
||||||
invalidate_inode_pages(inode->i_mapping);
|
invalidate_inode_pages(inode->i_mapping);
|
||||||
|
#endif
|
||||||
|
|
||||||
inode->i_ino = attr->ino;
|
inode->i_ino = attr->ino;
|
||||||
inode->i_mode = (inode->i_mode & S_IFMT) + (attr->mode & 07777);
|
inode->i_mode = (inode->i_mode & S_IFMT) + (attr->mode & 07777);
|
||||||
@ -360,6 +364,8 @@ static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev)
|
|||||||
case OPT_ROOTMODE:
|
case OPT_ROOTMODE:
|
||||||
if (match_octal(&args[0], &value))
|
if (match_octal(&args[0], &value))
|
||||||
return 0;
|
return 0;
|
||||||
|
if (!fuse_valid_type(value))
|
||||||
|
return 0;
|
||||||
d->rootmode = value;
|
d->rootmode = value;
|
||||||
d->rootmode_present = 1;
|
d->rootmode_present = 1;
|
||||||
break;
|
break;
|
||||||
@ -805,7 +811,7 @@ static decl_subsys(fs, NULL, NULL);
|
|||||||
static decl_subsys(fuse, NULL, NULL);
|
static decl_subsys(fuse, NULL, NULL);
|
||||||
static decl_subsys(connections, NULL, NULL);
|
static decl_subsys(connections, NULL, NULL);
|
||||||
|
|
||||||
static void fuse_inode_init_once(void *foo, kmem_cache_t *cachep,
|
static void fuse_inode_init_once(void *foo, struct kmem_cache *cachep,
|
||||||
unsigned long flags)
|
unsigned long flags)
|
||||||
{
|
{
|
||||||
struct inode * inode = foo;
|
struct inode * inode = foo;
|
||||||
|
Loading…
Reference in New Issue
Block a user