+++ /dev/null
---- fuse-1.4/kernel/dir.c.orig 2004-09-14 08:56:36.000000000 +0200
-+++ fuse-1.4/kernel/dir.c 2004-11-01 13:49:54.145950656 +0100
-@@ -23,19 +23,10 @@
- /* FIXME: This should be user configurable */
- #define FUSE_REVALIDATE_TIME (1 * HZ)
-
--#ifndef KERNEL_2_6
--#define new_decode_dev(x) (x)
--#define new_encode_dev(x) (x)
--#endif
--
- static void change_attributes(struct inode *inode, struct fuse_attr *attr)
- {
- if(S_ISREG(inode->i_mode) && i_size_read(inode) != attr->size) {
--#ifdef KERNEL_2_6
- invalidate_inode_pages(inode->i_mapping);
--#else
-- invalidate_inode_pages(inode);
--#endif
- }
-
- inode->i_mode = (inode->i_mode & S_IFMT) + (attr->mode & 07777);
-@@ -45,18 +36,12 @@
- i_size_write(inode, attr->size);
- inode->i_blksize = PAGE_CACHE_SIZE;
- inode->i_blocks = attr->blocks;
--#ifdef KERNEL_2_6
- inode->i_atime.tv_sec = attr->atime;
- inode->i_atime.tv_nsec = 0;
- inode->i_mtime.tv_sec = attr->mtime;
- inode->i_mtime.tv_nsec = 0;
- inode->i_ctime.tv_sec = attr->ctime;
- inode->i_ctime.tv_nsec = 0;
--#else
-- inode->i_atime = attr->atime;
-- inode->i_mtime = attr->mtime;
-- inode->i_ctime = attr->ctime;
--#endif
- }
-
- static void fuse_init_inode(struct inode *inode, struct fuse_attr *attr)
-@@ -410,14 +395,14 @@
- return fuse_do_getattr(inode);
- }
-
--static int _fuse_permission(struct inode *inode, int mask)
-+static int _fuse_permission(struct inode *inode, int mask, struct nameidata *nd)
- {
- struct fuse_conn *fc = INO_FC(inode);
-
- if(!(fc->flags & FUSE_ALLOW_OTHER) && current->fsuid != fc->uid)
- return -EACCES;
- else if(fc->flags & FUSE_DEFAULT_PERMISSIONS) {
-- int err = vfs_permission(inode, mask);
-+ int err = permission(inode, mask, nd);
-
- /* If permission is denied, try to refresh file
- attributes. This is also needed, because the root
-@@ -426,7 +411,7 @@
- if(err == -EACCES) {
- err = fuse_do_getattr(inode);
- if(!err)
-- err = vfs_permission(inode, mask);
-+ err = permission(inode, mask, nd);
- }
-
- /* FIXME: Need some mechanism to revoke permissions:
-@@ -613,13 +598,8 @@
- /* You can only _set_ these together (they may change by themselves) */
- if((ivalid & (ATTR_ATIME | ATTR_MTIME)) == (ATTR_ATIME | ATTR_MTIME)) {
- fvalid |= FATTR_UTIME;
--#ifdef KERNEL_2_6
- fattr->atime = iattr->ia_atime.tv_sec;
- fattr->mtime = iattr->ia_mtime.tv_sec;
--#else
-- fattr->atime = iattr->ia_atime;
-- fattr->mtime = iattr->ia_mtime;
--#endif
- }
-
- return fvalid;
-@@ -692,8 +672,6 @@
- return 1;
- }
-
--#ifdef KERNEL_2_6
--
- #define fuse_mknod _fuse_mknod
-
- static int fuse_getattr(struct vfsmount *mnt, struct dentry *entry,
-@@ -726,51 +704,13 @@
- static int fuse_permission(struct inode *inode, int mask,
- struct nameidata *nd)
- {
-- return _fuse_permission(inode, mask);
-+ return _fuse_permission(inode, mask, nd);
- }
-
- static int fuse_dentry_revalidate(struct dentry *entry, struct nameidata *nd)
- {
- return _fuse_dentry_revalidate(entry);
- }
--#else /* KERNEL_2_6 */
--
--#define fuse_create _fuse_create
--#define fuse_permission _fuse_permission
--
--static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry)
--{
-- struct inode *inode;
-- struct dentry *alias;
--
-- int err = fuse_lookup_iget(dir, entry, &inode);
-- if(err)
-- return ERR_PTR(err);
--
-- if(inode && S_ISDIR(inode->i_mode) &&
-- (alias = d_find_alias(inode)) != NULL) {
-- dput(alias);
-- iput(inode);
-- printk("fuse: cannot assign an existing directory\n");
-- return ERR_PTR(-EPROTO);
-- }
--
-- d_add(entry, inode);
-- return NULL;
--}
--
--static int fuse_mknod(struct inode *dir, struct dentry *entry, int mode,
-- int rdev)
--{
-- return _fuse_mknod(dir, entry, mode, rdev);
--}
--
--static int fuse_dentry_revalidate(struct dentry *entry, int flags)
--{
-- return _fuse_dentry_revalidate(entry);
--}
--#endif /* KERNEL_2_6 */
--
-
- static struct inode_operations fuse_dir_inode_operations =
- {
-@@ -785,11 +725,7 @@
- .link = fuse_link,
- .setattr = fuse_setattr,
- .permission = fuse_permission,
--#ifdef KERNEL_2_6
- .getattr = fuse_getattr,
--#else
-- .revalidate = fuse_revalidate,
--#endif
- };
-
- static struct file_operations fuse_dir_operations = {
-@@ -802,11 +738,7 @@
- static struct inode_operations fuse_file_inode_operations = {
- .setattr = fuse_setattr,
- .permission = fuse_permission,
--#ifdef KERNEL_2_6
- .getattr = fuse_getattr,
--#else
-- .revalidate = fuse_revalidate,
--#endif
- };
-
- static struct inode_operations fuse_symlink_inode_operations =
-@@ -814,11 +746,7 @@
- .setattr = fuse_setattr,
- .readlink = fuse_readlink,
- .follow_link = fuse_follow_link,
--#ifdef KERNEL_2_6
- .getattr = fuse_getattr,
--#else
-- .revalidate = fuse_revalidate,
--#endif
- };
-
- static struct dentry_operations fuse_dentry_operations = {