Extended attributes for 2.4
authorMiklos Szeredi <miklos@szeredi.hu>
Tue, 4 May 2004 08:49:16 +0000 (08:49 +0000)
committerMiklos Szeredi <miklos@szeredi.hu>
Tue, 4 May 2004 08:49:16 +0000 (08:49 +0000)
ChangeLog
configure.in
kernel/dir.c
kernel/inode.c
lib/fuse_i.h

index f1d3d0d4568462ae0299be2c2694c89ef8878e57..5631b3c206a3aea4b7d0bed253ee05cacd8f9101 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-05-04  Miklos Szeredi <mszeredi@inf.bme.hu>
+
+       * Extended attributes support for 2.4 (patch by Cody Pisto)
+       
 2004-04-20  Miklos Szeredi <mszeredi@inf.bme.hu>
 
        * Fixed parser with modversions (Mattias Wadman)
index cd943fe2de3373b9089e95542366712587bf4f50..a41407b110d7bdb10b0a4066deab0e538d737881 100644 (file)
@@ -11,7 +11,7 @@ fi
 AC_SUBST(LD)
 
 CFLAGS="-Wall -W -g -O2"
-CPPFLAGS="$(CPPFLAGS) -D_FILE_OFFSET_BITS=64"
+CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64"
 
 AC_ARG_ENABLE(kernel-module,
        [  --enable-kernel-module  Compile kernel module, requires --with-kernel option ])
@@ -71,6 +71,14 @@ if test "$enable_kernel_module" != "no"; then
                        [#include <linux/fs.h>])
                CFLAGS="$old_cflags"
        fi
+       AC_MSG_CHECKING([if kernel has extended attribute support])
+       if test -f $kernelsrc/include/linux/xattr.h; then
+               AC_DEFINE(HAVE_KERNEL_XATTR, 1, [Kernel has xattr support],,)
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+       fi
+
        isuml=no
        KERNELMAKE_PARAMS=
        AC_MSG_CHECKING([if this is user mode linux])
index 73f804382dd2e656cf711045e2be6d5bdf0a170a..110a4720727db3b41c48bbf738da7ed155fb930b 100644 (file)
@@ -726,8 +726,53 @@ 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 */
+
+#ifdef HAVE_KERNEL_XATTR
+
+#ifdef KERNEL_2_6
 static int fuse_setxattr(struct dentry *entry, const char *name,
                         const void *value, size_t size, int flags)
+#else
+static int fuse_setxattr(struct dentry *entry, const char *name,
+                        void *value, size_t size, int flags)
+#endif
 {
        struct inode *inode = entry->d_inode;
        struct fuse_conn *fc = INO_FC(inode);
@@ -843,44 +888,7 @@ static int fuse_removexattr(struct dentry *entry, const char *name)
        
 }
 
-#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 */
-
+#endif
 
 static struct inode_operations fuse_dir_inode_operations =
 {
@@ -897,12 +905,14 @@ static struct inode_operations fuse_dir_inode_operations =
        .permission     = fuse_permission,
 #ifdef KERNEL_2_6
        .getattr        = fuse_getattr,
+#else
+       .revalidate     = fuse_revalidate,
+#endif
+#ifdef HAVE_KERNEL_XATTR
        .setxattr       = fuse_setxattr,
        .getxattr       = fuse_getxattr,
        .listxattr      = fuse_listxattr,
        .removexattr    = fuse_removexattr,
-#else
-       .revalidate     = fuse_revalidate,
 #endif
 };
 
@@ -918,12 +928,14 @@ static struct inode_operations fuse_file_inode_operations = {
        .permission     = fuse_permission,
 #ifdef KERNEL_2_6
        .getattr        = fuse_getattr,
+#else
+       .revalidate     = fuse_revalidate,
+#endif
+#ifdef HAVE_KERNEL_XATTR
        .setxattr       = fuse_setxattr,
        .getxattr       = fuse_getxattr,
        .listxattr      = fuse_listxattr,
        .removexattr    = fuse_removexattr,
-#else
-       .revalidate     = fuse_revalidate,
 #endif
 };
 
@@ -934,12 +946,14 @@ static struct inode_operations fuse_symlink_inode_operations =
        .follow_link    = fuse_follow_link,
 #ifdef KERNEL_2_6
        .getattr        = fuse_getattr,
+#else
+       .revalidate     = fuse_revalidate,
+#endif
+#ifdef HAVE_KERNEL_XATTR
        .setxattr       = fuse_setxattr,
        .getxattr       = fuse_getxattr,
        .listxattr      = fuse_listxattr,
        .removexattr    = fuse_removexattr,
-#else
-       .revalidate     = fuse_revalidate,
 #endif
 };
 
index 3aa3f02ff23d3a50ebdba6a9504fc5048906ff29..fb02569703b0fecedc4467045ba2d8cebd93e8e3 100644 (file)
@@ -140,12 +140,6 @@ static int parse_fuse_opt(char *opt, struct fuse_mount_data *d)
        memset(d, 0, sizeof(struct fuse_mount_data));
        d->fd = -1;
 
-       if (opt == NULL)
-               return 0;
-
-       if (opt[PAGE_SIZE - 1] != '\0')
-               return 0;
-
        while ((p = strsep(&opt, ",")) != NULL) {
                int token;
                int value;
index ce816046d967235bff5af59cc292694f9c0c7634..3938f29aa0d8653668c061c827122512881fb1d5 100644 (file)
@@ -52,7 +52,6 @@ struct fuse_dirhandle {
 };
 
 struct fuse_cmd {
-    struct fuse *f;
     char *buf;
     size_t buflen;
 };