[kernel] r14760 - in dists/trunk/linux-2.6/debian: . patches/features/all/aufs2 patches/series
Ben Hutchings
benh at alioth.debian.org
Wed Dec 9 01:11:17 UTC 2009
Author: benh
Date: Wed Dec 9 01:11:13 2009
New Revision: 14760
Log:
aufs2: Update to snapshot from 2009-12-05
Added:
dists/trunk/linux-2.6/debian/patches/features/all/aufs2/aufs2-20091205.patch
dists/trunk/linux-2.6/debian/patches/series/2
Modified:
dists/trunk/linux-2.6/debian/changelog
Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog Wed Dec 9 00:44:51 2009 (r14759)
+++ dists/trunk/linux-2.6/debian/changelog Wed Dec 9 01:11:13 2009 (r14760)
@@ -7,6 +7,9 @@
[ Moritz Muehlenhoff ]
* Disable cryptoloop (Closes: #559755)
* Initial work on a README.source file as suggested by current policy
+
+ [ Ben Hutchings ]
+ * aufs2: Update to snapshot from 2009-12-05
-- Bastian Blank <waldi at debian.org> Sun, 06 Dec 2009 20:42:14 +0100
Added: dists/trunk/linux-2.6/debian/patches/features/all/aufs2/aufs2-20091205.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/aufs2/aufs2-20091205.patch Wed Dec 9 01:11:13 2009 (r14760)
@@ -0,0 +1,234 @@
+diff --git a/fs/aufs/f_op.c b/fs/aufs/f_op.c
+index 7601012..65c50bc 100644
+--- a/fs/aufs/f_op.c
++++ b/fs/aufs/f_op.c
+@@ -810,6 +810,7 @@ const struct file_operations aufs_file_fop = {
+ #ifdef CONFIG_AUFS_POLL
+ .poll = aufs_poll,
+ #endif
++ .unlocked_ioctl = aufs_ioctl_nondir,
+ .mmap = aufs_mmap,
+ .open = aufs_open_nondir,
+ .flush = aufs_flush,
+diff --git a/fs/aufs/file.h b/fs/aufs/file.h
+index 79a63fb..d665cc7 100644
+--- a/fs/aufs/file.h
++++ b/fs/aufs/file.h
+@@ -94,6 +94,9 @@ void au_finfo_fin(struct file *file);
+ int au_finfo_init(struct file *file);
+ int au_fi_realloc(struct au_finfo *finfo, int nbr);
+
++/* ioctl.c */
++long aufs_ioctl_nondir(struct file *file, unsigned int cmd, unsigned long arg);
++
+ /* ---------------------------------------------------------------------- */
+
+ static inline struct au_finfo *au_fi(struct file *file)
+diff --git a/fs/aufs/i_op.c b/fs/aufs/i_op.c
+index a7f3bc7..8151896 100644
+--- a/fs/aufs/i_op.c
++++ b/fs/aufs/i_op.c
+@@ -159,6 +159,9 @@ static struct dentry *aufs_lookup(struct inode *dir, struct dentry *dentry,
+
+ sb = dir->i_sb;
+ si_read_lock(sb, AuLock_FLUSH);
++ ret = ERR_PTR(-ENAMETOOLONG);
++ if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN))
++ goto out;
+ err = au_alloc_dinfo(dentry);
+ ret = ERR_PTR(err);
+ if (unlikely(err))
+diff --git a/fs/aufs/ioctl.c b/fs/aufs/ioctl.c
+index 012361a..6f8bad8 100644
+--- a/fs/aufs/ioctl.c
++++ b/fs/aufs/ioctl.c
+@@ -19,10 +19,67 @@
+ /*
+ * ioctl
+ * plink-management and readdir in userspace.
++ * assist the pathconf(3) wrapper library.
+ */
+
++#include <linux/file.h>
+ #include "aufs.h"
+
++static int au_wbr_fd(struct path *path)
++{
++ int err, fd, flags;
++ aufs_bindex_t wbi, bindex, bend;
++ struct file *h_file;
++ struct super_block *sb;
++ struct dentry *root;
++ struct au_branch *wbr;
++
++ err = get_unused_fd();
++ if (unlikely(err < 0))
++ goto out;
++ fd = err;
++
++ flags = O_RDONLY | O_DIRECTORY;
++ if (force_o_largefile())
++ flags |= O_LARGEFILE;
++
++ wbi = 0;
++ sb = path->dentry->d_sb;
++ root = sb->s_root;
++ aufs_read_lock(root, AuLock_IR);
++ wbr = au_sbr(sb, wbi);
++ if (!(path->mnt->mnt_flags & MNT_READONLY)
++ && !au_br_writable(wbr->br_perm)) {
++ bend = au_sbend(sb);
++ for (bindex = 1; bindex <= bend; bindex++) {
++ wbr = au_sbr(sb, bindex);
++ if (au_br_writable(wbr->br_perm)) {
++ wbi = bindex;
++ break;
++ }
++ }
++ wbr = au_sbr(sb, wbi);
++ }
++ AuDbg("wbi %d\n", wbi);
++ h_file = au_h_open(root, wbi, flags, NULL);
++ aufs_read_unlock(root, AuLock_IR);
++ err = PTR_ERR(h_file);
++ if (IS_ERR(h_file))
++ goto out_fd;
++
++ atomic_dec(&wbr->br_count); /* cf. au_h_open() */
++ fd_install(fd, h_file);
++ err = fd;
++ goto out; /* success */
++
++ out_fd:
++ put_unused_fd(fd);
++ out:
++ return err;
++}
++
++/* ---------------------------------------------------------------------- */
++
+ long aufs_ioctl_dir(struct file *file, unsigned int cmd, unsigned long arg)
+ {
+ long err;
+@@ -38,6 +95,27 @@ long aufs_ioctl_dir(struct file *file, unsigned int cmd, unsigned long arg)
+ err = au_rdu_ioctl(file, cmd, arg);
+ break;
+
++ case AUFS_CTL_WBR_FD:
++ err = au_wbr_fd(&file->f_path);
++ break;
++
++ default:
++ err = -EINVAL;
++ }
++
++ AuTraceErr(err);
++ return err;
++}
++
++long aufs_ioctl_nondir(struct file *file, unsigned int cmd, unsigned long arg)
++{
++ long err;
++
++ switch (cmd) {
++ case AUFS_CTL_WBR_FD:
++ err = au_wbr_fd(&file->f_path);
++ break;
++
+ default:
+ err = -EINVAL;
+ }
+diff --git a/fs/aufs/rdu.c b/fs/aufs/rdu.c
+index 0a224f4..c38f280 100644
+--- a/fs/aufs/rdu.c
++++ b/fs/aufs/rdu.c
+@@ -59,6 +59,8 @@ static int au_rdu_fill(void *__arg, const char *name, int nlen,
+ ent.bindex = rdu->cookie.bindex;
+ ent.type = d_type;
+ ent.nlen = nlen;
++ if (unlikely(nlen > AUFS_MAX_NAMELEN))
++ ent.type = DT_UNKNOWN;
+
+ err = -EFAULT;
+ if (copy_to_user(arg->ent.e, &ent, sizeof(ent)))
+diff --git a/fs/aufs/vdir.c b/fs/aufs/vdir.c
+index 50a3caf..361de5e 100644
+--- a/fs/aufs/vdir.c
++++ b/fs/aufs/vdir.c
+@@ -474,9 +474,12 @@ static int fillvdir(void *__arg, const char *__name, int nlen,
+
+ sb = arg->file->f_dentry->d_sb;
+ arg->err = au_ino(sb, arg->bindex, h_ino, d_type, &ino);
+- if (!arg->err)
++ if (!arg->err) {
++ if (unlikely(nlen > AUFS_MAX_NAMELEN))
++ d_type = DT_UNKNOWN;
+ arg->err = append_de(arg->vdir, name, nlen, ino,
+ d_type, &arg->delist);
++ }
+ } else if (au_ftest_fillvdir(arg->flags, WHABLE)) {
+ name += AUFS_WH_PFX_LEN;
+ nlen -= AUFS_WH_PFX_LEN;
+@@ -486,10 +489,13 @@ static int fillvdir(void *__arg, const char *__name, int nlen,
+ if (shwh)
+ arg->err = au_wh_ino(sb, arg->bindex, h_ino, d_type,
+ &ino);
+- if (!arg->err)
++ if (!arg->err) {
++ if (nlen <= AUFS_MAX_NAMELEN + AUFS_WH_PFX_LEN)
++ d_type = DT_UNKNOWN;
+ arg->err = au_nhash_append_wh
+ (&arg->whlist, name, nlen, ino, d_type,
+ arg->bindex, shwh);
++ }
+ }
+
+ out:
+diff --git a/fs/aufs/whout.c b/fs/aufs/whout.c
+index b0ee925..674ab35 100644
+--- a/fs/aufs/whout.c
++++ b/fs/aufs/whout.c
+@@ -123,9 +123,8 @@ struct dentry *au_whtmp_lkup(struct dentry *h_parent, struct au_branch *br,
+ {
+ struct dentry *dentry;
+ int i;
+- /* cf. AUFS_MAX_NAMELEN in include/linux/aufs_type.h */
+- char defname[AUFS_WH_PFX_LEN * 2 + DNAME_INLINE_LEN_MIN + 1
+- + AUFS_WH_TMP_LEN + 1], *name, *p;
++ char defname[NAME_MAX - AUFS_MAX_NAMELEN + DNAME_INLINE_LEN_MIN + 1],
++ *name, *p;
+ static unsigned short cnt;
+ struct qstr qs;
+
+diff --git a/include/linux/aufs_type.h b/include/linux/aufs_type.h
+index b4fee85..cc0263d 100644
+--- a/include/linux/aufs_type.h
++++ b/include/linux/aufs_type.h
+@@ -23,7 +23,7 @@
+ #include <linux/limits.h>
+ #include <linux/types.h>
+
+-#define AUFS_VERSION "2-standalone.tree-20091130"
++#define AUFS_VERSION "2-standalone.tree-20091207"
+
+ /* todo? move this to linux-2.6.19/include/magic.h */
+ #define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
+@@ -110,7 +110,10 @@ enum {
+
+ /* readdir in userspace */
+ AuCtl_RDU,
+- AuCtl_RDU_INO
++ AuCtl_RDU_INO,
++
++ /* pathconf wrapper */
++ AuCtl_WBR_FD
+ };
+
+ /* borrowed from linux/include/linux/kernel.h */
+@@ -187,5 +190,6 @@ struct aufs_rdu {
+ #define AUFS_CTL_PLINK_CLEAN _IO(AuCtlType, AuCtl_PLINK_CLEAN)
+ #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__ */
Added: dists/trunk/linux-2.6/debian/patches/series/2
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/series/2 Wed Dec 9 01:11:13 2009 (r14760)
@@ -0,0 +1 @@
++ features/all/aufs2/aufs2-20091205.patch
More information about the Kernel-svn-changes
mailing list