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