aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2004-11-10 11:52:26 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2004-11-10 11:52:26 +0000
commit51ec103bec44fc172cb606e30fd681f378ed4809 (patch)
treea1f33cf34250c562cc41d2b58266cd0bb59c650c /kernel
parent064efb0c65763655c3b7cc66b0dc0c553b60a2a5 (diff)
downloadlibfuse-51ec103bec44fc172cb606e30fd681f378ed4809.tar.gz
merge up to fuse_2_0_merge1
Diffstat (limited to 'kernel')
-rw-r--r--kernel/.cvsignore3
-rw-r--r--kernel/Makefile.in25
-rw-r--r--kernel/configure.ac72
-rw-r--r--kernel/fuse_i.h18
-rw-r--r--kernel/linux/fuse.h238
-rwxr-xr-xkernel/makeconf.sh9
6 files changed, 347 insertions, 18 deletions
diff --git a/kernel/.cvsignore b/kernel/.cvsignore
index a9f8088..907cdec 100644
--- a/kernel/.cvsignore
+++ b/kernel/.cvsignore
@@ -1,4 +1,7 @@
Makefile
+configure
+config.*
+*.cache
.deps
.*.cmd
*.mod.c
diff --git a/kernel/Makefile.in b/kernel/Makefile.in
index 7850b83..2f7b74b 100644
--- a/kernel/Makefile.in
+++ b/kernel/Makefile.in
@@ -2,11 +2,14 @@
SHELL = /bin/sh
INSTALL = @INSTALL@
-mkdir_p = @mkdir_p@
+mkdir_p = mkdir -p
majver = @majver@
+VERSION = @PACKAGE_VERSION@
-DISTFILES = Makefile.in dev.c dir.c file.c inode.c util.c fuse_i.h
+DISTFILES = Makefile.in configure.ac configure config.h.in makeconf.sh \
+ dev.c dir.c file.c inode.c util.c fuse_i.h
COMPATDISTFILES = compat/parser.c compat/parser.h
+LINUXDISTFILES = linux/fuse.h
fusemoduledir = @kmoduledir@/kernel/fs/fuse
@@ -32,20 +35,24 @@ clean:
distclean: clean
rm -f Makefile
+ rm -f config.h config.log config.status config.cache
+ rm -rf .tmp_versions
maintainer-clean: distclean
-distdir: $(DISTFILES) $(COMPATDISTFILES)
+distdir: $(DISTFILES) $(COMPATDISTFILES) $(LINUXDISTFILES)
cp -p $(DISTFILES) $(distdir)
mkdir $(distdir)/compat
cp -p $(COMPATDISTFILES) $(distdir)/compat
+ mkdir $(distdir)/linux
+ cp -p $(LINUXDISTFILES) $(distdir)/linux
ifeq ($(majver), 2.4)
-CC = @CC@
-LD = @LD@
+CC = gcc
+LD = ld
CFLAGS = -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -pipe
-CPPFLAGS = -I@kernelsrc@/include -I../include -D__KERNEL__ -DMODULE -D_LOOSE_KERNEL_NAMES -DFUSE_VERSION=\"@VERSION@\" @KERNELCPPFLAGS@
+CPPFLAGS = -I@kernelsrc@/include -I. -D__KERNEL__ -DMODULE -D_LOOSE_KERNEL_NAMES -DFUSE_VERSION=\"$(VERSION)\" @KERNELCPPFLAGS@
fuse_objs = dev.o dir.o file.o inode.o util.o compat/parser.o
@@ -59,7 +66,7 @@ all-spec: fuse.o
fuse.o: $(fuse_objs)
$(LD) -r -o fuse.o $(fuse_objs)
-fuse_headers = fuse_i.h ../include/linux/fuse.h
+fuse_headers = fuse_i.h linux/fuse.h
dev.o: $(fuse_headers)
dir.o: $(fuse_headers)
@@ -69,8 +76,8 @@ util.o: $(fuse_headers)
else
-export FUSE_INCLUDE ?= $(shell pwd)/../include
-EXTRA_CFLAGS += -I$(FUSE_INCLUDE) -DFUSE_VERSION=\"@VERSION@\"
+export FUSE_INCLUDE ?= $(shell pwd)
+EXTRA_CFLAGS += -I$(FUSE_INCLUDE) -DFUSE_VERSION=\"$(VERSION)\"
obj-m := fuse.o
fuse-objs := dev.o dir.o file.o inode.o util.o
diff --git a/kernel/configure.ac b/kernel/configure.ac
new file mode 100644
index 0000000..8dce5bd
--- /dev/null
+++ b/kernel/configure.ac
@@ -0,0 +1,72 @@
+AC_INIT(fuse-kernel, 2.1-pre0)
+AC_CONFIG_HEADERS([config.h])
+
+AC_MSG_CHECKING([kernel source directory])
+kernelsrc=
+AC_ARG_WITH(kernel,
+ [ --with-kernel=PATH Specify location of kernel source ],
+ [kernelsrc="$withval"])
+
+if test -z "$kernelsrc"; then
+ buildlink=/lib/modules/`uname -r`/build
+ if test -e $buildlink; then
+ kernelsrc=`(cd $buildlink; /bin/pwd)`
+ else
+ AC_MSG_RESULT([Not found])
+ AC_MSG_ERROR([
+*** Please specify the location of the kernel source with
+*** the '--with-kernel=SRCDIR' option])
+ fi
+fi
+AC_MSG_RESULT([$kernelsrc])
+
+AC_MSG_CHECKING([kernel source version])
+if test -r $kernelsrc/include/linux/version.h; then
+ kernsrcver=`(echo "#include <linux/version.h>"; echo "kernsrcver=UTS_RELEASE") | cpp -I $kernelsrc/include | grep "^kernsrcver=" | cut -d \" -f 2`
+fi
+if test -z "$kernsrcver"; then
+ AC_MSG_RESULT([Not found])
+ AC_MSG_ERROR([
+*** Cannot determine the version of the linux kernel source. Please
+*** configure the kernel before running this script])
+fi
+AC_MSG_RESULT([$kernsrcver])
+majver=`echo "$kernsrcver" | cut -f-2 -d.`
+kmoduledir=/lib/modules/$kernsrcver
+AC_SUBST(kernelsrc)
+AC_SUBST(majver)
+AC_SUBST(kmoduledir)
+subdirs="$subdirs kernel"
+
+if echo "$kernsrcver" | grep -q "^2.4"; then
+ old_cflags="$CFLAGS"
+ CFLAGS="-I${kernelsrc}/include -Wall -O2 -fno-strict-aliasing -D__KERNEL__"
+ AC_CHECK_DECL(i_size_read,
+ AC_DEFINE(HAVE_I_SIZE_FUNC, 1,
+ [Kernel has i_size_read() and i_size_write() functions]),,
+ [#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=
+KERNELCPPFLAGS=
+AC_MSG_CHECKING([if this is user mode linux])
+if test -f $kernelsrc/include/linux/autoconf.h && grep -q "^#define CONFIG_USERMODE 1" $kernelsrc/include/linux/autoconf.h; then
+ isuml=yes
+ KERNELMAKE_PARAMS="ARCH=um"
+ KERNELCPPFLAGS="-D__arch_um__ -DSUBARCH=\\\"i386\\\" -D_LARGEFILE64_SOURCE -I${kernelsrc}/arch/um/include -Derrno=kernel_errno -I${kernelsrc}/arch/um/kernel/tt/include -I${kernelsrc}/arch/um/kernel/skas/include"
+fi
+AC_MSG_RESULT([$isuml])
+AC_SUBST(KERNELMAKE_PARAMS)
+AC_SUBST(KERNELCPPFLAGS)
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/kernel/fuse_i.h b/kernel/fuse_i.h
index d0cde75..3c18975 100644
--- a/kernel/fuse_i.h
+++ b/kernel/fuse_i.h
@@ -20,15 +20,15 @@
#include <config.h>
#ifndef KERNEL_2_6
-#include <linux/config.h>
-#ifdef CONFIG_MODVERSIONS
-#define MODVERSIONS
-#include <linux/modversions.h>
-#endif
-#ifndef HAVE_I_SIZE_FUNC
-#define i_size_read(inode) ((inode)->i_size)
-#define i_size_write(inode, size) do { (inode)->i_size = size; } while(0)
-#endif
+# include <linux/config.h>
+# ifdef CONFIG_MODVERSIONS
+# define MODVERSIONS
+# include <linux/modversions.h>
+# endif
+# ifndef HAVE_I_SIZE_FUNC
+# define i_size_read(inode) ((inode)->i_size)
+# define i_size_write(inode, size) do { (inode)->i_size = size; } while(0)
+# endif
#endif
#include <linux/kernel.h>
#include <linux/module.h>
diff --git a/kernel/linux/fuse.h b/kernel/linux/fuse.h
new file mode 100644
index 0000000..e5f9a6c
--- /dev/null
+++ b/kernel/linux/fuse.h
@@ -0,0 +1,238 @@
+/*
+ FUSE: Filesystem in Userspace
+ Copyright (C) 2001-2004 Miklos Szeredi <miklos@szeredi.hu>
+
+ This program can be distributed under the terms of the GNU GPL.
+ See the file COPYING.
+*/
+
+/* This file defines the kernel interface of FUSE */
+
+/** Version number of this interface */
+#define FUSE_KERNEL_VERSION 4
+
+/** Minor version number of this interface */
+#define FUSE_KERNEL_MINOR_VERSION 1
+
+/** The node ID of the root inode */
+#define FUSE_ROOT_ID 1
+
+/** Opening this will yield a new control file */
+#define FUSE_DEV "/proc/fs/fuse/dev"
+
+/** The file containing the version in the form MAJOR.MINOR */
+#define FUSE_VERSION_FILE "/proc/fs/fuse/version"
+
+struct fuse_attr {
+ unsigned long ino;
+ unsigned int mode;
+ unsigned int nlink;
+ unsigned int uid;
+ unsigned int gid;
+ unsigned int rdev;
+ unsigned long long size;
+ unsigned long blocks;
+ unsigned long atime;
+ unsigned long atimensec;
+ unsigned long mtime;
+ unsigned long mtimensec;
+ unsigned long ctime;
+ unsigned long ctimensec;
+};
+
+struct fuse_kstatfs {
+ unsigned int bsize;
+ unsigned long long blocks;
+ unsigned long long bfree;
+ unsigned long long bavail;
+ unsigned long long files;
+ unsigned long long ffree;
+ unsigned int namelen;
+};
+
+#define FATTR_MODE (1 << 0)
+#define FATTR_UID (1 << 1)
+#define FATTR_GID (1 << 2)
+#define FATTR_SIZE (1 << 3)
+#define FATTR_ATIME (1 << 4)
+#define FATTR_MTIME (1 << 5)
+#define FATTR_CTIME (1 << 6)
+
+enum fuse_opcode {
+ FUSE_LOOKUP = 1,
+ FUSE_FORGET = 2, /* no reply */
+ FUSE_GETATTR = 3,
+ FUSE_SETATTR = 4,
+ FUSE_READLINK = 5,
+ FUSE_SYMLINK = 6,
+ FUSE_GETDIR = 7,
+ FUSE_MKNOD = 8,
+ FUSE_MKDIR = 9,
+ FUSE_UNLINK = 10,
+ FUSE_RMDIR = 11,
+ FUSE_RENAME = 12,
+ FUSE_LINK = 13,
+ FUSE_OPEN = 14,
+ FUSE_READ = 15,
+ FUSE_WRITE = 16,
+ FUSE_STATFS = 17,
+ FUSE_RELEASE = 18, /* no reply */
+ FUSE_INVALIDATE = 19, /* user initiated */
+ FUSE_FSYNC = 20,
+ FUSE_SETXATTR = 21,
+ FUSE_GETXATTR = 22,
+ FUSE_LISTXATTR = 23,
+ FUSE_REMOVEXATTR = 24,
+ FUSE_FLUSH = 25,
+};
+
+/* Conservative buffer size for the client */
+#define FUSE_MAX_IN 8192
+
+#define FUSE_NAME_MAX 1024
+#define FUSE_SYMLINK_MAX 4096
+#define FUSE_XATTR_SIZE_MAX 4096
+
+struct fuse_entry_out {
+ unsigned long nodeid; /* Inode ID */
+ unsigned long generation; /* Inode generation: nodeid:gen must
+ be unique for the fs's lifetime */
+ unsigned long entry_valid; /* Cache timeout for the name */
+ unsigned long entry_valid_nsec;
+ unsigned long attr_valid; /* Cache timeout for the attributes */
+ unsigned long attr_valid_nsec;
+ struct fuse_attr attr;
+};
+
+struct fuse_forget_in {
+ int version;
+};
+
+struct fuse_attr_out {
+ unsigned long attr_valid; /* Cache timeout for the attributes */
+ unsigned long attr_valid_nsec;
+ struct fuse_attr attr;
+};
+
+struct fuse_getdir_out {
+ int fd;
+};
+
+struct fuse_mknod_in {
+ unsigned int mode;
+ unsigned int rdev;
+};
+
+struct fuse_mkdir_in {
+ unsigned int mode;
+};
+
+struct fuse_rename_in {
+ unsigned long newdir;
+};
+
+struct fuse_link_in {
+ unsigned long newdir;
+};
+
+struct fuse_setattr_in {
+ struct fuse_attr attr;
+ unsigned int valid;
+};
+
+struct fuse_open_in {
+ unsigned int flags;
+};
+
+struct fuse_open_out {
+ unsigned long fh;
+};
+
+struct fuse_release_in {
+ unsigned long fh;
+ unsigned int flags;
+};
+
+struct fuse_flush_in {
+ unsigned long fh;
+};
+
+struct fuse_read_in {
+ unsigned long fh;
+ unsigned long long offset;
+ unsigned int size;
+};
+
+struct fuse_write_in {
+ int writepage;
+ unsigned long fh;
+ unsigned long long offset;
+ unsigned int size;
+};
+
+struct fuse_write_out {
+ unsigned int size;
+};
+
+struct fuse_statfs_out {
+ struct fuse_kstatfs st;
+};
+
+struct fuse_fsync_in {
+ unsigned long fh;
+ int datasync;
+};
+
+struct fuse_setxattr_in {
+ unsigned int size;
+ unsigned int flags;
+};
+
+struct fuse_getxattr_in {
+ unsigned int size;
+};
+
+struct fuse_getxattr_out {
+ unsigned int size;
+};
+
+struct fuse_in_header {
+ int unique;
+ enum fuse_opcode opcode;
+ unsigned long nodeid;
+ unsigned int uid;
+ unsigned int gid;
+ unsigned int pid;
+};
+
+struct fuse_out_header {
+ int unique;
+ int error;
+};
+
+struct fuse_user_header {
+ int unique; /* zero */
+ enum fuse_opcode opcode;
+ unsigned long nodeid;
+ unsigned long ino; /* Needed only on 2.4.x where ino is also
+ used for inode lookup */
+};
+
+struct fuse_dirent {
+ unsigned long ino;
+ unsigned short namelen;
+ unsigned char type;
+ char name[256];
+};
+
+#define FUSE_NAME_OFFSET ((unsigned int) ((struct fuse_dirent *) 0)->name)
+#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(long) - 1) & ~(sizeof(long) - 1))
+#define FUSE_DIRENT_SIZE(d) \
+ FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
+
+/*
+ * Local Variables:
+ * indent-tabs-mode: t
+ * c-basic-offset: 8
+ * End:
+ */
diff --git a/kernel/makeconf.sh b/kernel/makeconf.sh
new file mode 100755
index 0000000..d9d6fe1
--- /dev/null
+++ b/kernel/makeconf.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+echo Running autoheader...
+autoheader
+echo Running autoconf...
+autoconf
+
+rm -f config.cache config.status
+echo "To compile run './configure', and then 'make'."