123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- diff -Nur linux-3.1.4.orig/include/linux/Kbuild linux-3.1.4/include/linux/Kbuild
- @@ -65,6 +65,7 @@
- header-y += atmsap.h
- header-y += atmsvc.h
- header-y += audit.h
- +header-y += aufs_type.h
- header-y += auto_fs.h
- header-y += auto_fs4.h
- header-y += auxvec.h
- diff -Nur linux-3.1.4.orig/include/linux/aufs_type.h linux-3.1.4/include/linux/aufs_type.h
- @@ -0,0 +1,197 @@
- +/*
- + * Copyright (C) 2005-2011 Junjiro R. Okajima
- + *
- + * This program, aufs is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- + */
- +
- +#ifndef __AUFS_TYPE_H__
- +#define __AUFS_TYPE_H__
- +
- +#include <linux/ioctl.h>
- +#include <linux/kernel.h>
- +#include <linux/limits.h>
- +#include <linux/types.h>
- +
- +#define AUFS_VERSION "2.1-standalone.tree-36-20110110"
- +
- +/* todo? move this to linux-2.6.19/include/magic.h */
- +#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
- +
- +/* ---------------------------------------------------------------------- */
- +
- +#ifdef CONFIG_AUFS_BRANCH_MAX_127
- +typedef __s8 aufs_bindex_t;
- +#define AUFS_BRANCH_MAX 127
- +#else
- +typedef __s16 aufs_bindex_t;
- +#ifdef CONFIG_AUFS_BRANCH_MAX_511
- +#define AUFS_BRANCH_MAX 511
- +#elif defined(CONFIG_AUFS_BRANCH_MAX_1023)
- +#define AUFS_BRANCH_MAX 1023
- +#elif defined(CONFIG_AUFS_BRANCH_MAX_32767)
- +#define AUFS_BRANCH_MAX 32767
- +#endif
- +#endif
- +
- +#ifdef __KERNEL__
- +#ifndef AUFS_BRANCH_MAX
- +#error unknown CONFIG_AUFS_BRANCH_MAX value
- +#endif
- +#endif /* __KERNEL__ */
- +
- +/* ---------------------------------------------------------------------- */
- +
- +#define AUFS_NAME "aufs"
- +#define AUFS_FSTYPE AUFS_NAME
- +
- +#define AUFS_ROOT_INO 2
- +#define AUFS_FIRST_INO 11
- +
- +#define AUFS_WH_PFX ".wh."
- +#define AUFS_WH_PFX_LEN ((int)sizeof(AUFS_WH_PFX) - 1)
- +#define AUFS_WH_TMP_LEN 4
- +/* a limit for rmdir/rename a dir */
- +#define AUFS_MAX_NAMELEN (NAME_MAX \
- + - AUFS_WH_PFX_LEN * 2 /* doubly whiteouted */\
- + - 1 /* dot */\
- + - AUFS_WH_TMP_LEN) /* hex */
- +#define AUFS_XINO_FNAME "." AUFS_NAME ".xino"
- +#define AUFS_XINO_DEFPATH "/tmp/" AUFS_XINO_FNAME
- +#define AUFS_XINO_TRUNC_INIT 64 /* blocks */
- +#define AUFS_XINO_TRUNC_STEP 4 /* blocks */
- +#define AUFS_DIRWH_DEF 3
- +#define AUFS_RDCACHE_DEF 10 /* seconds */
- +#define AUFS_RDCACHE_MAX 3600 /* seconds */
- +#define AUFS_RDBLK_DEF 512 /* bytes */
- +#define AUFS_RDHASH_DEF 32
- +#define AUFS_WKQ_NAME AUFS_NAME "d"
- +#define AUFS_WKQ_PRE_NAME AUFS_WKQ_NAME "_pre"
- +#define AUFS_MFS_DEF_SEC 30 /* seconds */
- +#define AUFS_MFS_MAX_SEC 3600 /* seconds */
- +#define AUFS_PLINK_WARN 100 /* number of plinks */
- +
- +/* pseudo-link maintenace under /proc */
- +#define AUFS_PLINK_MAINT_NAME "plink_maint"
- +#define AUFS_PLINK_MAINT_DIR "fs/" AUFS_NAME
- +#define AUFS_PLINK_MAINT_PATH AUFS_PLINK_MAINT_DIR "/" AUFS_PLINK_MAINT_NAME
- +
- +#define AUFS_DIROPQ_NAME AUFS_WH_PFX ".opq" /* whiteouted doubly */
- +#define AUFS_WH_DIROPQ AUFS_WH_PFX AUFS_DIROPQ_NAME
- +
- +#define AUFS_BASE_NAME AUFS_WH_PFX AUFS_NAME
- +#define AUFS_PLINKDIR_NAME AUFS_WH_PFX "plnk"
- +#define AUFS_ORPHDIR_NAME AUFS_WH_PFX "orph"
- +
- +/* doubly whiteouted */
- +#define AUFS_WH_BASE AUFS_WH_PFX AUFS_BASE_NAME
- +#define AUFS_WH_PLINKDIR AUFS_WH_PFX AUFS_PLINKDIR_NAME
- +#define AUFS_WH_ORPHDIR AUFS_WH_PFX AUFS_ORPHDIR_NAME
- +
- +/* branch permission */
- +#define AUFS_BRPERM_RW "rw"
- +#define AUFS_BRPERM_RO "ro"
- +#define AUFS_BRPERM_RR "rr"
- +#define AUFS_BRPERM_WH "wh"
- +#define AUFS_BRPERM_NLWH "nolwh"
- +#define AUFS_BRPERM_ROWH AUFS_BRPERM_RO "+" AUFS_BRPERM_WH
- +#define AUFS_BRPERM_RRWH AUFS_BRPERM_RR "+" AUFS_BRPERM_WH
- +#define AUFS_BRPERM_RWNLWH AUFS_BRPERM_RW "+" AUFS_BRPERM_NLWH
- +
- +/* ---------------------------------------------------------------------- */
- +
- +/* ioctl */
- +enum {
- + /* readdir in userspace */
- + AuCtl_RDU,
- + AuCtl_RDU_INO,
- +
- + /* pathconf wrapper */
- + AuCtl_WBR_FD
- +};
- +
- +/* borrowed from linux/include/linux/kernel.h */
- +#ifndef ALIGN
- +#define ALIGN(x, a) __ALIGN_MASK(x, (typeof(x))(a)-1)
- +#define __ALIGN_MASK(x, mask) (((x)+(mask))&~(mask))
- +#endif
- +
- +/* borrowed from linux/include/linux/compiler-gcc3.h */
- +#ifndef __aligned
- +#define __aligned(x) __attribute__((aligned(x)))
- +#define __packed __attribute__((packed))
- +#endif
- +
- +struct au_rdu_cookie {
- + __u64 h_pos;
- + __s16 bindex;
- + __u8 flags;
- + __u8 pad;
- + __u32 generation;
- +} __aligned(8);
- +
- +struct au_rdu_ent {
- + __u64 ino;
- + __s16 bindex;
- + __u8 type;
- + __u8 nlen;
- + __u8 wh;
- + char name[0];
- +} __aligned(8);
- +
- +static inline int au_rdu_len(int nlen)
- +{
- + /* include the terminating NULL */
- + return ALIGN(sizeof(struct au_rdu_ent) + nlen + 1,
- + sizeof(__u64));
- +}
- +
- +union au_rdu_ent_ul {
- + struct au_rdu_ent __user *e;
- + __u64 ul;
- +};
- +
- +enum {
- + AufsCtlRduV_SZ,
- + AufsCtlRduV_End
- +};
- +
- +struct aufs_rdu {
- + /* input */
- + union {
- + __u64 sz; /* AuCtl_RDU */
- + __u64 nent; /* AuCtl_RDU_INO */
- + };
- + union au_rdu_ent_ul ent;
- + __u16 verify[AufsCtlRduV_End];
- +
- + /* input/output */
- + __u32 blk;
- +
- + /* output */
- + union au_rdu_ent_ul tail;
- + /* number of entries which were added in a single call */
- + __u64 rent;
- + __u8 full;
- + __u8 shwh;
- +
- + struct au_rdu_cookie cookie;
- +} __aligned(8);
- +
- +#define AuCtlType 'A'
- +#define AUFS_CTL_RDU _IOWR(AuCtlType, AuCtl_RDU, struct aufs_rdu)
- +#define AUFS_CTL_RDU_INO _IOWR(AuCtlType, AuCtl_RDU_INO, struct aufs_rdu)
- +#define AUFS_CTL_WBR_FD _IO(AuCtlType, AuCtl_WBR_FD)
- +
- +#endif /* __AUFS_TYPE_H__ */
- diff -Nur linux-3.1.4.orig/include/linux/namei.h linux-3.1.4/include/linux/namei.h
- @@ -85,6 +85,9 @@
- extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
- int (*open)(struct inode *, struct file *));
-
- +extern struct dentry *lookup_hash(struct nameidata *nd);
- +extern int __lookup_one_len(const char *name, struct qstr *this,
- + struct dentry *base, int len);
- extern struct dentry *lookup_one_len(const char *, struct dentry *, int);
-
- extern int follow_down_one(struct path *);
- diff -Nur linux-3.1.4.orig/include/linux/splice.h linux-3.1.4/include/linux/splice.h
- @@ -91,4 +91,9 @@
- extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
-
- extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
- +extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
- + loff_t *ppos, size_t len, unsigned int flags);
- +extern long do_splice_to(struct file *in, loff_t *ppos,
- + struct pipe_inode_info *pipe, size_t len,
- + unsigned int flags);
- #endif
|