wok-next rev 15733

linux: add CONFIG_X86_MSR and CONFIG_EFI
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Jan 01 19:09:17 2014 +0100 (2014-01-01)
parents d8cd6b2f49d7
children e30c03f14110
files linux/receipt linux/stuff/aufs3-base.patch linux/stuff/aufs3-kbuild.patch linux/stuff/aufs3-loopback.patch linux/stuff/aufs3-mmap.patch linux/stuff/aufs3-standalone.patch linux/stuff/linux-slitaz.config linux/stuff/linux-slitaz.config64
line diff
     1.1 --- a/linux/receipt	Sat Dec 28 15:39:34 2013 +0000
     1.2 +++ b/linux/receipt	Wed Jan 01 19:09:17 2014 +0100
     1.3 @@ -68,6 +68,7 @@
     1.4  			#xzcat $SRC/$(basename $PATCH) | patch -Np1 >/dev/null
     1.5  			patch -Np1 < $stuff/$ARCH/linux-arm.patch || exit 1
     1.6  			cp -f $stuff/$ARCH/linux-arm.config .config
     1.7 +			yes '' | make ARCH=$ARCH oldconfig
     1.8  			make ARCH=$ARCH CROSS_COMPILE=${HOST_SYSTEM}- bzImage &&
     1.9  			make ARCH=$ARCH CROSS_COMPILE=${HOST_SYSTEM}- modules &&
    1.10  			make ARCH=$ARCH CROSS_COMPILE=${HOST_SYSTEM}- \
    1.11 @@ -189,7 +190,7 @@
    1.12  
    1.13  	# Build bzImage64 with modules
    1.14  	cp -f $stuff/$PACKAGE-slitaz.config64 .config
    1.15 -	#make ARCH=x86_64 oldconfig
    1.16 +	yes '' | make ARCH=x86_64 oldconfig
    1.17  	make -j 4 ARCH=x86_64 CROSS_COMPILE=uclibc-x86_64- bzImage &&
    1.18  	make -j 4 ARCH=x86_64 CROSS_COMPILE=uclibc-x86_64- modules &&
    1.19  	make ARCH=x86_64 INSTALL_MOD_PATH=$DESTDIR/linux64 modules_install &&
    1.20 @@ -234,7 +235,7 @@
    1.21  
    1.22  	# Build bzImage with modules
    1.23  	cp -f $stuff/$PACKAGE-slitaz.config .config
    1.24 -	#make ARCH=i386 oldconfig
    1.25 +	yes '' | make ARCH=i386 oldconfig
    1.26  	ln .config $WOK/$PACKAGE/source/slitaz/config
    1.27  	make ARCH=i386 -j 4 bzImage &&
    1.28  	make ARCH=i386 -j 4 modules &&
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/linux/stuff/aufs3-base.patch	Wed Jan 01 19:09:17 2014 +0100
     2.3 @@ -0,0 +1,70 @@
     2.4 +aufs3.2 base patch
     2.5 +
     2.6 +diff --git a/fs/namei.c b/fs/namei.c
     2.7 +index 5008f01..4cc94cf 100644
     2.8 +--- a/fs/namei.c
     2.9 ++++ b/fs/namei.c
    2.10 +@@ -1753,7 +1753,7 @@ static struct dentry *__lookup_hash(struct qstr *name,
    2.11 +  * needs parent already locked. Doesn't follow mounts.
    2.12 +  * SMP-safe.
    2.13 +  */
    2.14 +-static struct dentry *lookup_hash(struct nameidata *nd)
    2.15 ++struct dentry *lookup_hash(struct nameidata *nd)
    2.16 + {
    2.17 + 	return __lookup_hash(&nd->last, nd->path.dentry, nd);
    2.18 + }
    2.19 +diff --git a/fs/splice.c b/fs/splice.c
    2.20 +index fa2defa..e3569b0 100644
    2.21 +--- a/fs/splice.c
    2.22 ++++ b/fs/splice.c
    2.23 +@@ -1085,8 +1085,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
    2.24 + /*
    2.25 +  * Attempt to initiate a splice from pipe to file.
    2.26 +  */
    2.27 +-static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
    2.28 +-			   loff_t *ppos, size_t len, unsigned int flags)
    2.29 ++long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
    2.30 ++		    loff_t *ppos, size_t len, unsigned int flags)
    2.31 + {
    2.32 + 	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
    2.33 + 				loff_t *, size_t, unsigned int);
    2.34 +@@ -1113,9 +1113,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
    2.35 + /*
    2.36 +  * Attempt to initiate a splice from a file to a pipe.
    2.37 +  */
    2.38 +-static long do_splice_to(struct file *in, loff_t *ppos,
    2.39 +-			 struct pipe_inode_info *pipe, size_t len,
    2.40 +-			 unsigned int flags)
    2.41 ++long do_splice_to(struct file *in, loff_t *ppos,
    2.42 ++		  struct pipe_inode_info *pipe, size_t len,
    2.43 ++		  unsigned int flags)
    2.44 + {
    2.45 + 	ssize_t (*splice_read)(struct file *, loff_t *,
    2.46 + 			       struct pipe_inode_info *, size_t, unsigned int);
    2.47 +diff --git a/include/linux/namei.h b/include/linux/namei.h
    2.48 +index ffc0213..ef35a31 100644
    2.49 +--- a/include/linux/namei.h
    2.50 ++++ b/include/linux/namei.h
    2.51 +@@ -85,6 +85,7 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
    2.52 + extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
    2.53 + 		int (*open)(struct inode *, struct file *));
    2.54 + 
    2.55 ++extern struct dentry *lookup_hash(struct nameidata *nd);
    2.56 + extern struct dentry *lookup_one_len(const char *, struct dentry *, int);
    2.57 + 
    2.58 + extern int follow_down_one(struct path *);
    2.59 +diff --git a/include/linux/splice.h b/include/linux/splice.h
    2.60 +index 26e5b61..3ffef2f 100644
    2.61 +--- a/include/linux/splice.h
    2.62 ++++ b/include/linux/splice.h
    2.63 +@@ -91,4 +91,10 @@ extern void splice_shrink_spd(struct pipe_inode_info *,
    2.64 + extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
    2.65 + 
    2.66 + extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
    2.67 ++
    2.68 ++extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
    2.69 ++			   loff_t *ppos, size_t len, unsigned int flags);
    2.70 ++extern long do_splice_to(struct file *in, loff_t *ppos,
    2.71 ++			 struct pipe_inode_info *pipe, size_t len,
    2.72 ++			 unsigned int flags);
    2.73 + #endif
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/linux/stuff/aufs3-kbuild.patch	Wed Jan 01 19:09:17 2014 +0100
     3.3 @@ -0,0 +1,35 @@
     3.4 +aufs3.2 kbuild patch
     3.5 +
     3.6 +diff --git a/fs/Kconfig b/fs/Kconfig
     3.7 +index 5f4c45d..357a8a6 100644
     3.8 +--- a/fs/Kconfig
     3.9 ++++ b/fs/Kconfig
    3.10 +@@ -215,6 +215,7 @@ source "fs/pstore/Kconfig"
    3.11 + source "fs/sysv/Kconfig"
    3.12 + source "fs/ufs/Kconfig"
    3.13 + source "fs/exofs/Kconfig"
    3.14 ++source "fs/aufs/Kconfig"
    3.15 + 
    3.16 + endif # MISC_FILESYSTEMS
    3.17 + 
    3.18 +diff --git a/fs/Makefile b/fs/Makefile
    3.19 +index d2c3353..680ad8a 100644
    3.20 +--- a/fs/Makefile
    3.21 ++++ b/fs/Makefile
    3.22 +@@ -123,3 +123,4 @@ obj-$(CONFIG_GFS2_FS)           += gfs2/
    3.23 + obj-y				+= exofs/ # Multiple modules
    3.24 + obj-$(CONFIG_CEPH_FS)		+= ceph/
    3.25 + obj-$(CONFIG_PSTORE)		+= pstore/
    3.26 ++obj-$(CONFIG_AUFS_FS)           += aufs/
    3.27 +diff --git a/include/linux/Kbuild b/include/linux/Kbuild
    3.28 +index 619b565..29f386b 100644
    3.29 +--- a/include/linux/Kbuild
    3.30 ++++ b/include/linux/Kbuild
    3.31 +@@ -65,6 +65,7 @@ header-y += atmppp.h
    3.32 + header-y += atmsap.h
    3.33 + header-y += atmsvc.h
    3.34 + header-y += audit.h
    3.35 ++header-y += aufs_type.h
    3.36 + header-y += auto_fs.h
    3.37 + header-y += auto_fs4.h
    3.38 + header-y += auxvec.h
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/linux/stuff/aufs3-loopback.patch	Wed Jan 01 19:09:17 2014 +0100
     4.3 @@ -0,0 +1,287 @@
     4.4 +aufs3.2 loopback patch
     4.5 +
     4.6 +diff --git a/drivers/block/loop.c b/drivers/block/loop.c
     4.7 +index 1e888c9..17b3109 100644
     4.8 +--- a/drivers/block/loop.c
     4.9 ++++ b/drivers/block/loop.c
    4.10 +@@ -499,7 +499,7 @@ out:
    4.11 + }
    4.12 + 
    4.13 + struct switch_request {
    4.14 +-	struct file *file;
    4.15 ++	struct file *file, *virt_file;
    4.16 + 	struct completion wait;
    4.17 + };
    4.18 + 
    4.19 +@@ -559,7 +559,8 @@ static int loop_thread(void *data)
    4.20 +  * First it needs to flush existing IO, it does this by sending a magic
    4.21 +  * BIO down the pipe. The completion of this BIO does the actual switch.
    4.22 +  */
    4.23 +-static int loop_switch(struct loop_device *lo, struct file *file)
    4.24 ++static int loop_switch(struct loop_device *lo, struct file *file,
    4.25 ++		       struct file *virt_file)
    4.26 + {
    4.27 + 	struct switch_request w;
    4.28 + 	struct bio *bio = bio_alloc(GFP_KERNEL, 0);
    4.29 +@@ -567,6 +568,7 @@ static int loop_switch(struct loop_device *lo, struct file *file)
    4.30 + 		return -ENOMEM;
    4.31 + 	init_completion(&w.wait);
    4.32 + 	w.file = file;
    4.33 ++	w.virt_file = virt_file;
    4.34 + 	bio->bi_private = &w;
    4.35 + 	bio->bi_bdev = NULL;
    4.36 + 	loop_make_request(lo->lo_queue, bio);
    4.37 +@@ -583,7 +585,7 @@ static int loop_flush(struct loop_device *lo)
    4.38 + 	if (!lo->lo_thread)
    4.39 + 		return 0;
    4.40 + 
    4.41 +-	return loop_switch(lo, NULL);
    4.42 ++	return loop_switch(lo, NULL, NULL);
    4.43 + }
    4.44 + 
    4.45 + /*
    4.46 +@@ -602,6 +604,7 @@ static void do_loop_switch(struct loop_device *lo, struct switch_request *p)
    4.47 + 	mapping = file->f_mapping;
    4.48 + 	mapping_set_gfp_mask(old_file->f_mapping, lo->old_gfp_mask);
    4.49 + 	lo->lo_backing_file = file;
    4.50 ++	lo->lo_backing_virt_file = p->virt_file;
    4.51 + 	lo->lo_blocksize = S_ISBLK(mapping->host->i_mode) ?
    4.52 + 		mapping->host->i_bdev->bd_block_size : PAGE_SIZE;
    4.53 + 	lo->old_gfp_mask = mapping_gfp_mask(mapping);
    4.54 +@@ -610,6 +613,13 @@ out:
    4.55 + 	complete(&p->wait);
    4.56 + }
    4.57 + 
    4.58 ++static struct file *loop_real_file(struct file *file)
    4.59 ++{
    4.60 ++	struct file *f = NULL;
    4.61 ++	if (file->f_dentry->d_sb->s_op->real_loop)
    4.62 ++		f = file->f_dentry->d_sb->s_op->real_loop(file);
    4.63 ++	return f;
    4.64 ++}
    4.65 + 
    4.66 + /*
    4.67 +  * loop_change_fd switched the backing store of a loopback device to
    4.68 +@@ -623,6 +633,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
    4.69 + 			  unsigned int arg)
    4.70 + {
    4.71 + 	struct file	*file, *old_file;
    4.72 ++	struct file	*f, *virt_file = NULL, *old_virt_file;
    4.73 + 	struct inode	*inode;
    4.74 + 	int		error;
    4.75 + 
    4.76 +@@ -639,9 +650,16 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
    4.77 + 	file = fget(arg);
    4.78 + 	if (!file)
    4.79 + 		goto out;
    4.80 ++	f = loop_real_file(file);
    4.81 ++	if (f) {
    4.82 ++		virt_file = file;
    4.83 ++		file = f;
    4.84 ++		get_file(file);
    4.85 ++	}
    4.86 + 
    4.87 + 	inode = file->f_mapping->host;
    4.88 + 	old_file = lo->lo_backing_file;
    4.89 ++	old_virt_file = lo->lo_backing_virt_file;
    4.90 + 
    4.91 + 	error = -EINVAL;
    4.92 + 
    4.93 +@@ -653,17 +671,21 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
    4.94 + 		goto out_putf;
    4.95 + 
    4.96 + 	/* and ... switch */
    4.97 +-	error = loop_switch(lo, file);
    4.98 ++	error = loop_switch(lo, file, virt_file);
    4.99 + 	if (error)
   4.100 + 		goto out_putf;
   4.101 + 
   4.102 + 	fput(old_file);
   4.103 ++	if (old_virt_file)
   4.104 ++		fput(old_virt_file);
   4.105 + 	if (lo->lo_flags & LO_FLAGS_PARTSCAN)
   4.106 + 		ioctl_by_bdev(bdev, BLKRRPART, 0);
   4.107 + 	return 0;
   4.108 + 
   4.109 +  out_putf:
   4.110 + 	fput(file);
   4.111 ++	if (virt_file)
   4.112 ++		fput(virt_file);
   4.113 +  out:
   4.114 + 	return error;
   4.115 + }
   4.116 +@@ -806,7 +828,7 @@ static void loop_config_discard(struct loop_device *lo)
   4.117 + static int loop_set_fd(struct loop_device *lo, fmode_t mode,
   4.118 + 		       struct block_device *bdev, unsigned int arg)
   4.119 + {
   4.120 +-	struct file	*file, *f;
   4.121 ++	struct file	*file, *f, *virt_file = NULL;
   4.122 + 	struct inode	*inode;
   4.123 + 	struct address_space *mapping;
   4.124 + 	unsigned lo_blocksize;
   4.125 +@@ -821,6 +843,12 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
   4.126 + 	file = fget(arg);
   4.127 + 	if (!file)
   4.128 + 		goto out;
   4.129 ++	f = loop_real_file(file);
   4.130 ++	if (f) {
   4.131 ++		virt_file = file;
   4.132 ++		file = f;
   4.133 ++		get_file(file);
   4.134 ++	}
   4.135 + 
   4.136 + 	error = -EBUSY;
   4.137 + 	if (lo->lo_state != Lo_unbound)
   4.138 +@@ -869,6 +897,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
   4.139 + 	lo->lo_device = bdev;
   4.140 + 	lo->lo_flags = lo_flags;
   4.141 + 	lo->lo_backing_file = file;
   4.142 ++	lo->lo_backing_virt_file = virt_file;
   4.143 + 	lo->transfer = transfer_none;
   4.144 + 	lo->ioctl = NULL;
   4.145 + 	lo->lo_sizelimit = 0;
   4.146 +@@ -914,6 +943,7 @@ out_clr:
   4.147 + 	lo->lo_thread = NULL;
   4.148 + 	lo->lo_device = NULL;
   4.149 + 	lo->lo_backing_file = NULL;
   4.150 ++	lo->lo_backing_virt_file = NULL;
   4.151 + 	lo->lo_flags = 0;
   4.152 + 	set_capacity(lo->lo_disk, 0);
   4.153 + 	invalidate_bdev(bdev);
   4.154 +@@ -923,6 +953,8 @@ out_clr:
   4.155 + 	lo->lo_state = Lo_unbound;
   4.156 +  out_putf:
   4.157 + 	fput(file);
   4.158 ++	if (virt_file)
   4.159 ++		fput(virt_file);
   4.160 +  out:
   4.161 + 	/* This is safe: open() is still holding a reference. */
   4.162 + 	module_put(THIS_MODULE);
   4.163 +@@ -969,6 +1001,7 @@ loop_init_xfer(struct loop_device *lo, struct loop_func_table *xfer,
   4.164 + static int loop_clr_fd(struct loop_device *lo)
   4.165 + {
   4.166 + 	struct file *filp = lo->lo_backing_file;
   4.167 ++	struct file *virt_filp = lo->lo_backing_virt_file;
   4.168 + 	gfp_t gfp = lo->old_gfp_mask;
   4.169 + 	struct block_device *bdev = lo->lo_device;
   4.170 + 
   4.171 +@@ -989,6 +1022,7 @@ static int loop_clr_fd(struct loop_device *lo)
   4.172 + 
   4.173 + 	spin_lock_irq(&lo->lo_lock);
   4.174 + 	lo->lo_backing_file = NULL;
   4.175 ++	lo->lo_backing_virt_file = NULL;
   4.176 + 	spin_unlock_irq(&lo->lo_lock);
   4.177 + 
   4.178 + 	loop_release_xfer(lo);
   4.179 +@@ -1029,6 +1063,8 @@ static int loop_clr_fd(struct loop_device *lo)
   4.180 + 	 * bd_mutex which is usually taken before lo_ctl_mutex.
   4.181 + 	 */
   4.182 + 	fput(filp);
   4.183 ++	if (virt_filp)
   4.184 ++		fput(virt_filp);
   4.185 + 	return 0;
   4.186 + }
   4.187 + 
   4.188 +diff --git a/fs/aufs/f_op.c b/fs/aufs/f_op.c
   4.189 +index d6318f08b..56555de 100644
   4.190 +--- a/fs/aufs/f_op.c
   4.191 ++++ b/fs/aufs/f_op.c
   4.192 +@@ -355,7 +355,7 @@ static ssize_t aufs_splice_read(struct file *file, loff_t *ppos,
   4.193 + 	err = -EINVAL;
   4.194 + 	h_file = au_hf_top(file);
   4.195 + 	get_file(h_file);
   4.196 +-	if (au_test_loopback_kthread()) {
   4.197 ++	if (0 && au_test_loopback_kthread()) {
   4.198 + 		au_warn_loopback(h_file->f_dentry->d_sb);
   4.199 + 		if (file->f_mapping != h_file->f_mapping) {
   4.200 + 			file->f_mapping = h_file->f_mapping;
   4.201 +diff --git a/fs/aufs/loop.c b/fs/aufs/loop.c
   4.202 +index ccae19c..15dc5c2 100644
   4.203 +--- a/fs/aufs/loop.c
   4.204 ++++ b/fs/aufs/loop.c
   4.205 +@@ -133,3 +133,19 @@ void au_loopback_fin(void)
   4.206 + {
   4.207 + 	kfree(au_warn_loopback_array);
   4.208 + }
   4.209 ++
   4.210 ++/* ---------------------------------------------------------------------- */
   4.211 ++
   4.212 ++/* support the loopback block device insude aufs */
   4.213 ++
   4.214 ++struct file *aufs_real_loop(struct file *file)
   4.215 ++{
   4.216 ++	struct file *f;
   4.217 ++
   4.218 ++	BUG_ON(!au_test_aufs(file->f_dentry->d_sb));
   4.219 ++	fi_read_lock(file);
   4.220 ++	f = au_hf_top(file);
   4.221 ++	fi_read_unlock(file);
   4.222 ++	AuDebugOn(!f);
   4.223 ++	return f;
   4.224 ++}
   4.225 +diff --git a/fs/aufs/loop.h b/fs/aufs/loop.h
   4.226 +index 88d019c..8707c3a 100644
   4.227 +--- a/fs/aufs/loop.h
   4.228 ++++ b/fs/aufs/loop.h
   4.229 +@@ -36,6 +36,8 @@ void au_warn_loopback(struct super_block *h_sb);
   4.230 + 
   4.231 + int au_loopback_init(void);
   4.232 + void au_loopback_fin(void);
   4.233 ++
   4.234 ++struct file *aufs_real_loop(struct file *file);
   4.235 + #else
   4.236 + AuStubInt0(au_test_loopback_overlap, struct super_block *sb,
   4.237 + 	   struct dentry *h_adding)
   4.238 +@@ -44,6 +46,8 @@ AuStubVoid(au_warn_loopback, struct super_block *h_sb)
   4.239 + 
   4.240 + AuStubInt0(au_loopback_init, void)
   4.241 + AuStubVoid(au_loopback_fin, void)
   4.242 ++
   4.243 ++AuStub(struct file *, aufs_real_loop, return NULL, struct file *file)
   4.244 + #endif /* BLK_DEV_LOOP */
   4.245 + 
   4.246 + #endif /* __KERNEL__ */
   4.247 +diff --git a/fs/aufs/super.c b/fs/aufs/super.c
   4.248 +index d105672..304f2e5 100644
   4.249 +--- a/fs/aufs/super.c
   4.250 ++++ b/fs/aufs/super.c
   4.251 +@@ -823,7 +823,10 @@ static const struct super_operations aufs_sop = {
   4.252 + 	.statfs		= aufs_statfs,
   4.253 + 	.put_super	= aufs_put_super,
   4.254 + 	.sync_fs	= aufs_sync_fs,
   4.255 +-	.remount_fs	= aufs_remount_fs
   4.256 ++	.remount_fs	= aufs_remount_fs,
   4.257 ++#ifdef CONFIG_AUFS_BDEV_LOOP
   4.258 ++	.real_loop	= aufs_real_loop
   4.259 ++#endif
   4.260 + };
   4.261 + 
   4.262 + /* ---------------------------------------------------------------------- */
   4.263 +diff --git a/include/linux/fs.h b/include/linux/fs.h
   4.264 +index e0bc4ff..bd7b3a4 100644
   4.265 +--- a/include/linux/fs.h
   4.266 ++++ b/include/linux/fs.h
   4.267 +@@ -1683,6 +1683,10 @@ struct super_operations {
   4.268 + 	int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
   4.269 + 	int (*nr_cached_objects)(struct super_block *);
   4.270 + 	void (*free_cached_objects)(struct super_block *, int);
   4.271 ++#if defined(CONFIG_BLK_DEV_LOOP) ||  defined(CONFIG_BLK_DEV_LOOP_MODULE)
   4.272 ++	/* and aufs */
   4.273 ++	struct file *(*real_loop)(struct file *);
   4.274 ++#endif
   4.275 + };
   4.276 + 
   4.277 + /*
   4.278 +diff --git a/include/linux/loop.h b/include/linux/loop.h
   4.279 +index 11a41a8..c190b78 100644
   4.280 +--- a/include/linux/loop.h
   4.281 ++++ b/include/linux/loop.h
   4.282 +@@ -48,7 +48,7 @@ struct loop_device {
   4.283 + 	int		(*ioctl)(struct loop_device *, int cmd, 
   4.284 + 				 unsigned long arg); 
   4.285 + 
   4.286 +-	struct file *	lo_backing_file;
   4.287 ++	struct file *	lo_backing_file, *lo_backing_virt_file;
   4.288 + 	struct block_device *lo_device;
   4.289 + 	unsigned	lo_blocksize;
   4.290 + 	void		*key_data; 
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/linux/stuff/aufs3-mmap.patch	Wed Jan 01 19:09:17 2014 +0100
     5.3 @@ -0,0 +1,349 @@
     5.4 +aufs3.2 mmap patch
     5.5 +
     5.6 +diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c
     5.7 +index b1822dd..d8518aa 100644
     5.8 +--- a/fs/proc/nommu.c
     5.9 ++++ b/fs/proc/nommu.c
    5.10 +@@ -45,7 +45,9 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region)
    5.11 + 	file = region->vm_file;
    5.12 + 
    5.13 + 	if (file) {
    5.14 +-		struct inode *inode = region->vm_file->f_path.dentry->d_inode;
    5.15 ++		struct inode *inode;
    5.16 ++		file = vmr_pr_or_file(region);
    5.17 ++		inode = file->f_path.dentry->d_inode;
    5.18 + 		dev = inode->i_sb->s_dev;
    5.19 + 		ino = inode->i_ino;
    5.20 + 	}
    5.21 +diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
    5.22 +index e418c5a..06bbf80 100644
    5.23 +--- a/fs/proc/task_mmu.c
    5.24 ++++ b/fs/proc/task_mmu.c
    5.25 +@@ -221,7 +221,9 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
    5.26 + 	int len;
    5.27 + 
    5.28 + 	if (file) {
    5.29 +-		struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
    5.30 ++		struct inode *inode;
    5.31 ++		file = vma_pr_or_file(vma);
    5.32 ++		inode = file->f_path.dentry->d_inode;
    5.33 + 		dev = inode->i_sb->s_dev;
    5.34 + 		ino = inode->i_ino;
    5.35 + 		pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
    5.36 +@@ -1032,6 +1034,7 @@ static int show_numa_map(struct seq_file *m, void *v)
    5.37 + 	seq_printf(m, "%08lx %s", vma->vm_start, buffer);
    5.38 + 
    5.39 + 	if (file) {
    5.40 ++		file = vma_pr_or_file(vma);
    5.41 + 		seq_printf(m, " file=");
    5.42 + 		seq_path(m, &file->f_path, "\n\t= ");
    5.43 + 	} else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) {
    5.44 +diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
    5.45 +index 980de54..b59aa1e 100644
    5.46 +--- a/fs/proc/task_nommu.c
    5.47 ++++ b/fs/proc/task_nommu.c
    5.48 +@@ -147,7 +147,9 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
    5.49 + 	file = vma->vm_file;
    5.50 + 
    5.51 + 	if (file) {
    5.52 +-		struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
    5.53 ++		struct inode *inode;
    5.54 ++		file = vma_pr_or_file(file);
    5.55 ++		inode = file->f_path.dentry->d_inode;
    5.56 + 		dev = inode->i_sb->s_dev;
    5.57 + 		ino = inode->i_ino;
    5.58 + 		pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
    5.59 +diff --git a/include/linux/mm.h b/include/linux/mm.h
    5.60 +index 4baadd1..b1ee63e 100644
    5.61 +--- a/include/linux/mm.h
    5.62 ++++ b/include/linux/mm.h
    5.63 +@@ -17,6 +17,9 @@
    5.64 + #include <linux/pfn.h>
    5.65 + #include <linux/bit_spinlock.h>
    5.66 + #include <linux/shrinker.h>
    5.67 ++#include <linux/dcache.h>
    5.68 ++#include <linux/file.h>
    5.69 ++#include <linux/fs.h>
    5.70 + 
    5.71 + struct mempolicy;
    5.72 + struct anon_vma;
    5.73 +@@ -983,6 +986,87 @@ static inline int fixup_user_fault(struct task_struct *tsk,
    5.74 + }
    5.75 + #endif
    5.76 + 
    5.77 ++/*
    5.78 ++ * Mainly for aufs which mmap(2) diffrent file and wants to print different path
    5.79 ++ * in /proc/PID/maps.
    5.80 ++ */
    5.81 ++/* #define AUFS_DEBUG_MMAP */
    5.82 ++static inline void aufs_trace(struct file *f, struct file *pr,
    5.83 ++			      const char func[], int line, const char func2[])
    5.84 ++{
    5.85 ++#ifdef AUFS_DEBUG_MMAP
    5.86 ++	if (pr)
    5.87 ++		pr_info("%s:%d: %s, %p\n", func, line, func2,
    5.88 ++			f ? (char *)f->f_dentry->d_name.name : "(null)");
    5.89 ++#endif
    5.90 ++}
    5.91 ++
    5.92 ++static inline struct file *vmr_do_pr_or_file(struct vm_region *region,
    5.93 ++					     const char func[], int line)
    5.94 ++{
    5.95 ++	struct file *f = region->vm_file, *pr = region->vm_prfile;
    5.96 ++	aufs_trace(f, pr, func, line, __func__);
    5.97 ++	return (f && pr) ? pr : f;
    5.98 ++}
    5.99 ++
   5.100 ++static inline void vmr_do_fput(struct vm_region *region,
   5.101 ++			       const char func[], int line)
   5.102 ++{
   5.103 ++	struct file *f = region->vm_file, *pr = region->vm_prfile;
   5.104 ++	aufs_trace(f, pr, func, line, __func__);
   5.105 ++	fput(f);
   5.106 ++	if (f && pr)
   5.107 ++		fput(pr);
   5.108 ++}
   5.109 ++
   5.110 ++static inline void vma_do_file_update_time(struct vm_area_struct *vma,
   5.111 ++					   const char func[], int line)
   5.112 ++{
   5.113 ++	struct file *f = vma->vm_file, *pr = vma->vm_prfile;
   5.114 ++	aufs_trace(f, pr, func, line, __func__);
   5.115 ++	file_update_time(f);
   5.116 ++	if (f && pr)
   5.117 ++		file_update_time(pr);
   5.118 ++}
   5.119 ++
   5.120 ++static inline struct file *vma_do_pr_or_file(struct vm_area_struct *vma,
   5.121 ++					     const char func[], int line)
   5.122 ++{
   5.123 ++	struct file *f = vma->vm_file, *pr = vma->vm_prfile;
   5.124 ++	aufs_trace(f, pr, func, line, __func__);
   5.125 ++	return (f && pr) ? pr : f;
   5.126 ++}
   5.127 ++
   5.128 ++static inline void vma_do_get_file(struct vm_area_struct *vma,
   5.129 ++				   const char func[], int line)
   5.130 ++{
   5.131 ++	struct file *f = vma->vm_file, *pr = vma->vm_prfile;
   5.132 ++	aufs_trace(f, pr, func, line, __func__);
   5.133 ++	get_file(f);
   5.134 ++	if (f && pr)
   5.135 ++		get_file(pr);
   5.136 ++}
   5.137 ++
   5.138 ++static inline void vma_do_fput(struct vm_area_struct *vma,
   5.139 ++			       const char func[], int line)
   5.140 ++{
   5.141 ++	struct file *f = vma->vm_file, *pr = vma->vm_prfile;
   5.142 ++	aufs_trace(f, pr, func, line, __func__);
   5.143 ++	fput(f);
   5.144 ++	if (f && pr)
   5.145 ++		fput(pr);
   5.146 ++}
   5.147 ++
   5.148 ++#define vmr_pr_or_file(region)		vmr_do_pr_or_file(region, __func__, \
   5.149 ++							  __LINE__)
   5.150 ++#define vmr_fput(region)		vmr_do_fput(region, __func__, __LINE__)
   5.151 ++#define vma_file_update_time(vma)	vma_do_file_update_time(vma, __func__, \
   5.152 ++								__LINE__)
   5.153 ++#define vma_pr_or_file(vma)		vma_do_pr_or_file(vma, __func__, \
   5.154 ++							  __LINE__)
   5.155 ++#define vma_get_file(vma)		vma_do_get_file(vma, __func__, __LINE__)
   5.156 ++#define vma_fput(vma)			vma_do_fput(vma, __func__, __LINE__)
   5.157 ++
   5.158 + extern int make_pages_present(unsigned long addr, unsigned long end);
   5.159 + extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
   5.160 + extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
   5.161 +diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
   5.162 +index 5b42f1b..a49a07e 100644
   5.163 +--- a/include/linux/mm_types.h
   5.164 ++++ b/include/linux/mm_types.h
   5.165 +@@ -186,6 +186,7 @@ struct vm_region {
   5.166 + 	unsigned long	vm_top;		/* region allocated to here */
   5.167 + 	unsigned long	vm_pgoff;	/* the offset in vm_file corresponding to vm_start */
   5.168 + 	struct file	*vm_file;	/* the backing file or NULL */
   5.169 ++	struct file	*vm_prfile;	/* the virtual backing file or NULL */
   5.170 + 
   5.171 + 	int		vm_usage;	/* region usage count (access under nommu_region_sem) */
   5.172 + 	bool		vm_icache_flushed : 1; /* true if the icache has been flushed for
   5.173 +@@ -245,6 +246,7 @@ struct vm_area_struct {
   5.174 + 	unsigned long vm_pgoff;		/* Offset (within vm_file) in PAGE_SIZE
   5.175 + 					   units, *not* PAGE_CACHE_SIZE */
   5.176 + 	struct file * vm_file;		/* File we map to (can be NULL). */
   5.177 ++	struct file *vm_prfile;		/* shadow of vm_file */
   5.178 + 	void * vm_private_data;		/* was vm_pte (shared mem) */
   5.179 + 
   5.180 + #ifndef CONFIG_MMU
   5.181 +diff --git a/kernel/fork.c b/kernel/fork.c
   5.182 +index da4a6a1..4a31675 100644
   5.183 +--- a/kernel/fork.c
   5.184 ++++ b/kernel/fork.c
   5.185 +@@ -375,7 +375,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
   5.186 + 			struct inode *inode = file->f_path.dentry->d_inode;
   5.187 + 			struct address_space *mapping = file->f_mapping;
   5.188 + 
   5.189 +-			get_file(file);
   5.190 ++			vma_get_file(tmp);
   5.191 + 			if (tmp->vm_flags & VM_DENYWRITE)
   5.192 + 				atomic_dec(&inode->i_writecount);
   5.193 + 			mutex_lock(&mapping->i_mmap_mutex);
   5.194 +diff --git a/mm/fremap.c b/mm/fremap.c
   5.195 +index 9ed4fd4..00ee66b 100644
   5.196 +--- a/mm/fremap.c
   5.197 ++++ b/mm/fremap.c
   5.198 +@@ -198,10 +198,10 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
   5.199 + 			struct file *file = vma->vm_file;
   5.200 + 
   5.201 + 			flags &= MAP_NONBLOCK;
   5.202 +-			get_file(file);
   5.203 ++			vma_get_file(vma);
   5.204 + 			addr = mmap_region(file, start, size,
   5.205 + 					flags, vma->vm_flags, pgoff);
   5.206 +-			fput(file);
   5.207 ++			vma_fput(vma);
   5.208 + 			if (IS_ERR_VALUE(addr)) {
   5.209 + 				err = addr;
   5.210 + 			} else {
   5.211 +diff --git a/mm/memory.c b/mm/memory.c
   5.212 +index 829d437..6c6f9f1 100644
   5.213 +--- a/mm/memory.c
   5.214 ++++ b/mm/memory.c
   5.215 +@@ -2621,7 +2621,7 @@ reuse:
   5.216 + 
   5.217 + 		/* file_update_time outside page_lock */
   5.218 + 		if (vma->vm_file)
   5.219 +-			file_update_time(vma->vm_file);
   5.220 ++			vma_file_update_time(vma);
   5.221 + 
   5.222 + 		return ret;
   5.223 + 	}
   5.224 +@@ -3306,7 +3306,7 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,
   5.225 + 
   5.226 + 		/* file_update_time outside page_lock */
   5.227 + 		if (vma->vm_file)
   5.228 +-			file_update_time(vma->vm_file);
   5.229 ++			vma_file_update_time(vma);
   5.230 + 	} else {
   5.231 + 		unlock_page(vmf.page);
   5.232 + 		if (anon)
   5.233 +diff --git a/mm/mmap.c b/mm/mmap.c
   5.234 +index eae90af..570ac61 100644
   5.235 +--- a/mm/mmap.c
   5.236 ++++ b/mm/mmap.c
   5.237 +@@ -231,7 +231,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
   5.238 + 	if (vma->vm_ops && vma->vm_ops->close)
   5.239 + 		vma->vm_ops->close(vma);
   5.240 + 	if (vma->vm_file) {
   5.241 +-		fput(vma->vm_file);
   5.242 ++		vma_fput(vma);
   5.243 + 		if (vma->vm_flags & VM_EXECUTABLE)
   5.244 + 			removed_exe_file_vma(vma->vm_mm);
   5.245 + 	}
   5.246 +@@ -618,7 +618,7 @@ again:			remove_next = 1 + (end > next->vm_end);
   5.247 + 
   5.248 + 	if (remove_next) {
   5.249 + 		if (file) {
   5.250 +-			fput(file);
   5.251 ++			vma_fput(vma);
   5.252 + 			if (next->vm_flags & VM_EXECUTABLE)
   5.253 + 				removed_exe_file_vma(mm);
   5.254 + 		}
   5.255 +@@ -1334,8 +1334,8 @@ out:
   5.256 + unmap_and_free_vma:
   5.257 + 	if (correct_wcount)
   5.258 + 		atomic_inc(&inode->i_writecount);
   5.259 ++	vma_fput(vma);
   5.260 + 	vma->vm_file = NULL;
   5.261 +-	fput(file);
   5.262 + 
   5.263 + 	/* Undo any partial mapping done by a device driver. */
   5.264 + 	unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end);
   5.265 +@@ -1964,7 +1964,7 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
   5.266 + 		goto out_free_mpol;
   5.267 + 
   5.268 + 	if (new->vm_file) {
   5.269 +-		get_file(new->vm_file);
   5.270 ++		vma_get_file(new);
   5.271 + 		if (vma->vm_flags & VM_EXECUTABLE)
   5.272 + 			added_exe_file_vma(mm);
   5.273 + 	}
   5.274 +@@ -1988,7 +1988,7 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
   5.275 + 	if (new->vm_file) {
   5.276 + 		if (vma->vm_flags & VM_EXECUTABLE)
   5.277 + 			removed_exe_file_vma(mm);
   5.278 +-		fput(new->vm_file);
   5.279 ++		vma_fput(new);
   5.280 + 	}
   5.281 + 	unlink_anon_vmas(new);
   5.282 +  out_free_mpol:
   5.283 +@@ -2355,7 +2355,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
   5.284 + 			new_vma->vm_end = addr + len;
   5.285 + 			new_vma->vm_pgoff = pgoff;
   5.286 + 			if (new_vma->vm_file) {
   5.287 +-				get_file(new_vma->vm_file);
   5.288 ++				vma_get_file(new_vma);
   5.289 + 				if (vma->vm_flags & VM_EXECUTABLE)
   5.290 + 					added_exe_file_vma(mm);
   5.291 + 			}
   5.292 +diff --git a/mm/msync.c b/mm/msync.c
   5.293 +index 632df45..02d770e 100644
   5.294 +--- a/mm/msync.c
   5.295 ++++ b/mm/msync.c
   5.296 +@@ -80,10 +80,10 @@ SYSCALL_DEFINE3(msync, unsigned long, start, size_t, len, int, flags)
   5.297 + 		start = vma->vm_end;
   5.298 + 		if ((flags & MS_SYNC) && file &&
   5.299 + 				(vma->vm_flags & VM_SHARED)) {
   5.300 +-			get_file(file);
   5.301 ++			vma_get_file(vma);
   5.302 + 			up_read(&mm->mmap_sem);
   5.303 + 			error = vfs_fsync(file, 0);
   5.304 +-			fput(file);
   5.305 ++			vma_fput(vma);
   5.306 + 			if (error || start >= end)
   5.307 + 				goto out;
   5.308 + 			down_read(&mm->mmap_sem);
   5.309 +diff --git a/mm/nommu.c b/mm/nommu.c
   5.310 +index b982290..6eb4f31 100644
   5.311 +--- a/mm/nommu.c
   5.312 ++++ b/mm/nommu.c
   5.313 +@@ -632,7 +632,7 @@ static void __put_nommu_region(struct vm_region *region)
   5.314 + 		up_write(&nommu_region_sem);
   5.315 + 
   5.316 + 		if (region->vm_file)
   5.317 +-			fput(region->vm_file);
   5.318 ++			vmr_fput(region);
   5.319 + 
   5.320 + 		/* IO memory and memory shared directly out of the pagecache
   5.321 + 		 * from ramfs/tmpfs mustn't be released here */
   5.322 +@@ -788,7 +788,7 @@ static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma)
   5.323 + 	if (vma->vm_ops && vma->vm_ops->close)
   5.324 + 		vma->vm_ops->close(vma);
   5.325 + 	if (vma->vm_file) {
   5.326 +-		fput(vma->vm_file);
   5.327 ++		vma_fput(vma);
   5.328 + 		if (vma->vm_flags & VM_EXECUTABLE)
   5.329 + 			removed_exe_file_vma(mm);
   5.330 + 	}
   5.331 +@@ -1361,7 +1361,7 @@ unsigned long do_mmap_pgoff(struct file *file,
   5.332 + 					goto error_just_free;
   5.333 + 				}
   5.334 + 			}
   5.335 +-			fput(region->vm_file);
   5.336 ++			vmr_fput(region);
   5.337 + 			kmem_cache_free(vm_region_jar, region);
   5.338 + 			region = pregion;
   5.339 + 			result = start;
   5.340 +@@ -1437,10 +1437,10 @@ error_just_free:
   5.341 + 	up_write(&nommu_region_sem);
   5.342 + error:
   5.343 + 	if (region->vm_file)
   5.344 +-		fput(region->vm_file);
   5.345 ++		vmr_fput(region);
   5.346 + 	kmem_cache_free(vm_region_jar, region);
   5.347 + 	if (vma->vm_file)
   5.348 +-		fput(vma->vm_file);
   5.349 ++		vma_fput(vma);
   5.350 + 	if (vma->vm_flags & VM_EXECUTABLE)
   5.351 + 		removed_exe_file_vma(vma->vm_mm);
   5.352 + 	kmem_cache_free(vm_area_cachep, vma);
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/linux/stuff/aufs3-standalone.patch	Wed Jan 01 19:09:17 2014 +0100
     6.3 @@ -0,0 +1,257 @@
     6.4 +aufs3.2 standalone patch
     6.5 +
     6.6 +diff --git a/fs/file_table.c b/fs/file_table.c
     6.7 +index c322794..2aad244 100644
     6.8 +--- a/fs/file_table.c
     6.9 ++++ b/fs/file_table.c
    6.10 +@@ -443,6 +443,8 @@ void file_sb_list_del(struct file *file)
    6.11 + 	}
    6.12 + }
    6.13 + 
    6.14 ++EXPORT_SYMBOL(file_sb_list_del);
    6.15 ++
    6.16 + #ifdef CONFIG_SMP
    6.17 + 
    6.18 + /*
    6.19 +diff --git a/fs/inode.c b/fs/inode.c
    6.20 +index ee4e66b..728042b 100644
    6.21 +--- a/fs/inode.c
    6.22 ++++ b/fs/inode.c
    6.23 +@@ -65,6 +65,7 @@ static struct hlist_head *inode_hashtable __read_mostly;
    6.24 + static __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_hash_lock);
    6.25 + 
    6.26 + __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_sb_list_lock);
    6.27 ++EXPORT_SYMBOL(inode_sb_list_lock);
    6.28 + 
    6.29 + /*
    6.30 +  * Empty aops. Can be used for the cases where the user does not
    6.31 +diff --git a/fs/namei.c b/fs/namei.c
    6.32 +index 4cc94cf..af19e30 100644
    6.33 +--- a/fs/namei.c
    6.34 ++++ b/fs/namei.c
    6.35 +@@ -1757,6 +1757,7 @@ struct dentry *lookup_hash(struct nameidata *nd)
    6.36 + {
    6.37 + 	return __lookup_hash(&nd->last, nd->path.dentry, nd);
    6.38 + }
    6.39 ++EXPORT_SYMBOL(lookup_hash);
    6.40 + 
    6.41 + /**
    6.42 +  * lookup_one_len - filesystem helper to lookup single pathname component
    6.43 +diff --git a/fs/namespace.c b/fs/namespace.c
    6.44 +index cfc6d44..173d15a 100644
    6.45 +--- a/fs/namespace.c
    6.46 ++++ b/fs/namespace.c
    6.47 +@@ -1506,6 +1506,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
    6.48 + 	}
    6.49 + 	return 0;
    6.50 + }
    6.51 ++EXPORT_SYMBOL(iterate_mounts);
    6.52 + 
    6.53 + static void cleanup_group_ids(struct vfsmount *mnt, struct vfsmount *end)
    6.54 + {
    6.55 +diff --git a/fs/notify/group.c b/fs/notify/group.c
    6.56 +index 63fc294..6f4adca 100644
    6.57 +--- a/fs/notify/group.c
    6.58 ++++ b/fs/notify/group.c
    6.59 +@@ -22,6 +22,7 @@
    6.60 + #include <linux/srcu.h>
    6.61 + #include <linux/rculist.h>
    6.62 + #include <linux/wait.h>
    6.63 ++#include <linux/module.h>
    6.64 + 
    6.65 + #include <linux/fsnotify_backend.h>
    6.66 + #include "fsnotify.h"
    6.67 +@@ -70,6 +71,7 @@ void fsnotify_put_group(struct fsnotify_group *group)
    6.68 + 	if (atomic_dec_and_test(&group->refcnt))
    6.69 + 		fsnotify_destroy_group(group);
    6.70 + }
    6.71 ++EXPORT_SYMBOL(fsnotify_put_group);
    6.72 + 
    6.73 + /*
    6.74 +  * Create a new fsnotify_group and hold a reference for the group returned.
    6.75 +@@ -102,3 +104,4 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops)
    6.76 + 
    6.77 + 	return group;
    6.78 + }
    6.79 ++EXPORT_SYMBOL(fsnotify_alloc_group);
    6.80 +diff --git a/fs/notify/mark.c b/fs/notify/mark.c
    6.81 +index e14587d..be6533b 100644
    6.82 +--- a/fs/notify/mark.c
    6.83 ++++ b/fs/notify/mark.c
    6.84 +@@ -112,6 +112,7 @@ void fsnotify_put_mark(struct fsnotify_mark *mark)
    6.85 + 	if (atomic_dec_and_test(&mark->refcnt))
    6.86 + 		mark->free_mark(mark);
    6.87 + }
    6.88 ++EXPORT_SYMBOL(fsnotify_put_mark);
    6.89 + 
    6.90 + /*
    6.91 +  * Any time a mark is getting freed we end up here.
    6.92 +@@ -189,6 +190,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark)
    6.93 + 	if (unlikely(atomic_dec_and_test(&group->num_marks)))
    6.94 + 		fsnotify_final_destroy_group(group);
    6.95 + }
    6.96 ++EXPORT_SYMBOL(fsnotify_destroy_mark);
    6.97 + 
    6.98 + void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask)
    6.99 + {
   6.100 +@@ -276,6 +278,7 @@ err:
   6.101 + 
   6.102 + 	return ret;
   6.103 + }
   6.104 ++EXPORT_SYMBOL(fsnotify_add_mark);
   6.105 + 
   6.106 + /*
   6.107 +  * clear any marks in a group in which mark->flags & flags is true
   6.108 +@@ -331,6 +334,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark,
   6.109 + 	atomic_set(&mark->refcnt, 1);
   6.110 + 	mark->free_mark = free_mark;
   6.111 + }
   6.112 ++EXPORT_SYMBOL(fsnotify_init_mark);
   6.113 + 
   6.114 + static int fsnotify_mark_destroy(void *ignored)
   6.115 + {
   6.116 +diff --git a/fs/open.c b/fs/open.c
   6.117 +index 22c41b5..33b4033 100644
   6.118 +--- a/fs/open.c
   6.119 ++++ b/fs/open.c
   6.120 +@@ -60,6 +60,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
   6.121 + 	mutex_unlock(&dentry->d_inode->i_mutex);
   6.122 + 	return ret;
   6.123 + }
   6.124 ++EXPORT_SYMBOL(do_truncate);
   6.125 + 
   6.126 + static long do_sys_truncate(const char __user *pathname, loff_t length)
   6.127 + {
   6.128 +diff --git a/fs/splice.c b/fs/splice.c
   6.129 +index e3569b0..9dc07b7 100644
   6.130 +--- a/fs/splice.c
   6.131 ++++ b/fs/splice.c
   6.132 +@@ -1109,6 +1109,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
   6.133 + 
   6.134 + 	return splice_write(pipe, out, ppos, len, flags);
   6.135 + }
   6.136 ++EXPORT_SYMBOL(do_splice_from);
   6.137 + 
   6.138 + /*
   6.139 +  * Attempt to initiate a splice from a file to a pipe.
   6.140 +@@ -1135,6 +1136,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
   6.141 + 
   6.142 + 	return splice_read(in, ppos, pipe, len, flags);
   6.143 + }
   6.144 ++EXPORT_SYMBOL(do_splice_to);
   6.145 + 
   6.146 + /**
   6.147 +  * splice_direct_to_actor - splices data directly between two non-pipes
   6.148 +diff --git a/security/commoncap.c b/security/commoncap.c
   6.149 +index ee4f848..611fd70 100644
   6.150 +--- a/security/commoncap.c
   6.151 ++++ b/security/commoncap.c
   6.152 +@@ -975,3 +975,4 @@ int cap_file_mmap(struct file *file, unsigned long reqprot,
   6.153 + 	}
   6.154 + 	return ret;
   6.155 + }
   6.156 ++EXPORT_SYMBOL(cap_file_mmap);
   6.157 +diff --git a/security/device_cgroup.c b/security/device_cgroup.c
   6.158 +index 4450fbe..bc94175 100644
   6.159 +--- a/security/device_cgroup.c
   6.160 ++++ b/security/device_cgroup.c
   6.161 +@@ -7,6 +7,7 @@
   6.162 + #include <linux/device_cgroup.h>
   6.163 + #include <linux/cgroup.h>
   6.164 + #include <linux/ctype.h>
   6.165 ++#include <linux/export.h>
   6.166 + #include <linux/list.h>
   6.167 + #include <linux/uaccess.h>
   6.168 + #include <linux/seq_file.h>
   6.169 +@@ -500,6 +501,7 @@ found:
   6.170 + 
   6.171 + 	return -EPERM;
   6.172 + }
   6.173 ++EXPORT_SYMBOL(__devcgroup_inode_permission);
   6.174 + 
   6.175 + int devcgroup_inode_mknod(int mode, dev_t dev)
   6.176 + {
   6.177 +diff --git a/security/security.c b/security/security.c
   6.178 +index e2f684a..892000c 100644
   6.179 +--- a/security/security.c
   6.180 ++++ b/security/security.c
   6.181 +@@ -411,6 +411,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
   6.182 + 		return 0;
   6.183 + 	return security_ops->path_rmdir(dir, dentry);
   6.184 + }
   6.185 ++EXPORT_SYMBOL(security_path_rmdir);
   6.186 + 
   6.187 + int security_path_unlink(struct path *dir, struct dentry *dentry)
   6.188 + {
   6.189 +@@ -427,6 +428,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
   6.190 + 		return 0;
   6.191 + 	return security_ops->path_symlink(dir, dentry, old_name);
   6.192 + }
   6.193 ++EXPORT_SYMBOL(security_path_symlink);
   6.194 + 
   6.195 + int security_path_link(struct dentry *old_dentry, struct path *new_dir,
   6.196 + 		       struct dentry *new_dentry)
   6.197 +@@ -435,6 +437,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
   6.198 + 		return 0;
   6.199 + 	return security_ops->path_link(old_dentry, new_dir, new_dentry);
   6.200 + }
   6.201 ++EXPORT_SYMBOL(security_path_link);
   6.202 + 
   6.203 + int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
   6.204 + 			 struct path *new_dir, struct dentry *new_dentry)
   6.205 +@@ -453,6 +456,7 @@ int security_path_truncate(struct path *path)
   6.206 + 		return 0;
   6.207 + 	return security_ops->path_truncate(path);
   6.208 + }
   6.209 ++EXPORT_SYMBOL(security_path_truncate);
   6.210 + 
   6.211 + int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
   6.212 + 			mode_t mode)
   6.213 +@@ -461,6 +465,7 @@ int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
   6.214 + 		return 0;
   6.215 + 	return security_ops->path_chmod(dentry, mnt, mode);
   6.216 + }
   6.217 ++EXPORT_SYMBOL(security_path_chmod);
   6.218 + 
   6.219 + int security_path_chown(struct path *path, uid_t uid, gid_t gid)
   6.220 + {
   6.221 +@@ -468,6 +473,7 @@ int security_path_chown(struct path *path, uid_t uid, gid_t gid)
   6.222 + 		return 0;
   6.223 + 	return security_ops->path_chown(path, uid, gid);
   6.224 + }
   6.225 ++EXPORT_SYMBOL(security_path_chown);
   6.226 + 
   6.227 + int security_path_chroot(struct path *path)
   6.228 + {
   6.229 +@@ -544,6 +550,7 @@ int security_inode_readlink(struct dentry *dentry)
   6.230 + 		return 0;
   6.231 + 	return security_ops->inode_readlink(dentry);
   6.232 + }
   6.233 ++EXPORT_SYMBOL(security_inode_readlink);
   6.234 + 
   6.235 + int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd)
   6.236 + {
   6.237 +@@ -558,6 +565,7 @@ int security_inode_permission(struct inode *inode, int mask)
   6.238 + 		return 0;
   6.239 + 	return security_ops->inode_permission(inode, mask);
   6.240 + }
   6.241 ++EXPORT_SYMBOL(security_inode_permission);
   6.242 + 
   6.243 + int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
   6.244 + {
   6.245 +@@ -673,6 +681,7 @@ int security_file_permission(struct file *file, int mask)
   6.246 + 
   6.247 + 	return fsnotify_perm(file, mask);
   6.248 + }
   6.249 ++EXPORT_SYMBOL(security_file_permission);
   6.250 + 
   6.251 + int security_file_alloc(struct file *file)
   6.252 + {
   6.253 +@@ -700,6 +709,7 @@ int security_file_mmap(struct file *file, unsigned long reqprot,
   6.254 + 		return ret;
   6.255 + 	return ima_file_mmap(file, prot);
   6.256 + }
   6.257 ++EXPORT_SYMBOL(security_file_mmap);
   6.258 + 
   6.259 + int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot,
   6.260 + 			    unsigned long prot)
     7.1 --- a/linux/stuff/linux-slitaz.config	Sat Dec 28 15:39:34 2013 +0000
     7.2 +++ b/linux/stuff/linux-slitaz.config	Wed Jan 01 19:09:17 2014 +0100
     7.3 @@ -369,8 +369,11 @@
     7.4  CONFIG_TOSHIBA=m
     7.5  CONFIG_I8K=m
     7.6  CONFIG_X86_REBOOTFIXUPS=y
     7.7 -# CONFIG_MICROCODE is not set
     7.8 -# CONFIG_X86_MSR is not set
     7.9 +CONFIG_MICROCODE=m
    7.10 +CONFIG_MICROCODE_INTEL=y
    7.11 +CONFIG_MICROCODE_AMD=y
    7.12 +CONFIG_MICROCODE_OLD_INTERFACE=y
    7.13 +CONFIG_X86_MSR=m
    7.14  # CONFIG_X86_CPUID is not set
    7.15  # CONFIG_NOHIGHMEM is not set
    7.16  CONFIG_HIGHMEM4G=y
     8.1 --- a/linux/stuff/linux-slitaz.config64	Sat Dec 28 15:39:34 2013 +0000
     8.2 +++ b/linux/stuff/linux-slitaz.config64	Wed Jan 01 19:09:17 2014 +0100
     8.3 @@ -386,7 +386,7 @@
     8.4  CONFIG_X86_PAT=y
     8.5  CONFIG_ARCH_USES_PG_UNCACHED=y
     8.6  CONFIG_ARCH_RANDOM=y
     8.7 -# CONFIG_EFI is not set
     8.8 +CONFIG_EFI=y
     8.9  # CONFIG_SECCOMP is not set
    8.10  # CONFIG_CC_STACKPROTECTOR is not set
    8.11  # CONFIG_HZ_100 is not set