kernel-5.15.41
This commit is contained in:
@@ -0,0 +1,241 @@
|
||||
SPDX-License-Identifier: GPL-2.0
|
||||
aufs5.15.36 base patch
|
||||
|
||||
diff --git a/MAINTAINERS b/MAINTAINERS
|
||||
index c8103e57a70b..e1b9eaca78fd 100644
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3122,6 +3122,19 @@ F: include/uapi/linux/audit.h
|
||||
F: kernel/audit*
|
||||
F: lib/*audit.c
|
||||
|
||||
+AUFS (advanced multi layered unification filesystem) FILESYSTEM
|
||||
+M: "J. R. Okajima" <hooanon05g@gmail.com>
|
||||
+L: aufs-users@lists.sourceforge.net (members only)
|
||||
+L: linux-unionfs@vger.kernel.org
|
||||
+S: Supported
|
||||
+W: http://aufs.sourceforge.net
|
||||
+T: git://github.com/sfjro/aufs4-linux.git
|
||||
+F: Documentation/ABI/testing/debugfs-aufs
|
||||
+F: Documentation/ABI/testing/sysfs-aufs
|
||||
+F: Documentation/filesystems/aufs/
|
||||
+F: fs/aufs/
|
||||
+F: include/uapi/linux/aufs_type.h
|
||||
+
|
||||
AUXILIARY DISPLAY DRIVERS
|
||||
M: Miguel Ojeda <ojeda@kernel.org>
|
||||
S: Maintained
|
||||
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
|
||||
index 8cba10aafadb..7a9e40b97831 100644
|
||||
--- a/drivers/block/loop.c
|
||||
+++ b/drivers/block/loop.c
|
||||
@@ -799,6 +799,24 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
|
||||
return error;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * for AUFS
|
||||
+ * no get/put for file.
|
||||
+ */
|
||||
+struct file *loop_backing_file(struct super_block *sb)
|
||||
+{
|
||||
+ struct file *ret;
|
||||
+ struct loop_device *l;
|
||||
+
|
||||
+ ret = NULL;
|
||||
+ if (MAJOR(sb->s_dev) == LOOP_MAJOR) {
|
||||
+ l = sb->s_bdev->bd_disk->private_data;
|
||||
+ ret = l->lo_backing_file;
|
||||
+ }
|
||||
+ return ret;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(loop_backing_file);
|
||||
+
|
||||
/* loop sysfs attributes */
|
||||
|
||||
static ssize_t loop_attr_show(struct device *dev, char *page,
|
||||
diff --git a/fs/dcache.c b/fs/dcache.c
|
||||
index cf871a81f4fd..bc5095b734f5 100644
|
||||
--- a/fs/dcache.c
|
||||
+++ b/fs/dcache.c
|
||||
@@ -1320,7 +1320,7 @@ enum d_walk_ret {
|
||||
*
|
||||
* The @enter() callbacks are called with d_lock held.
|
||||
*/
|
||||
-static void d_walk(struct dentry *parent, void *data,
|
||||
+void d_walk(struct dentry *parent, void *data,
|
||||
enum d_walk_ret (*enter)(void *, struct dentry *))
|
||||
{
|
||||
struct dentry *this_parent;
|
||||
diff --git a/fs/fcntl.c b/fs/fcntl.c
|
||||
index 9c6c6a3e2de5..02382fa9bd34 100644
|
||||
--- a/fs/fcntl.c
|
||||
+++ b/fs/fcntl.c
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
#define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
|
||||
|
||||
-static int setfl(int fd, struct file * filp, unsigned long arg)
|
||||
+int setfl(int fd, struct file *filp, unsigned long arg)
|
||||
{
|
||||
struct inode * inode = file_inode(filp);
|
||||
int error = 0;
|
||||
@@ -64,6 +64,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
|
||||
|
||||
if (filp->f_op->check_flags)
|
||||
error = filp->f_op->check_flags(arg);
|
||||
+ if (!error && filp->f_op->setfl)
|
||||
+ error = filp->f_op->setfl(filp, arg);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
diff --git a/fs/namespace.c b/fs/namespace.c
|
||||
index b696543adab8..c45740054bc7 100644
|
||||
--- a/fs/namespace.c
|
||||
+++ b/fs/namespace.c
|
||||
@@ -808,6 +808,12 @@ static inline int check_mnt(struct mount *mnt)
|
||||
return mnt->mnt_ns == current->nsproxy->mnt_ns;
|
||||
}
|
||||
|
||||
+/* for aufs, CONFIG_AUFS_BR_FUSE */
|
||||
+int is_current_mnt_ns(struct vfsmount *mnt)
|
||||
+{
|
||||
+ return check_mnt(real_mount(mnt));
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* vfsmount lock must be held for write
|
||||
*/
|
||||
diff --git a/fs/splice.c b/fs/splice.c
|
||||
index 5dbce4dcc1a7..3e6ba363b777 100644
|
||||
--- a/fs/splice.c
|
||||
+++ b/fs/splice.c
|
||||
@@ -759,8 +759,8 @@ static int warn_unsupported(struct file *file, const char *op)
|
||||
/*
|
||||
* Attempt to initiate a splice from pipe to file.
|
||||
*/
|
||||
-static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
||||
- loff_t *ppos, size_t len, unsigned int flags)
|
||||
+long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
||||
+ loff_t *ppos, size_t len, unsigned int flags)
|
||||
{
|
||||
if (unlikely(!out->f_op->splice_write))
|
||||
return warn_unsupported(out, "write");
|
||||
@@ -770,9 +770,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
||||
/*
|
||||
* Attempt to initiate a splice from a file to a pipe.
|
||||
*/
|
||||
-static long do_splice_to(struct file *in, loff_t *ppos,
|
||||
- struct pipe_inode_info *pipe, size_t len,
|
||||
- unsigned int flags)
|
||||
+long do_splice_to(struct file *in, loff_t *ppos,
|
||||
+ struct pipe_inode_info *pipe, size_t len,
|
||||
+ unsigned int flags)
|
||||
{
|
||||
unsigned int p_space;
|
||||
int ret;
|
||||
diff --git a/include/linux/fs.h b/include/linux/fs.h
|
||||
index 56eba723477e..e60d8ad85400 100644
|
||||
--- a/include/linux/fs.h
|
||||
+++ b/include/linux/fs.h
|
||||
@@ -1381,6 +1381,7 @@ extern void fasync_free(struct fasync_struct *);
|
||||
/* can be called from interrupts */
|
||||
extern void kill_fasync(struct fasync_struct **, int, int);
|
||||
|
||||
+extern int setfl(int fd, struct file *filp, unsigned long arg);
|
||||
extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
|
||||
extern int f_setown(struct file *filp, unsigned long arg, int force);
|
||||
extern void f_delown(struct file *filp);
|
||||
@@ -2092,6 +2093,7 @@ struct file_operations {
|
||||
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
|
||||
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
|
||||
int (*check_flags)(int);
|
||||
+ int (*setfl)(struct file *, unsigned long);
|
||||
int (*flock) (struct file *, int, struct file_lock *);
|
||||
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
|
||||
ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
|
||||
@@ -2615,6 +2617,7 @@ extern int current_umask(void);
|
||||
extern void ihold(struct inode * inode);
|
||||
extern void iput(struct inode *);
|
||||
extern int generic_update_time(struct inode *, struct timespec64 *, int);
|
||||
+extern int update_time(struct inode *, struct timespec64 *, int);
|
||||
|
||||
/* /sys/fs */
|
||||
extern struct kobject *fs_kobj;
|
||||
@@ -2778,6 +2781,7 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb)
|
||||
}
|
||||
|
||||
void emergency_thaw_all(void);
|
||||
+extern int __sync_filesystem(struct super_block *, int);
|
||||
extern int sync_filesystem(struct super_block *);
|
||||
extern const struct file_operations def_blk_fops;
|
||||
extern const struct file_operations def_chr_fops;
|
||||
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
|
||||
index 9fe165beb0f9..e47f7e15eeaf 100644
|
||||
--- a/include/linux/lockdep.h
|
||||
+++ b/include/linux/lockdep.h
|
||||
@@ -248,6 +248,8 @@ static inline int lockdep_match_key(struct lockdep_map *lock,
|
||||
return lock->key == key;
|
||||
}
|
||||
|
||||
+struct lock_class *lockdep_hlock_class(struct held_lock *hlock);
|
||||
+
|
||||
/*
|
||||
* Acquire a lock.
|
||||
*
|
||||
diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h
|
||||
index 8f882f5881e8..6b9808f09843 100644
|
||||
--- a/include/linux/mnt_namespace.h
|
||||
+++ b/include/linux/mnt_namespace.h
|
||||
@@ -7,12 +7,15 @@ struct mnt_namespace;
|
||||
struct fs_struct;
|
||||
struct user_namespace;
|
||||
struct ns_common;
|
||||
+struct vfsmount;
|
||||
|
||||
extern struct mnt_namespace *copy_mnt_ns(unsigned long, struct mnt_namespace *,
|
||||
struct user_namespace *, struct fs_struct *);
|
||||
extern void put_mnt_ns(struct mnt_namespace *ns);
|
||||
extern struct ns_common *from_mnt_ns(struct mnt_namespace *);
|
||||
|
||||
+extern int is_current_mnt_ns(struct vfsmount *mnt);
|
||||
+
|
||||
extern const struct file_operations proc_mounts_operations;
|
||||
extern const struct file_operations proc_mountinfo_operations;
|
||||
extern const struct file_operations proc_mountstats_operations;
|
||||
diff --git a/include/linux/splice.h b/include/linux/splice.h
|
||||
index a55179fd60fc..8e21c53cf883 100644
|
||||
--- a/include/linux/splice.h
|
||||
+++ b/include/linux/splice.h
|
||||
@@ -93,4 +93,10 @@ extern void splice_shrink_spd(struct splice_pipe_desc *);
|
||||
|
||||
extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
|
||||
extern const struct pipe_buf_operations default_pipe_buf_ops;
|
||||
+
|
||||
+extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
||||
+ loff_t *ppos, size_t len, unsigned int flags);
|
||||
+extern long do_splice_to(struct file *in, loff_t *ppos,
|
||||
+ struct pipe_inode_info *pipe, size_t len,
|
||||
+ unsigned int flags);
|
||||
#endif
|
||||
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
|
||||
index a30702b847ba..ce380d0abdf0 100644
|
||||
--- a/kernel/locking/lockdep.c
|
||||
+++ b/kernel/locking/lockdep.c
|
||||
@@ -187,7 +187,7 @@ unsigned long max_lock_class_idx;
|
||||
struct lock_class lock_classes[MAX_LOCKDEP_KEYS];
|
||||
DECLARE_BITMAP(lock_classes_in_use, MAX_LOCKDEP_KEYS);
|
||||
|
||||
-static inline struct lock_class *hlock_class(struct held_lock *hlock)
|
||||
+inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock)
|
||||
{
|
||||
unsigned int class_idx = hlock->class_idx;
|
||||
|
||||
@@ -208,6 +208,7 @@ static inline struct lock_class *hlock_class(struct held_lock *hlock)
|
||||
*/
|
||||
return lock_classes + class_idx;
|
||||
}
|
||||
+#define hlock_class(hlock) lockdep_hlock_class(hlock)
|
||||
|
||||
#ifdef CONFIG_LOCK_STAT
|
||||
static DEFINE_PER_CPU(struct lock_class_stats[MAX_LOCKDEP_KEYS], cpu_lock_stats);
|
||||
@@ -0,0 +1,24 @@
|
||||
SPDX-License-Identifier: GPL-2.0
|
||||
aufs5.15.36 kbuild patch
|
||||
|
||||
diff --git a/fs/Kconfig b/fs/Kconfig
|
||||
index a6313a969bc5..aca4b89d41a1 100644
|
||||
--- a/fs/Kconfig
|
||||
+++ b/fs/Kconfig
|
||||
@@ -312,6 +312,7 @@ source "fs/sysv/Kconfig"
|
||||
source "fs/ufs/Kconfig"
|
||||
source "fs/erofs/Kconfig"
|
||||
source "fs/vboxsf/Kconfig"
|
||||
+source "fs/aufs/Kconfig"
|
||||
|
||||
endif # MISC_FILESYSTEMS
|
||||
|
||||
diff --git a/fs/Makefile b/fs/Makefile
|
||||
index 84c5e4cdfee5..b4fcdad8412e 100644
|
||||
--- a/fs/Makefile
|
||||
+++ b/fs/Makefile
|
||||
@@ -138,3 +138,4 @@ obj-$(CONFIG_EFIVAR_FS) += efivarfs/
|
||||
obj-$(CONFIG_EROFS_FS) += erofs/
|
||||
obj-$(CONFIG_VBOXSF_FS) += vboxsf/
|
||||
obj-$(CONFIG_ZONEFS_FS) += zonefs/
|
||||
+obj-$(CONFIG_AUFS_FS) += aufs/
|
||||
@@ -0,0 +1,244 @@
|
||||
SPDX-License-Identifier: GPL-2.0
|
||||
aufs5.15.36 loopback patch
|
||||
|
||||
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
|
||||
index 7a9e40b97831..5ed06240cc9c 100644
|
||||
--- a/drivers/block/loop.c
|
||||
+++ b/drivers/block/loop.c
|
||||
@@ -673,6 +673,15 @@ static inline void loop_update_dio(struct loop_device *lo)
|
||||
lo->use_dio);
|
||||
}
|
||||
|
||||
+static struct file *loop_real_file(struct file *file)
|
||||
+{
|
||||
+ struct file *f = NULL;
|
||||
+
|
||||
+ if (file->f_path.dentry->d_sb->s_op->real_loop)
|
||||
+ f = file->f_path.dentry->d_sb->s_op->real_loop(file);
|
||||
+ return f;
|
||||
+}
|
||||
+
|
||||
static void loop_reread_partitions(struct loop_device *lo)
|
||||
{
|
||||
int rc;
|
||||
@@ -730,6 +739,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
|
||||
{
|
||||
struct file *file = fget(arg);
|
||||
struct file *old_file;
|
||||
+ struct file *f, *virt_file = NULL, *old_virt_file;
|
||||
int error;
|
||||
bool partscan;
|
||||
bool is_loop;
|
||||
@@ -749,11 +759,19 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
|
||||
if (!(lo->lo_flags & LO_FLAGS_READ_ONLY))
|
||||
goto out_err;
|
||||
|
||||
+ f = loop_real_file(file);
|
||||
+ if (f) {
|
||||
+ virt_file = file;
|
||||
+ file = f;
|
||||
+ get_file(file);
|
||||
+ }
|
||||
+
|
||||
error = loop_validate_file(file, bdev);
|
||||
if (error)
|
||||
goto out_err;
|
||||
|
||||
old_file = lo->lo_backing_file;
|
||||
+ old_virt_file = lo->lo_backing_virt_file;
|
||||
|
||||
error = -EINVAL;
|
||||
|
||||
@@ -766,6 +784,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
|
||||
blk_mq_freeze_queue(lo->lo_queue);
|
||||
mapping_set_gfp_mask(old_file->f_mapping, lo->old_gfp_mask);
|
||||
lo->lo_backing_file = file;
|
||||
+ lo->lo_backing_virt_file = virt_file;
|
||||
lo->old_gfp_mask = mapping_gfp_mask(file->f_mapping);
|
||||
mapping_set_gfp_mask(file->f_mapping,
|
||||
lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
|
||||
@@ -788,6 +807,8 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
|
||||
* dependency.
|
||||
*/
|
||||
fput(old_file);
|
||||
+ if (old_virt_file)
|
||||
+ fput(old_virt_file);
|
||||
if (partscan)
|
||||
loop_reread_partitions(lo);
|
||||
return 0;
|
||||
@@ -796,6 +817,8 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
|
||||
loop_global_unlock(lo, is_loop);
|
||||
out_putf:
|
||||
fput(file);
|
||||
+ if (virt_file)
|
||||
+ fput(virt_file);
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -1201,6 +1224,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
|
||||
const struct loop_config *config)
|
||||
{
|
||||
struct file *file = fget(config->fd);
|
||||
+ struct file *f, *virt_file = NULL;
|
||||
struct inode *inode;
|
||||
struct address_space *mapping;
|
||||
int error;
|
||||
@@ -1216,6 +1240,13 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
|
||||
/* This is safe, since we have a reference from open(). */
|
||||
__module_get(THIS_MODULE);
|
||||
|
||||
+ f = loop_real_file(file);
|
||||
+ if (f) {
|
||||
+ virt_file = file;
|
||||
+ file = f;
|
||||
+ get_file(file);
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* If we don't hold exclusive handle for the device, upgrade to it
|
||||
* here to avoid changing device under exclusive owner.
|
||||
@@ -1281,6 +1312,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
|
||||
lo->use_dio = lo->lo_flags & LO_FLAGS_DIRECT_IO;
|
||||
lo->lo_device = bdev;
|
||||
lo->lo_backing_file = file;
|
||||
+ lo->lo_backing_virt_file = virt_file;
|
||||
lo->old_gfp_mask = mapping_gfp_mask(mapping);
|
||||
mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
|
||||
|
||||
@@ -1331,6 +1363,8 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
|
||||
bd_abort_claiming(bdev, loop_configure);
|
||||
out_putf:
|
||||
fput(file);
|
||||
+ if (virt_file)
|
||||
+ fput(virt_file);
|
||||
/* This is safe: open() is still holding a reference. */
|
||||
module_put(THIS_MODULE);
|
||||
return error;
|
||||
@@ -1339,6 +1373,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
|
||||
static int __loop_clr_fd(struct loop_device *lo, bool release)
|
||||
{
|
||||
struct file *filp = NULL;
|
||||
+ struct file *virt_filp = lo->lo_backing_virt_file;
|
||||
gfp_t gfp = lo->old_gfp_mask;
|
||||
struct block_device *bdev = lo->lo_device;
|
||||
int err = 0;
|
||||
@@ -1390,6 +1425,7 @@ static int __loop_clr_fd(struct loop_device *lo, bool release)
|
||||
|
||||
spin_lock_irq(&lo->lo_lock);
|
||||
lo->lo_backing_file = NULL;
|
||||
+ lo->lo_backing_virt_file = NULL;
|
||||
spin_unlock_irq(&lo->lo_lock);
|
||||
|
||||
loop_release_xfer(lo);
|
||||
@@ -1470,6 +1506,8 @@ static int __loop_clr_fd(struct loop_device *lo, bool release)
|
||||
*/
|
||||
if (filp)
|
||||
fput(filp);
|
||||
+ if (virt_filp)
|
||||
+ fput(virt_filp);
|
||||
return err;
|
||||
}
|
||||
|
||||
diff --git a/drivers/block/loop.h b/drivers/block/loop.h
|
||||
index 04c88dd6eabd..0ff3ba22ee17 100644
|
||||
--- a/drivers/block/loop.h
|
||||
+++ b/drivers/block/loop.h
|
||||
@@ -46,7 +46,7 @@ struct loop_device {
|
||||
int (*ioctl)(struct loop_device *, int cmd,
|
||||
unsigned long arg);
|
||||
|
||||
- struct file * lo_backing_file;
|
||||
+ struct file *lo_backing_file, *lo_backing_virt_file;
|
||||
struct block_device *lo_device;
|
||||
void *key_data;
|
||||
|
||||
diff --git a/fs/aufs/f_op.c b/fs/aufs/f_op.c
|
||||
index 99ceca144044..e49dfe855032 100644
|
||||
--- a/fs/aufs/f_op.c
|
||||
+++ b/fs/aufs/f_op.c
|
||||
@@ -304,7 +304,7 @@ static ssize_t aufs_read_iter(struct kiocb *kio, struct iov_iter *iov_iter)
|
||||
if (IS_ERR(h_file))
|
||||
goto out;
|
||||
|
||||
- if (au_test_loopback_kthread()) {
|
||||
+ if (0 && au_test_loopback_kthread()) {
|
||||
au_warn_loopback(h_file->f_path.dentry->d_sb);
|
||||
if (file->f_mapping != h_file->f_mapping) {
|
||||
file->f_mapping = h_file->f_mapping;
|
||||
diff --git a/fs/aufs/loop.c b/fs/aufs/loop.c
|
||||
index 74347bd75b38..5ef888a1d53f 100644
|
||||
--- a/fs/aufs/loop.c
|
||||
+++ b/fs/aufs/loop.c
|
||||
@@ -133,3 +133,19 @@ void au_loopback_fin(void)
|
||||
symbol_put(loop_backing_file);
|
||||
au_kfree_try_rcu(au_warn_loopback_array);
|
||||
}
|
||||
+
|
||||
+/* ---------------------------------------------------------------------- */
|
||||
+
|
||||
+/* support the loopback block device insude aufs */
|
||||
+
|
||||
+struct file *aufs_real_loop(struct file *file)
|
||||
+{
|
||||
+ struct file *f;
|
||||
+
|
||||
+ BUG_ON(!au_test_aufs(file->f_path.dentry->d_sb));
|
||||
+ fi_read_lock(file);
|
||||
+ f = au_hf_top(file);
|
||||
+ fi_read_unlock(file);
|
||||
+ AuDebugOn(!f);
|
||||
+ return f;
|
||||
+}
|
||||
diff --git a/fs/aufs/loop.h b/fs/aufs/loop.h
|
||||
index 7293bee427f9..3345c098d0d4 100644
|
||||
--- a/fs/aufs/loop.h
|
||||
+++ b/fs/aufs/loop.h
|
||||
@@ -26,6 +26,8 @@ void au_warn_loopback(struct super_block *h_sb);
|
||||
|
||||
int au_loopback_init(void);
|
||||
void au_loopback_fin(void);
|
||||
+
|
||||
+struct file *aufs_real_loop(struct file *file);
|
||||
#else
|
||||
AuStub(struct file *, loop_backing_file, return NULL, struct super_block *sb)
|
||||
|
||||
@@ -36,6 +38,8 @@ AuStubVoid(au_warn_loopback, struct super_block *h_sb)
|
||||
|
||||
AuStubInt0(au_loopback_init, void)
|
||||
AuStubVoid(au_loopback_fin, void)
|
||||
+
|
||||
+AuStub(struct file *, aufs_real_loop, return NULL, struct file *file)
|
||||
#endif /* BLK_DEV_LOOP */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
diff --git a/fs/aufs/super.c b/fs/aufs/super.c
|
||||
index 90043afec51c..0835f6da42d9 100644
|
||||
--- a/fs/aufs/super.c
|
||||
+++ b/fs/aufs/super.c
|
||||
@@ -758,7 +758,10 @@ const struct super_operations aufs_sop = {
|
||||
.show_options = aufs_show_options,
|
||||
.statfs = aufs_statfs,
|
||||
.put_super = aufs_put_super,
|
||||
- .sync_fs = aufs_sync_fs
|
||||
+ .sync_fs = aufs_sync_fs,
|
||||
+#ifdef CONFIG_AUFS_BDEV_LOOP
|
||||
+ .real_loop = aufs_real_loop
|
||||
+#endif
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
diff --git a/include/linux/fs.h b/include/linux/fs.h
|
||||
index e60d8ad85400..2ac5317f9b79 100644
|
||||
--- a/include/linux/fs.h
|
||||
+++ b/include/linux/fs.h
|
||||
@@ -2226,6 +2226,10 @@ struct super_operations {
|
||||
struct shrink_control *);
|
||||
long (*free_cached_objects)(struct super_block *,
|
||||
struct shrink_control *);
|
||||
+#if IS_ENABLED(CONFIG_BLK_DEV_LOOP) || IS_ENABLED(CONFIG_BLK_DEV_LOOP_MODULE)
|
||||
+ /* and aufs */
|
||||
+ struct file *(*real_loop)(struct file *);
|
||||
+#endif
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -0,0 +1,419 @@
|
||||
SPDX-License-Identifier: GPL-2.0
|
||||
aufs5.15.36 mmap patch
|
||||
|
||||
diff --git a/fs/proc/base.c b/fs/proc/base.c
|
||||
index 1f394095eb88..93f2479ef319 100644
|
||||
--- a/fs/proc/base.c
|
||||
+++ b/fs/proc/base.c
|
||||
@@ -2189,7 +2189,7 @@ static int map_files_get_link(struct dentry *dentry, struct path *path)
|
||||
rc = -ENOENT;
|
||||
vma = find_exact_vma(mm, vm_start, vm_end);
|
||||
if (vma && vma->vm_file) {
|
||||
- *path = vma->vm_file->f_path;
|
||||
+ *path = vma_pr_or_file(vma)->f_path;
|
||||
path_get(path);
|
||||
rc = 0;
|
||||
}
|
||||
diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c
|
||||
index 13452b32e2bd..38acccfef9d4 100644
|
||||
--- a/fs/proc/nommu.c
|
||||
+++ b/fs/proc/nommu.c
|
||||
@@ -40,7 +40,10 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region)
|
||||
file = region->vm_file;
|
||||
|
||||
if (file) {
|
||||
- struct inode *inode = file_inode(region->vm_file);
|
||||
+ struct inode *inode;
|
||||
+
|
||||
+ file = vmr_pr_or_file(region);
|
||||
+ inode = file_inode(file);
|
||||
dev = inode->i_sb->s_dev;
|
||||
ino = inode->i_ino;
|
||||
}
|
||||
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
|
||||
index 79ca4d69dfd6..3d3067c8d868 100644
|
||||
--- a/fs/proc/task_mmu.c
|
||||
+++ b/fs/proc/task_mmu.c
|
||||
@@ -280,7 +280,10 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
|
||||
const char *name = NULL;
|
||||
|
||||
if (file) {
|
||||
- struct inode *inode = file_inode(vma->vm_file);
|
||||
+ struct inode *inode;
|
||||
+
|
||||
+ file = vma_pr_or_file(vma);
|
||||
+ inode = file_inode(file);
|
||||
dev = inode->i_sb->s_dev;
|
||||
ino = inode->i_ino;
|
||||
pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
|
||||
@@ -1888,7 +1891,7 @@ static int show_numa_map(struct seq_file *m, void *v)
|
||||
struct proc_maps_private *proc_priv = &numa_priv->proc_maps;
|
||||
struct vm_area_struct *vma = v;
|
||||
struct numa_maps *md = &numa_priv->md;
|
||||
- struct file *file = vma->vm_file;
|
||||
+ struct file *file = vma_pr_or_file(vma);
|
||||
struct mm_struct *mm = vma->vm_mm;
|
||||
struct mempolicy *pol;
|
||||
char buffer[64];
|
||||
diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
|
||||
index a6d21fc0033c..02c2de31196e 100644
|
||||
--- a/fs/proc/task_nommu.c
|
||||
+++ b/fs/proc/task_nommu.c
|
||||
@@ -155,7 +155,10 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
|
||||
file = vma->vm_file;
|
||||
|
||||
if (file) {
|
||||
- struct inode *inode = file_inode(vma->vm_file);
|
||||
+ struct inode *inode;
|
||||
+
|
||||
+ file = vma_pr_or_file(vma);
|
||||
+ inode = file_inode(file);
|
||||
dev = inode->i_sb->s_dev;
|
||||
ino = inode->i_ino;
|
||||
pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
|
||||
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
||||
index 90c2d7f3c7a8..ab1b20fa5837 100644
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -1813,6 +1813,43 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping,
|
||||
unmap_mapping_range(mapping, holebegin, holelen, 0);
|
||||
}
|
||||
|
||||
+#if IS_ENABLED(CONFIG_AUFS_FS)
|
||||
+extern void vma_do_file_update_time(struct vm_area_struct *, const char[], int);
|
||||
+extern struct file *vma_do_pr_or_file(struct vm_area_struct *, const char[],
|
||||
+ int);
|
||||
+extern void vma_do_get_file(struct vm_area_struct *, const char[], int);
|
||||
+extern void vma_do_fput(struct vm_area_struct *, const char[], int);
|
||||
+
|
||||
+#define vma_file_update_time(vma) vma_do_file_update_time(vma, __func__, \
|
||||
+ __LINE__)
|
||||
+#define vma_pr_or_file(vma) vma_do_pr_or_file(vma, __func__, \
|
||||
+ __LINE__)
|
||||
+#define vma_get_file(vma) vma_do_get_file(vma, __func__, __LINE__)
|
||||
+#define vma_fput(vma) vma_do_fput(vma, __func__, __LINE__)
|
||||
+
|
||||
+#ifndef CONFIG_MMU
|
||||
+extern struct file *vmr_do_pr_or_file(struct vm_region *, const char[], int);
|
||||
+extern void vmr_do_fput(struct vm_region *, const char[], int);
|
||||
+
|
||||
+#define vmr_pr_or_file(region) vmr_do_pr_or_file(region, __func__, \
|
||||
+ __LINE__)
|
||||
+#define vmr_fput(region) vmr_do_fput(region, __func__, __LINE__)
|
||||
+#endif /* !CONFIG_MMU */
|
||||
+
|
||||
+#else
|
||||
+
|
||||
+#define vma_file_update_time(vma) file_update_time((vma)->vm_file)
|
||||
+#define vma_pr_or_file(vma) (vma)->vm_file
|
||||
+#define vma_get_file(vma) get_file((vma)->vm_file)
|
||||
+#define vma_fput(vma) fput((vma)->vm_file)
|
||||
+
|
||||
+#ifndef CONFIG_MMU
|
||||
+#define vmr_pr_or_file(region) (region)->vm_file
|
||||
+#define vmr_fput(region) fput((region)->vm_file)
|
||||
+#endif /* !CONFIG_MMU */
|
||||
+
|
||||
+#endif /* CONFIG_AUFS_FS */
|
||||
+
|
||||
extern int access_process_vm(struct task_struct *tsk, unsigned long addr,
|
||||
void *buf, int len, unsigned int gup_flags);
|
||||
extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
|
||||
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
|
||||
index 7f8ee09c711f..8fea872e08f7 100644
|
||||
--- a/include/linux/mm_types.h
|
||||
+++ b/include/linux/mm_types.h
|
||||
@@ -294,6 +294,9 @@ struct vm_region {
|
||||
unsigned long vm_top; /* region allocated to here */
|
||||
unsigned long vm_pgoff; /* the offset in vm_file corresponding to vm_start */
|
||||
struct file *vm_file; /* the backing file or NULL */
|
||||
+#if IS_ENABLED(CONFIG_AUFS_FS)
|
||||
+ struct file *vm_prfile; /* the virtual backing file or NULL */
|
||||
+#endif
|
||||
|
||||
int vm_usage; /* region usage count (access under nommu_region_sem) */
|
||||
bool vm_icache_flushed : 1; /* true if the icache has been flushed for
|
||||
@@ -373,6 +376,9 @@ struct vm_area_struct {
|
||||
unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE
|
||||
units */
|
||||
struct file * vm_file; /* File we map to (can be NULL). */
|
||||
+#if IS_ENABLED(CONFIG_AUFS_FS)
|
||||
+ struct file *vm_prfile; /* shadow of vm_file */
|
||||
+#endif
|
||||
void * vm_private_data; /* was vm_pte (shared mem) */
|
||||
|
||||
#ifdef CONFIG_SWAP
|
||||
diff --git a/kernel/fork.c b/kernel/fork.c
|
||||
index 89475c994ca9..82f46f8f4090 100644
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -573,7 +573,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
|
||||
if (file) {
|
||||
struct address_space *mapping = file->f_mapping;
|
||||
|
||||
- get_file(file);
|
||||
+ vma_get_file(tmp);
|
||||
i_mmap_lock_write(mapping);
|
||||
if (tmp->vm_flags & VM_SHARED)
|
||||
mapping_allow_writable(mapping);
|
||||
diff --git a/mm/Makefile b/mm/Makefile
|
||||
index fc60a40ce954..d45773672730 100644
|
||||
--- a/mm/Makefile
|
||||
+++ b/mm/Makefile
|
||||
@@ -130,3 +130,4 @@ obj-$(CONFIG_PAGE_REPORTING) += page_reporting.o
|
||||
obj-$(CONFIG_IO_MAPPING) += io-mapping.o
|
||||
obj-$(CONFIG_HAVE_BOOTMEM_INFO_NODE) += bootmem_info.o
|
||||
obj-$(CONFIG_GENERIC_IOREMAP) += ioremap.o
|
||||
+obj-$(CONFIG_AUFS_FS:m=y) += prfile.o
|
||||
diff --git a/mm/filemap.c b/mm/filemap.c
|
||||
index 1293c3409e42..42b012b99f4e 100644
|
||||
--- a/mm/filemap.c
|
||||
+++ b/mm/filemap.c
|
||||
@@ -3353,7 +3353,7 @@ vm_fault_t filemap_page_mkwrite(struct vm_fault *vmf)
|
||||
vm_fault_t ret = VM_FAULT_LOCKED;
|
||||
|
||||
sb_start_pagefault(mapping->host->i_sb);
|
||||
- file_update_time(vmf->vma->vm_file);
|
||||
+ vma_file_update_time(vmf->vma);
|
||||
lock_page(page);
|
||||
if (page->mapping != mapping) {
|
||||
unlock_page(page);
|
||||
diff --git a/mm/mmap.c b/mm/mmap.c
|
||||
index 6bb553ed5c55..3f9d6d155171 100644
|
||||
--- a/mm/mmap.c
|
||||
+++ b/mm/mmap.c
|
||||
@@ -183,7 +183,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
|
||||
if (vma->vm_ops && vma->vm_ops->close)
|
||||
vma->vm_ops->close(vma);
|
||||
if (vma->vm_file)
|
||||
- fput(vma->vm_file);
|
||||
+ vma_fput(vma);
|
||||
mpol_put(vma_policy(vma));
|
||||
vm_area_free(vma);
|
||||
return next;
|
||||
@@ -952,7 +952,7 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
|
||||
if (remove_next) {
|
||||
if (file) {
|
||||
uprobe_munmap(next, next->vm_start, next->vm_end);
|
||||
- fput(file);
|
||||
+ vma_fput(vma);
|
||||
}
|
||||
if (next->anon_vma)
|
||||
anon_vma_merge(vma, next);
|
||||
@@ -1873,7 +1873,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
|
||||
return addr;
|
||||
|
||||
unmap_and_free_vma:
|
||||
- fput(vma->vm_file);
|
||||
+ vma_fput(vma);
|
||||
vma->vm_file = NULL;
|
||||
|
||||
/* Undo any partial mapping done by a device driver. */
|
||||
@@ -2723,7 +2723,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
goto out_free_mpol;
|
||||
|
||||
if (new->vm_file)
|
||||
- get_file(new->vm_file);
|
||||
+ vma_get_file(new);
|
||||
|
||||
if (new->vm_ops && new->vm_ops->open)
|
||||
new->vm_ops->open(new);
|
||||
@@ -2742,7 +2742,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
if (new->vm_ops && new->vm_ops->close)
|
||||
new->vm_ops->close(new);
|
||||
if (new->vm_file)
|
||||
- fput(new->vm_file);
|
||||
+ vma_fput(new);
|
||||
unlink_anon_vmas(new);
|
||||
out_free_mpol:
|
||||
mpol_put(vma_policy(new));
|
||||
@@ -2938,6 +2938,9 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
|
||||
unsigned long populate = 0;
|
||||
unsigned long ret = -EINVAL;
|
||||
struct file *file;
|
||||
+#if IS_ENABLED(CONFIG_AUFS_FS)
|
||||
+ struct file *prfile;
|
||||
+#endif
|
||||
|
||||
pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/vm/remap_file_pages.rst.\n",
|
||||
current->comm, current->pid);
|
||||
@@ -2993,10 +2996,34 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
|
||||
if (vma->vm_flags & VM_LOCKED)
|
||||
flags |= MAP_LOCKED;
|
||||
|
||||
+#if IS_ENABLED(CONFIG_AUFS_FS)
|
||||
+ vma_get_file(vma);
|
||||
+ file = vma->vm_file;
|
||||
+ prfile = vma->vm_prfile;
|
||||
+ ret = do_mmap(vma->vm_file, start, size,
|
||||
+ prot, flags, pgoff, &populate, NULL);
|
||||
+ if (!IS_ERR_VALUE(ret) && file && prfile) {
|
||||
+ struct vm_area_struct *new_vma;
|
||||
+
|
||||
+ new_vma = find_vma(mm, ret);
|
||||
+ if (!new_vma->vm_prfile)
|
||||
+ new_vma->vm_prfile = prfile;
|
||||
+ if (new_vma != vma)
|
||||
+ get_file(prfile);
|
||||
+ }
|
||||
+ /*
|
||||
+ * two fput()s instead of vma_fput(vma),
|
||||
+ * coz vma may not be available anymore.
|
||||
+ */
|
||||
+ fput(file);
|
||||
+ if (prfile)
|
||||
+ fput(prfile);
|
||||
+#else
|
||||
file = get_file(vma->vm_file);
|
||||
ret = do_mmap(vma->vm_file, start, size,
|
||||
prot, flags, pgoff, &populate, NULL);
|
||||
fput(file);
|
||||
+#endif /* CONFIG_AUFS_FS */
|
||||
out:
|
||||
mmap_write_unlock(mm);
|
||||
if (populate)
|
||||
@@ -3277,7 +3304,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
|
||||
if (anon_vma_clone(new_vma, vma))
|
||||
goto out_free_mempol;
|
||||
if (new_vma->vm_file)
|
||||
- get_file(new_vma->vm_file);
|
||||
+ vma_get_file(new_vma);
|
||||
if (new_vma->vm_ops && new_vma->vm_ops->open)
|
||||
new_vma->vm_ops->open(new_vma);
|
||||
vma_link(mm, new_vma, prev, rb_link, rb_parent);
|
||||
diff --git a/mm/nommu.c b/mm/nommu.c
|
||||
index 02d2427b8f9e..a7419302ab4e 100644
|
||||
--- a/mm/nommu.c
|
||||
+++ b/mm/nommu.c
|
||||
@@ -523,7 +523,7 @@ static void __put_nommu_region(struct vm_region *region)
|
||||
up_write(&nommu_region_sem);
|
||||
|
||||
if (region->vm_file)
|
||||
- fput(region->vm_file);
|
||||
+ vmr_fput(region);
|
||||
|
||||
/* IO memory and memory shared directly out of the pagecache
|
||||
* from ramfs/tmpfs mustn't be released here */
|
||||
@@ -655,7 +655,7 @@ static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma)
|
||||
if (vma->vm_ops && vma->vm_ops->close)
|
||||
vma->vm_ops->close(vma);
|
||||
if (vma->vm_file)
|
||||
- fput(vma->vm_file);
|
||||
+ vma_fput(vma);
|
||||
put_nommu_region(vma->vm_region);
|
||||
vm_area_free(vma);
|
||||
}
|
||||
@@ -1175,7 +1175,7 @@ unsigned long do_mmap(struct file *file,
|
||||
goto error_just_free;
|
||||
}
|
||||
}
|
||||
- fput(region->vm_file);
|
||||
+ vmr_fput(region);
|
||||
kmem_cache_free(vm_region_jar, region);
|
||||
region = pregion;
|
||||
result = start;
|
||||
@@ -1252,10 +1252,10 @@ unsigned long do_mmap(struct file *file,
|
||||
up_write(&nommu_region_sem);
|
||||
error:
|
||||
if (region->vm_file)
|
||||
- fput(region->vm_file);
|
||||
+ vmr_fput(region);
|
||||
kmem_cache_free(vm_region_jar, region);
|
||||
if (vma->vm_file)
|
||||
- fput(vma->vm_file);
|
||||
+ vma_fput(vma);
|
||||
vm_area_free(vma);
|
||||
return ret;
|
||||
|
||||
diff --git a/mm/prfile.c b/mm/prfile.c
|
||||
new file mode 100644
|
||||
index 000000000000..511543ab1b41
|
||||
--- /dev/null
|
||||
+++ b/mm/prfile.c
|
||||
@@ -0,0 +1,86 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Mainly for aufs which mmap(2) different file and wants to print different
|
||||
+ * path in /proc/PID/maps.
|
||||
+ * Call these functions via macros defined in linux/mm.h.
|
||||
+ *
|
||||
+ * See Documentation/filesystems/aufs/design/06mmap.txt
|
||||
+ *
|
||||
+ * Copyright (c) 2014-2021 Junjro R. Okajima
|
||||
+ * Copyright (c) 2014 Ian Campbell
|
||||
+ */
|
||||
+
|
||||
+#include <linux/mm.h>
|
||||
+#include <linux/file.h>
|
||||
+#include <linux/fs.h>
|
||||
+
|
||||
+/* #define PRFILE_TRACE */
|
||||
+static inline void prfile_trace(struct file *f, struct file *pr,
|
||||
+ const char func[], int line, const char func2[])
|
||||
+{
|
||||
+#ifdef PRFILE_TRACE
|
||||
+ if (pr)
|
||||
+ pr_info("%s:%d: %s, %pD2\n", func, line, func2, f);
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+void vma_do_file_update_time(struct vm_area_struct *vma, const char func[],
|
||||
+ int line)
|
||||
+{
|
||||
+ struct file *f = vma->vm_file, *pr = vma->vm_prfile;
|
||||
+
|
||||
+ prfile_trace(f, pr, func, line, __func__);
|
||||
+ file_update_time(f);
|
||||
+ if (f && pr)
|
||||
+ file_update_time(pr);
|
||||
+}
|
||||
+
|
||||
+struct file *vma_do_pr_or_file(struct vm_area_struct *vma, const char func[],
|
||||
+ int line)
|
||||
+{
|
||||
+ struct file *f = vma->vm_file, *pr = vma->vm_prfile;
|
||||
+
|
||||
+ prfile_trace(f, pr, func, line, __func__);
|
||||
+ return (f && pr) ? pr : f;
|
||||
+}
|
||||
+
|
||||
+void vma_do_get_file(struct vm_area_struct *vma, const char func[], int line)
|
||||
+{
|
||||
+ struct file *f = vma->vm_file, *pr = vma->vm_prfile;
|
||||
+
|
||||
+ prfile_trace(f, pr, func, line, __func__);
|
||||
+ get_file(f);
|
||||
+ if (f && pr)
|
||||
+ get_file(pr);
|
||||
+}
|
||||
+
|
||||
+void vma_do_fput(struct vm_area_struct *vma, const char func[], int line)
|
||||
+{
|
||||
+ struct file *f = vma->vm_file, *pr = vma->vm_prfile;
|
||||
+
|
||||
+ prfile_trace(f, pr, func, line, __func__);
|
||||
+ fput(f);
|
||||
+ if (f && pr)
|
||||
+ fput(pr);
|
||||
+}
|
||||
+
|
||||
+#ifndef CONFIG_MMU
|
||||
+struct file *vmr_do_pr_or_file(struct vm_region *region, const char func[],
|
||||
+ int line)
|
||||
+{
|
||||
+ struct file *f = region->vm_file, *pr = region->vm_prfile;
|
||||
+
|
||||
+ prfile_trace(f, pr, func, line, __func__);
|
||||
+ return (f && pr) ? pr : f;
|
||||
+}
|
||||
+
|
||||
+void vmr_do_fput(struct vm_region *region, const char func[], int line)
|
||||
+{
|
||||
+ struct file *f = region->vm_file, *pr = region->vm_prfile;
|
||||
+
|
||||
+ prfile_trace(f, pr, func, line, __func__);
|
||||
+ fput(f);
|
||||
+ if (f && pr)
|
||||
+ fput(pr);
|
||||
+}
|
||||
+#endif /* !CONFIG_MMU */
|
||||
@@ -0,0 +1,251 @@
|
||||
SPDX-License-Identifier: GPL-2.0
|
||||
aufs5.15.36 standalone patch
|
||||
|
||||
diff --git a/fs/dcache.c b/fs/dcache.c
|
||||
index bc5095b734f5..9508bd57a3bc 100644
|
||||
--- a/fs/dcache.c
|
||||
+++ b/fs/dcache.c
|
||||
@@ -1425,6 +1425,7 @@ void d_walk(struct dentry *parent, void *data,
|
||||
seq = 1;
|
||||
goto again;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(d_walk);
|
||||
|
||||
struct check_mount {
|
||||
struct vfsmount *mnt;
|
||||
@@ -2970,6 +2971,7 @@ void d_exchange(struct dentry *dentry1, struct dentry *dentry2)
|
||||
|
||||
write_sequnlock(&rename_lock);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(d_exchange);
|
||||
|
||||
/**
|
||||
* d_ancestor - search for an ancestor
|
||||
diff --git a/fs/exec.c b/fs/exec.c
|
||||
index 29e865c59854..3ea36fa14622 100644
|
||||
--- a/fs/exec.c
|
||||
+++ b/fs/exec.c
|
||||
@@ -111,6 +111,7 @@ bool path_noexec(const struct path *path)
|
||||
return (path->mnt->mnt_flags & MNT_NOEXEC) ||
|
||||
(path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(path_noexec);
|
||||
|
||||
#ifdef CONFIG_USELIB
|
||||
/*
|
||||
diff --git a/fs/fcntl.c b/fs/fcntl.c
|
||||
index 02382fa9bd34..3418c60b9014 100644
|
||||
--- a/fs/fcntl.c
|
||||
+++ b/fs/fcntl.c
|
||||
@@ -86,6 +86,7 @@ int setfl(int fd, struct file *filp, unsigned long arg)
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(setfl);
|
||||
|
||||
static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
|
||||
int force)
|
||||
diff -Nurp a/fs/file_table.c b/fs/file_table.c
|
||||
--- a/fs/file_table.c 2022-03-20 22:14:17.000000000 +0200
|
||||
+++ b/fs/file_table.c 2022-04-08 20:24:23.624148779 +0300
|
||||
@@ -198,6 +198,7 @@ over:
|
||||
}
|
||||
return ERR_PTR(-ENFILE);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(alloc_empty_file);
|
||||
|
||||
/*
|
||||
* Variant of alloc_empty_file() that doesn't check and modify nr_files.
|
||||
diff --git a/fs/namespace.c b/fs/namespace.c
|
||||
index c45740054bc7..d3d750635610 100644
|
||||
--- a/fs/namespace.c
|
||||
+++ b/fs/namespace.c
|
||||
@@ -439,6 +439,7 @@ void __mnt_drop_write(struct vfsmount *mnt)
|
||||
mnt_dec_writers(real_mount(mnt));
|
||||
preempt_enable();
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(__mnt_drop_write);
|
||||
|
||||
/**
|
||||
* mnt_drop_write - give up write access to a mount
|
||||
@@ -813,6 +814,7 @@ int is_current_mnt_ns(struct vfsmount *mnt)
|
||||
{
|
||||
return check_mnt(real_mount(mnt));
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(is_current_mnt_ns);
|
||||
|
||||
/*
|
||||
* vfsmount lock must be held for write
|
||||
@@ -2011,6 +2013,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(iterate_mounts);
|
||||
|
||||
static void lock_mnt_tree(struct mount *mnt)
|
||||
{
|
||||
diff --git a/fs/notify/group.c b/fs/notify/group.c
|
||||
index fb89c351295d..460ad19c2570 100644
|
||||
--- a/fs/notify/group.c
|
||||
+++ b/fs/notify/group.c
|
||||
@@ -100,6 +100,7 @@ void fsnotify_get_group(struct fsnotify_group *group)
|
||||
{
|
||||
refcount_inc(&group->refcnt);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_get_group);
|
||||
|
||||
/*
|
||||
* Drop a reference to a group. Free it if it's through.
|
||||
diff --git a/fs/open.c b/fs/open.c
|
||||
index e0df1536eb69..81b2d7c83add 100644
|
||||
--- a/fs/open.c
|
||||
+++ b/fs/open.c
|
||||
@@ -65,6 +65,7 @@ int do_truncate(struct user_namespace *mnt_userns, struct dentry *dentry,
|
||||
inode_unlock(dentry->d_inode);
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_truncate);
|
||||
|
||||
long vfs_truncate(const struct path *path, loff_t length)
|
||||
{
|
||||
diff --git a/fs/read_write.c b/fs/read_write.c
|
||||
index af057c57bdc6..76017f8331fb 100644
|
||||
--- a/fs/read_write.c
|
||||
+++ b/fs/read_write.c
|
||||
@@ -492,6 +492,7 @@ ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
|
||||
inc_syscr(current);
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_read);
|
||||
|
||||
static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
|
||||
{
|
||||
@@ -602,6 +603,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_
|
||||
file_end_write(file);
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_write);
|
||||
|
||||
/* file_ppos returns &file->f_pos or NULL if file is stream */
|
||||
static inline loff_t *file_ppos(struct file *file)
|
||||
diff --git a/fs/splice.c b/fs/splice.c
|
||||
index 3e6ba363b777..7c1be373eb7c 100644
|
||||
--- a/fs/splice.c
|
||||
+++ b/fs/splice.c
|
||||
@@ -766,6 +766,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
||||
return warn_unsupported(out, "write");
|
||||
return out->f_op->splice_write(pipe, out, ppos, len, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_splice_from);
|
||||
|
||||
/*
|
||||
* Attempt to initiate a splice from a file to a pipe.
|
||||
@@ -795,6 +796,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
|
||||
return warn_unsupported(in, "read");
|
||||
return in->f_op->splice_read(in, ppos, pipe, len, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_splice_to);
|
||||
|
||||
/**
|
||||
* splice_direct_to_actor - splices data directly between two non-pipes
|
||||
diff --git a/fs/xattr.c b/fs/xattr.c
|
||||
index 5c8c5175b385..ff7e9ff774b7 100644
|
||||
--- a/fs/xattr.c
|
||||
+++ b/fs/xattr.c
|
||||
@@ -384,6 +384,7 @@ vfs_getxattr_alloc(struct user_namespace *mnt_userns, struct dentry *dentry,
|
||||
*xattr_value = value;
|
||||
return error;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_getxattr_alloc);
|
||||
|
||||
ssize_t
|
||||
__vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
|
||||
index ce380d0abdf0..409c7d1a6803 100644
|
||||
--- a/kernel/locking/lockdep.c
|
||||
+++ b/kernel/locking/lockdep.c
|
||||
@@ -208,6 +208,7 @@ inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock)
|
||||
*/
|
||||
return lock_classes + class_idx;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(lockdep_hlock_class);
|
||||
#define hlock_class(hlock) lockdep_hlock_class(hlock)
|
||||
|
||||
#ifdef CONFIG_LOCK_STAT
|
||||
diff --git a/kernel/task_work.c b/kernel/task_work.c
|
||||
index 1698fbe6f0e1..081b05acadf8 100644
|
||||
--- a/kernel/task_work.c
|
||||
+++ b/kernel/task_work.c
|
||||
@@ -167,3 +167,4 @@ void task_work_run(void)
|
||||
} while (work);
|
||||
}
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(task_work_run);
|
||||
diff --git a/security/security.c b/security/security.c
|
||||
index da631339e969..894203de3bcb 100644
|
||||
--- a/security/security.c
|
||||
+++ b/security/security.c
|
||||
@@ -1160,6 +1160,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry)
|
||||
return 0;
|
||||
return call_int_hook(path_rmdir, 0, dir, dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_rmdir);
|
||||
|
||||
int security_path_unlink(const struct path *dir, struct dentry *dentry)
|
||||
{
|
||||
@@ -1176,6 +1177,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry,
|
||||
return 0;
|
||||
return call_int_hook(path_symlink, 0, dir, dentry, old_name);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_symlink);
|
||||
|
||||
int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
|
||||
struct dentry *new_dentry)
|
||||
@@ -1184,6 +1186,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
|
||||
return 0;
|
||||
return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_link);
|
||||
|
||||
int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
|
||||
const struct path *new_dir, struct dentry *new_dentry,
|
||||
@@ -1211,6 +1214,7 @@ int security_path_truncate(const struct path *path)
|
||||
return 0;
|
||||
return call_int_hook(path_truncate, 0, path);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_truncate);
|
||||
|
||||
int security_path_chmod(const struct path *path, umode_t mode)
|
||||
{
|
||||
@@ -1218,6 +1222,7 @@ int security_path_chmod(const struct path *path, umode_t mode)
|
||||
return 0;
|
||||
return call_int_hook(path_chmod, 0, path, mode);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_chmod);
|
||||
|
||||
int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
|
||||
{
|
||||
@@ -1225,6 +1230,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
|
||||
return 0;
|
||||
return call_int_hook(path_chown, 0, path, uid, gid);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_chown);
|
||||
|
||||
int security_path_chroot(const struct path *path)
|
||||
{
|
||||
@@ -1325,6 +1331,7 @@ int security_inode_permission(struct inode *inode, int mask)
|
||||
return 0;
|
||||
return call_int_hook(inode_permission, 0, inode, mask);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_inode_permission);
|
||||
|
||||
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
@@ -1522,6 +1529,7 @@ int security_file_permission(struct file *file, int mask)
|
||||
|
||||
return fsnotify_perm(file, mask);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_file_permission);
|
||||
|
||||
int security_file_alloc(struct file *file)
|
||||
{
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,221 @@
|
||||
SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h
|
||||
index 166158b6e917..0e9606171432 100644
|
||||
--- a/include/linux/shmem_fs.h
|
||||
+++ b/include/linux/shmem_fs.h
|
||||
@@ -28,10 +28,13 @@ struct shmem_inode_info {
|
||||
};
|
||||
|
||||
struct shmem_sb_info {
|
||||
+ struct mutex idr_lock;
|
||||
+ bool idr_nouse;
|
||||
+ struct idr idr; /* manages inode-number */
|
||||
unsigned long max_blocks; /* How many blocks are allowed */
|
||||
struct percpu_counter used_blocks; /* How many are allocated */
|
||||
- unsigned long max_inodes; /* How many inodes are allowed */
|
||||
- unsigned long free_inodes; /* How many are left for allocation */
|
||||
+ int max_inodes; /* How many inodes are allowed */
|
||||
+ int free_inodes; /* How many are left for allocation */
|
||||
raw_spinlock_t stat_lock; /* Serialize shmem_sb_info changes */
|
||||
umode_t mode; /* Mount mode for root directory */
|
||||
unsigned char huge; /* Whether to try for hugepages */
|
||||
diff --git a/mm/shmem.c b/mm/shmem.c
|
||||
index 1609a8daba26..b3e5f52a5aa2 100644
|
||||
--- a/mm/shmem.c
|
||||
+++ b/mm/shmem.c
|
||||
@@ -108,7 +108,7 @@ struct shmem_falloc {
|
||||
|
||||
struct shmem_options {
|
||||
unsigned long long blocks;
|
||||
- unsigned long long inodes;
|
||||
+ int inodes;
|
||||
struct mempolicy *mpol;
|
||||
kuid_t uid;
|
||||
kgid_t gid;
|
||||
@@ -128,11 +128,14 @@ static unsigned long shmem_default_max_blocks(void)
|
||||
return totalram_pages() / 2;
|
||||
}
|
||||
|
||||
-static unsigned long shmem_default_max_inodes(void)
|
||||
+static int shmem_default_max_inodes(void)
|
||||
{
|
||||
unsigned long nr_pages = totalram_pages();
|
||||
+ unsigned long ul;
|
||||
|
||||
- return min(nr_pages - totalhigh_pages(), nr_pages / 2);
|
||||
+ ul = INT_MAX;
|
||||
+ ul = min3(ul, nr_pages - totalhigh_pages(), nr_pages / 2);
|
||||
+ return ul;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1165,6 +1168,11 @@ static void shmem_evict_inode(struct inode *inode)
|
||||
|
||||
simple_xattrs_free(&info->xattrs);
|
||||
WARN_ON(inode->i_blocks);
|
||||
+ if (!sbinfo->idr_nouse && inode->i_ino) {
|
||||
+ mutex_lock(&sbinfo->idr_lock);
|
||||
+ idr_remove(&sbinfo->idr, inode->i_ino);
|
||||
+ mutex_unlock(&sbinfo->idr_lock);
|
||||
+ }
|
||||
shmem_free_inode(inode->i_sb);
|
||||
clear_inode(inode);
|
||||
}
|
||||
@@ -2336,6 +2344,25 @@ static struct inode *shmem_get_inode(struct super_block *sb, const struct inode
|
||||
break;
|
||||
}
|
||||
|
||||
+ if (!sbinfo->idr_nouse) {
|
||||
+ /* inum 0 and 1 are unused */
|
||||
+ mutex_lock(&sbinfo->idr_lock);
|
||||
+ ino = idr_alloc(&sbinfo->idr, inode, 2, INT_MAX,
|
||||
+ GFP_NOFS);
|
||||
+ if (ino > 0) {
|
||||
+ inode->i_ino = ino;
|
||||
+ mutex_unlock(&sbinfo->idr_lock);
|
||||
+ __insert_inode_hash(inode, inode->i_ino);
|
||||
+ } else {
|
||||
+ inode->i_ino = 0;
|
||||
+ mutex_unlock(&sbinfo->idr_lock);
|
||||
+ iput(inode);
|
||||
+ /* shmem_free_inode() will be called */
|
||||
+ inode = NULL;
|
||||
+ }
|
||||
+ } else
|
||||
+ inode->i_ino = ino;
|
||||
+
|
||||
lockdep_annotate_inode_mutex_key(inode);
|
||||
} else
|
||||
shmem_free_inode(sb);
|
||||
@@ -3250,8 +3277,7 @@ static struct dentry *shmem_get_parent(struct dentry *child)
|
||||
static int shmem_match(struct inode *ino, void *vfh)
|
||||
{
|
||||
__u32 *fh = vfh;
|
||||
- __u64 inum = fh[2];
|
||||
- inum = (inum << 32) | fh[1];
|
||||
+ __u64 inum = fh[1];
|
||||
return ino->i_ino == inum && fh[0] == ino->i_generation;
|
||||
}
|
||||
|
||||
@@ -3271,14 +3297,11 @@ static struct dentry *shmem_fh_to_dentry(struct super_block *sb,
|
||||
struct dentry *dentry = NULL;
|
||||
u64 inum;
|
||||
|
||||
- if (fh_len < 3)
|
||||
+ if (fh_len < 2)
|
||||
return NULL;
|
||||
|
||||
- inum = fid->raw[2];
|
||||
- inum = (inum << 32) | fid->raw[1];
|
||||
-
|
||||
- inode = ilookup5(sb, (unsigned long)(inum + fid->raw[0]),
|
||||
- shmem_match, fid->raw);
|
||||
+ inum = fid->raw[1];
|
||||
+ inode = ilookup5(sb, inum, shmem_match, fid->raw);
|
||||
if (inode) {
|
||||
dentry = shmem_find_alias(inode);
|
||||
iput(inode);
|
||||
@@ -3290,30 +3313,15 @@ static struct dentry *shmem_fh_to_dentry(struct super_block *sb,
|
||||
static int shmem_encode_fh(struct inode *inode, __u32 *fh, int *len,
|
||||
struct inode *parent)
|
||||
{
|
||||
- if (*len < 3) {
|
||||
- *len = 3;
|
||||
+ if (*len < 2) {
|
||||
+ *len = 2;
|
||||
return FILEID_INVALID;
|
||||
}
|
||||
|
||||
- if (inode_unhashed(inode)) {
|
||||
- /* Unfortunately insert_inode_hash is not idempotent,
|
||||
- * so as we hash inodes here rather than at creation
|
||||
- * time, we need a lock to ensure we only try
|
||||
- * to do it once
|
||||
- */
|
||||
- static DEFINE_SPINLOCK(lock);
|
||||
- spin_lock(&lock);
|
||||
- if (inode_unhashed(inode))
|
||||
- __insert_inode_hash(inode,
|
||||
- inode->i_ino + inode->i_generation);
|
||||
- spin_unlock(&lock);
|
||||
- }
|
||||
-
|
||||
fh[0] = inode->i_generation;
|
||||
fh[1] = inode->i_ino;
|
||||
- fh[2] = ((__u64)inode->i_ino) >> 32;
|
||||
|
||||
- *len = 3;
|
||||
+ *len = 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -3392,7 +3400,7 @@ static int shmem_parse_one(struct fs_context *fc, struct fs_parameter *param)
|
||||
break;
|
||||
case Opt_nr_inodes:
|
||||
ctx->inodes = memparse(param->string, &rest);
|
||||
- if (*rest)
|
||||
+ if (*rest || ctx->inodes < 2)
|
||||
goto bad_value;
|
||||
ctx->seen |= SHMEM_SEEN_INODES;
|
||||
break;
|
||||
@@ -3502,7 +3510,7 @@ static int shmem_reconfigure(struct fs_context *fc)
|
||||
{
|
||||
struct shmem_options *ctx = fc->fs_private;
|
||||
struct shmem_sb_info *sbinfo = SHMEM_SB(fc->root->d_sb);
|
||||
- unsigned long inodes;
|
||||
+ int inodes;
|
||||
struct mempolicy *mpol = NULL;
|
||||
const char *err;
|
||||
|
||||
@@ -3571,7 +3579,7 @@ static int shmem_show_options(struct seq_file *seq, struct dentry *root)
|
||||
seq_printf(seq, ",size=%luk",
|
||||
sbinfo->max_blocks << (PAGE_SHIFT - 10));
|
||||
if (sbinfo->max_inodes != shmem_default_max_inodes())
|
||||
- seq_printf(seq, ",nr_inodes=%lu", sbinfo->max_inodes);
|
||||
+ seq_printf(seq, ",nr_inodes=%d", sbinfo->max_inodes);
|
||||
if (sbinfo->mode != (0777 | S_ISVTX))
|
||||
seq_printf(seq, ",mode=%03ho", sbinfo->mode);
|
||||
if (!uid_eq(sbinfo->uid, GLOBAL_ROOT_UID))
|
||||
@@ -3618,6 +3626,8 @@ static void shmem_put_super(struct super_block *sb)
|
||||
{
|
||||
struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
|
||||
|
||||
+ if (!sbinfo->idr_nouse)
|
||||
+ idr_destroy(&sbinfo->idr);
|
||||
free_percpu(sbinfo->ino_batch);
|
||||
percpu_counter_destroy(&sbinfo->used_blocks);
|
||||
mpol_put(sbinfo->mpol);
|
||||
@@ -3660,6 +3670,8 @@ static int shmem_fill_super(struct super_block *sb, struct fs_context *fc)
|
||||
#else
|
||||
sb->s_flags |= SB_NOUSER;
|
||||
#endif
|
||||
+ mutex_init(&sbinfo->idr_lock);
|
||||
+ idr_init(&sbinfo->idr);
|
||||
sbinfo->max_blocks = ctx->blocks;
|
||||
sbinfo->free_inodes = sbinfo->max_inodes = ctx->inodes;
|
||||
if (sb->s_flags & SB_KERNMOUNT) {
|
||||
@@ -3777,6 +3789,15 @@ static void shmem_destroy_inodecache(void)
|
||||
kmem_cache_destroy(shmem_inode_cachep);
|
||||
}
|
||||
|
||||
+static __init void shmem_no_idr(struct super_block *sb)
|
||||
+{
|
||||
+ struct shmem_sb_info *sbinfo;
|
||||
+
|
||||
+ sbinfo = SHMEM_SB(sb);
|
||||
+ sbinfo->idr_nouse = true;
|
||||
+ idr_destroy(&sbinfo->idr);
|
||||
+}
|
||||
+
|
||||
const struct address_space_operations shmem_aops = {
|
||||
.writepage = shmem_writepage,
|
||||
.set_page_dirty = __set_page_dirty_no_writeback,
|
||||
@@ -3918,6 +3939,7 @@ int __init shmem_init(void)
|
||||
pr_err("Could not kern_mount tmpfs\n");
|
||||
goto out1;
|
||||
}
|
||||
+ shmem_no_idr(shm_mnt->mnt_sb);
|
||||
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
if (has_transparent_hugepage() && shmem_huge > SHMEM_HUGE_DENY)
|
||||
@@ -0,0 +1,24 @@
|
||||
SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
diff --git a/fs/inode.c b/fs/inode.c
|
||||
index 9abc88d7959c..82b13641423c 100644
|
||||
--- a/fs/inode.c
|
||||
+++ b/fs/inode.c
|
||||
@@ -904,6 +904,8 @@ unsigned int get_next_ino(void)
|
||||
unsigned int *p = &get_cpu_var(last_ino);
|
||||
unsigned int res = *p;
|
||||
|
||||
+start:
|
||||
+
|
||||
#ifdef CONFIG_SMP
|
||||
if (unlikely((res & (LAST_INO_BATCH-1)) == 0)) {
|
||||
static atomic_t shared_last_ino;
|
||||
@@ -916,7 +918,7 @@ unsigned int get_next_ino(void)
|
||||
res++;
|
||||
/* get_next_ino should not provide a 0 inode number */
|
||||
if (unlikely(!res))
|
||||
- res++;
|
||||
+ goto start;
|
||||
*p = res;
|
||||
put_cpu_var(last_ino);
|
||||
return res;
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -16,38 +16,42 @@ Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
arch/x86/Kconfig | 2 ++
|
||||
4 files changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
--- linux-5.8/arch/arm64/Kconfig.orig 2020-08-05 16:08:02.466740952 +0200
|
||||
+++ linux-5.8/arch/arm64/Kconfig 2020-08-05 16:08:13.368741815 +0200
|
||||
@@ -1910,3 +1910,5 @@ source "arch/arm64/kvm/Kconfig"
|
||||
if CRYPTO
|
||||
source "arch/arm64/crypto/Kconfig"
|
||||
endif
|
||||
+
|
||||
+source "3rdparty/Kconfig"
|
||||
--- linux-5.8/Makefile.orig 2020-08-05 16:09:32.265748061 +0200
|
||||
+++ linux-5.8/Makefile 2020-08-05 16:10:02.553750458 +0200
|
||||
@@ -651,7 +651,7 @@ endif
|
||||
ifeq ($(KBUILD_EXTMOD),)
|
||||
# Objects we will link into vmlinux / subdirs we need to visit
|
||||
core-y := init/ usr/
|
||||
-drivers-y := drivers/ sound/
|
||||
+drivers-y := drivers/ sound/ 3rdparty/
|
||||
drivers-$(CONFIG_SAMPLES) += samples/
|
||||
drivers-y += net/ virt/
|
||||
libs-y := lib/
|
||||
--- linux-5.8/arch/x86/Kconfig.orig 2020-08-05 16:10:48.805754119 +0200
|
||||
+++ linux-5.8/arch/x86/Kconfig 2020-08-05 16:11:04.602755370 +0200
|
||||
@@ -2913,3 +2913,5 @@ source "drivers/firmware/Kconfig"
|
||||
source "arch/x86/kvm/Kconfig"
|
||||
|
||||
source "arch/x86/Kconfig.assembler"
|
||||
+
|
||||
+source "3rdparty/Kconfig"
|
||||
--- linux-5.8/arch/arm/Kconfig.orig 2020-08-05 16:12:08.314760413 +0200
|
||||
+++ linux-5.8/arch/arm/Kconfig 2020-08-05 16:12:22.786761559 +0200
|
||||
@@ -2064,3 +2064,5 @@ source "arch/arm/crypto/Kconfig"
|
||||
diff -Nurp linux-5.12/arch/arm/Kconfig linux-5.12-3rd/arch/arm/Kconfig
|
||||
--- linux-5.12/arch/arm/Kconfig 2021-04-25 23:49:08.000000000 +0300
|
||||
+++ linux-5.12-3rd/arch/arm/Kconfig 2021-04-26 18:10:06.513775304 +0300
|
||||
@@ -2016,3 +2016,5 @@ source "arch/arm/crypto/Kconfig"
|
||||
endif
|
||||
|
||||
source "arch/arm/Kconfig.assembler"
|
||||
+
|
||||
+source "3rdparty/Kconfig"
|
||||
diff -Nurp linux-5.12/arch/arm64/Kconfig linux-5.12-3rd/arch/arm64/Kconfig
|
||||
--- linux-5.12/arch/arm64/Kconfig 2021-04-25 23:49:08.000000000 +0300
|
||||
+++ linux-5.12-3rd/arch/arm64/Kconfig 2021-04-26 18:10:06.512775257 +0300
|
||||
@@ -1959,3 +1959,5 @@ source "arch/arm64/kvm/Kconfig"
|
||||
if CRYPTO
|
||||
source "arch/arm64/crypto/Kconfig"
|
||||
endif
|
||||
+
|
||||
+source "3rdparty/Kconfig"
|
||||
diff -Nurp linux-5.12/arch/x86/Kconfig linux-5.12-3rd/arch/x86/Kconfig
|
||||
--- linux-5.12/arch/x86/Kconfig 2021-04-25 23:49:08.000000000 +0300
|
||||
+++ linux-5.12-3rd/arch/x86/Kconfig 2021-04-26 18:10:06.512775257 +0300
|
||||
@@ -2909,3 +2909,5 @@ source "drivers/firmware/Kconfig"
|
||||
source "arch/x86/kvm/Kconfig"
|
||||
|
||||
source "arch/x86/Kconfig.assembler"
|
||||
+
|
||||
+source "3rdparty/Kconfig"
|
||||
diff -Nurp linux-5.14/Makefile linux-5.14-3rd/Makefile
|
||||
--- linux-5.14/Makefile
|
||||
+++ linux-5.14-3rd/Makefile
|
||||
@@ -670,7 +670,7 @@ endif
|
||||
ifeq ($(KBUILD_EXTMOD),)
|
||||
# Objects we will link into vmlinux / subdirs we need to visit
|
||||
core-y := init/ usr/ arch/$(SRCARCH)/
|
||||
-drivers-y := drivers/ sound/
|
||||
+drivers-y := drivers/ sound/ 3rdparty/
|
||||
drivers-$(CONFIG_SAMPLES) += samples/
|
||||
drivers-$(CONFIG_NET) += net/
|
||||
drivers-y += virt/
|
||||
|
||||
@@ -9,17 +9,6 @@ diff -up ./3rdparty/rtl8723de/Kconfig.tv ./3rdparty/rtl8723de/Kconfig
|
||||
+ help
|
||||
Help message of RTL8723DE
|
||||
|
||||
diff -up ./3rdparty/rtl8812au/Kconfig.tv ./3rdparty/rtl8812au/Kconfig
|
||||
--- ./3rdparty/rtl8812au/Kconfig.tv 2020-10-13 21:02:36.391016614 +0200
|
||||
+++ ./3rdparty/rtl8812au/Kconfig 2020-10-13 20:59:07.421226249 +0200
|
||||
@@ -1,6 +1,6 @@
|
||||
config RTL8812AU
|
||||
tristate "Realtek 8812au USB WiFi"
|
||||
depends on USB
|
||||
- ---help---
|
||||
+ help
|
||||
Help message of 8812au
|
||||
|
||||
diff -up ./3rdparty/rtl8821ce/Kconfig.tv ./3rdparty/rtl8821ce/Kconfig
|
||||
--- ./3rdparty/rtl8821ce/Kconfig.tv 2020-10-13 16:09:11.157856145 +0200
|
||||
+++ ./3rdparty/rtl8821ce/Kconfig 2020-10-13 20:58:17.242118685 +0200
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
diff -urp linux/3rdparty/rtl8812au.orig/os_dep/linux/recv_linux.c linux/3rdparty/rtl8812au/os_dep/linux/recv_linux.c
|
||||
--- linux/3rdparty/rtl8812au.orig/os_dep/linux/recv_linux.c 2021-04-26 18:35:37.411027594 +0300
|
||||
+++ linux/3rdparty/rtl8812au/os_dep/linux/recv_linux.c 2021-04-26 18:53:13.502814526 +0300
|
||||
@@ -353,7 +353,7 @@ static int napi_recv(_adapter *padapter,
|
||||
|
||||
rx_ok = _FALSE;
|
||||
|
||||
-#ifdef CONFIG_RTW_GRO
|
||||
+#if defined(CONFIG_RTW_GRO) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 12, 0)
|
||||
if (pregistrypriv->en_gro) {
|
||||
if (rtw_napi_gro_receive(&padapter->napi, pskb) != GRO_DROP)
|
||||
rx_ok = _TRUE;
|
||||
@@ -0,0 +1,66 @@
|
||||
|
||||
From:
|
||||
https://github.com/aircrack-ng/rtl8812au/commit/47a38b7c736dd9e9baac9eb07a6dceb83429fb49
|
||||
|
||||
diff -Nurp linux-5.15/3rdparty/rtl8812au.orig/core/rtw_br_ext.c linux-5.15/3rdparty/rtl8812au/core/rtw_br_ext.c
|
||||
--- linux-5.15/3rdparty/rtl8812au.orig/core/rtw_br_ext.c 2021-11-08 23:40:48.236272741 +0200
|
||||
+++ linux-5.15/3rdparty/rtl8812au/core/rtw_br_ext.c 2021-11-08 23:49:12.118046953 +0200
|
||||
@@ -17,7 +17,10 @@
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/if_arp.h>
|
||||
#include <net/ip.h>
|
||||
+ #include <linux/version.h>
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 15, 0)
|
||||
#include <net/ipx.h>
|
||||
+#endif
|
||||
#include <linux/atalk.h>
|
||||
#include <linux/udp.h>
|
||||
#include <linux/if_pppox.h>
|
||||
@@ -169,6 +172,7 @@ static __inline__ void __nat25_generate_
|
||||
}
|
||||
|
||||
|
||||
+#ifdef _NET_INET_IPX_H_
|
||||
static __inline__ void __nat25_generate_ipx_network_addr_with_node(unsigned char *networkAddr,
|
||||
unsigned int *ipxNetAddr, unsigned char *ipxNodeAddr)
|
||||
{
|
||||
@@ -189,6 +193,7 @@ static __inline__ void __nat25_generate_
|
||||
memcpy(networkAddr + 1, (unsigned char *)ipxNetAddr, 4);
|
||||
memcpy(networkAddr + 5, (unsigned char *)ipxSocketAddr, 2);
|
||||
}
|
||||
+#endif
|
||||
|
||||
|
||||
static __inline__ void __nat25_generate_apple_network_addr(unsigned char *networkAddr,
|
||||
@@ -330,6 +335,7 @@ static __inline__ int __nat25_network_ha
|
||||
x = networkAddr[7] ^ networkAddr[8] ^ networkAddr[9] ^ networkAddr[10];
|
||||
|
||||
return x & (NAT25_HASH_SIZE - 1);
|
||||
+#ifdef _NET_INET_IPX_H_
|
||||
} else if (networkAddr[0] == NAT25_IPX) {
|
||||
unsigned long x;
|
||||
|
||||
@@ -337,6 +343,7 @@ static __inline__ int __nat25_network_ha
|
||||
networkAddr[6] ^ networkAddr[7] ^ networkAddr[8] ^ networkAddr[9] ^ networkAddr[10];
|
||||
|
||||
return x & (NAT25_HASH_SIZE - 1);
|
||||
+#endif
|
||||
} else if (networkAddr[0] == NAT25_APPLE) {
|
||||
unsigned long x;
|
||||
|
||||
@@ -889,6 +896,7 @@ int nat25_db_handle(_adapter *priv, stru
|
||||
}
|
||||
}
|
||||
|
||||
+#ifdef _NET_INET_IPX_H_
|
||||
/*---------------------------------------------------*/
|
||||
/* Handle IPX and Apple Talk frame */
|
||||
/*---------------------------------------------------*/
|
||||
@@ -1109,6 +1117,7 @@ int nat25_db_handle(_adapter *priv, stru
|
||||
|
||||
return -1;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
/* Handle PPPoE frame */
|
||||
@@ -4,15 +4,15 @@ Adjust driver bits so it keeps the name of the replaced driver
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
---
|
||||
3rdparty/rtl8812au/Kconfig | 6 +++---
|
||||
3rdparty/rtl8812au/Kconfig | 7 +++----
|
||||
3rdparty/rtl8812au/Makefile | 8 ++++----
|
||||
3rdparty/rtl8812au/hal/hal_com.c | 2 +-
|
||||
3rdparty/rtl8812au/os_dep/linux/ioctl_cfg80211.c | 2 +-
|
||||
4 files changed, 9 insertions(+), 9 deletions(-)
|
||||
4 files changed, 9 insertions(+), 10 deletions(-)
|
||||
|
||||
diff -Nurp linux-5.5/3rdparty/rtl8812au.orig/hal/hal_com.c linux-5.5/3rdparty/rtl8812au/hal/hal_com.c
|
||||
--- linux-5.5/3rdparty/rtl8812au.orig/hal/hal_com.c 2020-03-09 01:46:04.750166543 +0200
|
||||
+++ linux-5.5/3rdparty/rtl8812au/hal/hal_com.c 2020-03-11 18:23:33.839805026 +0200
|
||||
diff -Nurp linux-5.11/3rdparty/rtl8812au.orig/hal/hal_com.c linux-5.11/3rdparty/rtl8812au/hal/hal_com.c
|
||||
--- linux-5.11/3rdparty/rtl8812au.orig/hal/hal_com.c 2021-03-07 18:43:20.313672664 +0200
|
||||
+++ linux-5.11/3rdparty/rtl8812au/hal/hal_com.c 2021-03-07 18:43:51.392141299 +0200
|
||||
@@ -12879,7 +12879,7 @@ bypass_hw_pg:
|
||||
_rtw_memset(hal_data->EEPROMMACAddr, 0, ETH_ALEN);
|
||||
ret = _FAIL;
|
||||
@@ -22,25 +22,25 @@ diff -Nurp linux-5.5/3rdparty/rtl8812au.orig/hal/hal_com.c linux-5.5/3rdparty/rt
|
||||
return ret;
|
||||
}
|
||||
|
||||
diff -Nurp linux-5.5/3rdparty/rtl8812au.orig/Kconfig linux-5.5/3rdparty/rtl8812au/Kconfig
|
||||
--- linux-5.5/3rdparty/rtl8812au.orig/Kconfig 2020-03-09 01:46:04.682163430 +0200
|
||||
+++ linux-5.5/3rdparty/rtl8812au/Kconfig 2020-03-11 18:21:33.457357175 +0200
|
||||
@@ -1,6 +1,6 @@
|
||||
diff -Nurp linux-5.11/3rdparty/rtl8812au.orig/Kconfig linux-5.11/3rdparty/rtl8812au/Kconfig
|
||||
--- linux-5.11/3rdparty/rtl8812au.orig/Kconfig 2021-03-07 18:43:20.369675309 +0200
|
||||
+++ linux-5.11/3rdparty/rtl8812au/Kconfig 2021-03-07 18:45:22.910465892 +0200
|
||||
@@ -1,6 +1,5 @@
|
||||
-config 88XXAU
|
||||
- tristate "Realtek 88XXau USB WiFi"
|
||||
+config RTL8812AU
|
||||
+ tristate "Realtek 8812au USB WiFi"
|
||||
depends on USB
|
||||
---help---
|
||||
help
|
||||
- Help message of 88XXau
|
||||
-
|
||||
+ Help message of 8812au
|
||||
diff -Nurp linux-5.11/3rdparty/rtl8812au.orig/Makefile linux-5.11/3rdparty/rtl8812au/Makefile
|
||||
--- linux-5.11/3rdparty/rtl8812au.orig/Makefile 2021-03-07 18:43:20.370675357 +0200
|
||||
+++ linux-5.11/3rdparty/rtl8812au/Makefile 2021-03-07 18:43:51.401141725 +0200
|
||||
@@ -180,9 +180,9 @@ endif
|
||||
|
||||
diff -Nurp linux-5.5/3rdparty/rtl8812au.orig/Makefile linux-5.5/3rdparty/rtl8812au/Makefile
|
||||
--- linux-5.5/3rdparty/rtl8812au.orig/Makefile 2020-03-09 01:46:04.682163430 +0200
|
||||
+++ linux-5.5/3rdparty/rtl8812au/Makefile 2020-03-11 18:22:16.769317077 +0200
|
||||
@@ -179,9 +179,9 @@ endif
|
||||
|
||||
ifeq ($(CONFIG_RTL8812A)_$(CONFIG_RTL8821A)_$(CONFIG_RTL8814A), y_y_y)
|
||||
ifeq ($(CONFIG_RTL8812A)_$(CONFIG_RTL8821A)_$(CONFIG_RTL8814A), y_y_n)
|
||||
|
||||
-EXTRA_CFLAGS += -DDRV_NAME=\"rtl88XXau\"
|
||||
+EXTRA_CFLAGS += -DDRV_NAME=\"rtl8812au\"
|
||||
@@ -50,7 +50,7 @@ diff -Nurp linux-5.5/3rdparty/rtl8812au.orig/Makefile linux-5.5/3rdparty/rtl8812
|
||||
endif
|
||||
else
|
||||
EXTRA_CFLAGS += -DDRV_NAME=\"rtl8812au\"
|
||||
@@ -2233,11 +2233,11 @@ $(MODULE_NAME)-y += $(_PLATFORM_FILES)
|
||||
@@ -2232,11 +2232,11 @@ $(MODULE_NAME)-y += $(_PLATFORM_FILES)
|
||||
|
||||
$(MODULE_NAME)-$(CONFIG_MP_INCLUDED) += core/rtw_mp.o
|
||||
|
||||
@@ -64,10 +64,10 @@ diff -Nurp linux-5.5/3rdparty/rtl8812au.orig/Makefile linux-5.5/3rdparty/rtl8812
|
||||
|
||||
all: modules
|
||||
|
||||
diff -Nurp linux-5.5/3rdparty/rtl8812au.orig/os_dep/linux/ioctl_cfg80211.c linux-5.5/3rdparty/rtl8812au/os_dep/linux/ioctl_cfg80211.c
|
||||
--- linux-5.5/3rdparty/rtl8812au.orig/os_dep/linux/ioctl_cfg80211.c 2020-03-09 01:46:04.798168741 +0200
|
||||
+++ linux-5.5/3rdparty/rtl8812au/os_dep/linux/ioctl_cfg80211.c 2020-03-11 18:24:09.196405329 +0200
|
||||
@@ -2639,7 +2639,7 @@ void rtw_cfg80211_unlink_bss(_adapter *p
|
||||
diff -Nurp linux-5.11/3rdparty/rtl8812au.orig/os_dep/linux/ioctl_cfg80211.c linux-5.11/3rdparty/rtl8812au/os_dep/linux/ioctl_cfg80211.c
|
||||
--- linux-5.11/3rdparty/rtl8812au.orig/os_dep/linux/ioctl_cfg80211.c 2021-03-07 18:43:20.371675404 +0200
|
||||
+++ linux-5.11/3rdparty/rtl8812au/os_dep/linux/ioctl_cfg80211.c 2021-03-07 18:43:51.402141772 +0200
|
||||
@@ -2646,7 +2646,7 @@ void rtw_cfg80211_unlink_bss(_adapter *p
|
||||
#endif
|
||||
|
||||
if (!wiphy) {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
||||
diff -urp linux/3rdparty/rtl8821ce.orig/os_dep/linux/recv_linux.c linux/3rdparty/rtl8821ce/os_dep/linux/recv_linux.c
|
||||
--- linux/3rdparty/rtl8821ce.orig/os_dep/linux/recv_linux.c 2021-04-26 18:35:37.690041052 +0300
|
||||
+++ linux/3rdparty/rtl8821ce/os_dep/linux/recv_linux.c 2021-04-26 18:53:23.534295732 +0300
|
||||
@@ -353,7 +353,7 @@ static int napi_recv(_adapter *padapter,
|
||||
|
||||
rx_ok = _FALSE;
|
||||
|
||||
-#ifdef CONFIG_RTW_GRO
|
||||
+#if defined(CONFIG_RTW_GRO) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 12, 0)
|
||||
if (pregistrypriv->en_gro) {
|
||||
if (rtw_napi_gro_receive(&padapter->napi, pskb) != GRO_DROP)
|
||||
rx_ok = _TRUE;
|
||||
@@ -0,0 +1,66 @@
|
||||
|
||||
From:
|
||||
https://github.com/aircrack-ng/rtl8812au/commit/47a38b7c736dd9e9baac9eb07a6dceb83429fb49
|
||||
|
||||
diff -Nurp linux-5.15/3rdparty/rtl8821ce.orig/core/rtw_br_ext.c linux-5.15/3rdparty/rtl8821ce/core/rtw_br_ext.c
|
||||
--- linux-5.15/3rdparty/rtl8821ce.orig/core/rtw_br_ext.c 2021-11-08 23:40:48.236272741 +0200
|
||||
+++ linux-5.15/3rdparty/rtl8821ce/core/rtw_br_ext.c 2021-11-08 23:49:12.118046953 +0200
|
||||
@@ -17,7 +17,10 @@
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/if_arp.h>
|
||||
#include <net/ip.h>
|
||||
+ #include <linux/version.h>
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 15, 0)
|
||||
#include <net/ipx.h>
|
||||
+#endif
|
||||
#include <linux/atalk.h>
|
||||
#include <linux/udp.h>
|
||||
#include <linux/if_pppox.h>
|
||||
@@ -169,6 +172,7 @@ static __inline__ void __nat25_generate_
|
||||
}
|
||||
|
||||
|
||||
+#ifdef _NET_INET_IPX_H_
|
||||
static __inline__ void __nat25_generate_ipx_network_addr_with_node(unsigned char *networkAddr,
|
||||
unsigned int *ipxNetAddr, unsigned char *ipxNodeAddr)
|
||||
{
|
||||
@@ -189,6 +193,7 @@ static __inline__ void __nat25_generate_
|
||||
memcpy(networkAddr + 1, (unsigned char *)ipxNetAddr, 4);
|
||||
memcpy(networkAddr + 5, (unsigned char *)ipxSocketAddr, 2);
|
||||
}
|
||||
+#endif
|
||||
|
||||
|
||||
static __inline__ void __nat25_generate_apple_network_addr(unsigned char *networkAddr,
|
||||
@@ -330,6 +335,7 @@ static __inline__ int __nat25_network_ha
|
||||
x = networkAddr[7] ^ networkAddr[8] ^ networkAddr[9] ^ networkAddr[10];
|
||||
|
||||
return x & (NAT25_HASH_SIZE - 1);
|
||||
+#ifdef _NET_INET_IPX_H_
|
||||
} else if (networkAddr[0] == NAT25_IPX) {
|
||||
unsigned long x;
|
||||
|
||||
@@ -337,6 +343,7 @@ static __inline__ int __nat25_network_ha
|
||||
networkAddr[6] ^ networkAddr[7] ^ networkAddr[8] ^ networkAddr[9] ^ networkAddr[10];
|
||||
|
||||
return x & (NAT25_HASH_SIZE - 1);
|
||||
+#endif
|
||||
} else if (networkAddr[0] == NAT25_APPLE) {
|
||||
unsigned long x;
|
||||
|
||||
@@ -889,6 +896,7 @@ int nat25_db_handle(_adapter *priv, stru
|
||||
}
|
||||
}
|
||||
|
||||
+#ifdef _NET_INET_IPX_H_
|
||||
/*---------------------------------------------------*/
|
||||
/* Handle IPX and Apple Talk frame */
|
||||
/*---------------------------------------------------*/
|
||||
@@ -1109,6 +1117,7 @@ int nat25_db_handle(_adapter *priv, stru
|
||||
|
||||
return -1;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
/* Handle PPPoE frame */
|
||||
@@ -0,0 +1,260 @@
|
||||
|
||||
fs/dcache.c | 2 ++
|
||||
fs/exec.c | 1 +
|
||||
fs/fcntl.c | 1 +
|
||||
fs/file_table.c | 2 ++
|
||||
fs/namespace.c | 3 +++
|
||||
fs/notify/group.c | 1 +
|
||||
fs/open.c | 1 +
|
||||
fs/read_write.c | 2 ++
|
||||
fs/splice.c | 2 ++
|
||||
fs/xattr.c | 1 +
|
||||
kernel/locking/lockdep.c | 1 +
|
||||
kernel/task_work.c | 1 +
|
||||
security/security.c | 8 ++++++++
|
||||
13 files changed, 26 insertions(+)
|
||||
|
||||
diff -Nurp linux-5.15.37-aufs/fs/dcache.c linux-5.15.37-aufs-mod/fs/dcache.c
|
||||
--- linux-5.15.37-aufs/fs/dcache.c 2022-04-08 20:22:30.617616719 +0300
|
||||
+++ linux-5.15.37-aufs-mod/fs/dcache.c 2022-04-08 20:24:23.624148779 +0300
|
||||
@@ -1450,6 +1450,7 @@ rename_retry:
|
||||
seq = 1;
|
||||
goto again;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(d_walk);
|
||||
|
||||
struct check_mount {
|
||||
struct vfsmount *mnt;
|
||||
@@ -2995,6 +2996,7 @@ void d_exchange(struct dentry *dentry1,
|
||||
|
||||
write_sequnlock(&rename_lock);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(d_exchange);
|
||||
|
||||
/**
|
||||
* d_ancestor - search for an ancestor
|
||||
diff -Nurp linux-5.15.37-aufs/fs/exec.c linux-5.15.37-aufs-mod/fs/exec.c
|
||||
--- linux-5.15.37-aufs/fs/exec.c 2022-04-08 20:07:30.690498863 +0300
|
||||
+++ linux-5.15.37-aufs-mod/fs/exec.c 2022-04-08 20:24:23.624148779 +0300
|
||||
@@ -112,6 +112,7 @@ bool path_noexec(const struct path *path
|
||||
return (path->mnt->mnt_flags & MNT_NOEXEC) ||
|
||||
(path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(path_noexec);
|
||||
|
||||
#ifdef CONFIG_USELIB
|
||||
/*
|
||||
diff -Nurp linux-5.15.37-aufs/fs/fcntl.c linux-5.15.37-aufs-mod/fs/fcntl.c
|
||||
--- linux-5.15.37-aufs/fs/fcntl.c 2022-04-08 20:22:30.617616719 +0300
|
||||
+++ linux-5.15.37-aufs-mod/fs/fcntl.c 2022-04-08 20:24:23.624148779 +0300
|
||||
@@ -86,6 +86,7 @@ int setfl(int fd, struct file *filp, uns
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(setfl);
|
||||
|
||||
static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
|
||||
int force)
|
||||
diff -Nurp linux-5.15.37-aufs/fs/file_table.c linux-5.15.37-aufs-mod/fs/file_table.c
|
||||
--- linux-5.15.37-aufs/fs/file_table.c 2022-03-20 22:14:17.000000000 +0200
|
||||
+++ linux-5.15.37-aufs-mod/fs/file_table.c 2022-04-08 20:24:23.624148779 +0300
|
||||
@@ -198,6 +198,7 @@ over:
|
||||
}
|
||||
return ERR_PTR(-ENFILE);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(alloc_empty_file);
|
||||
|
||||
/*
|
||||
* Variant of alloc_empty_file() that doesn't check and modify nr_files.
|
||||
@@ -412,6 +413,7 @@ void __fput_sync(struct file *file)
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(fput);
|
||||
+EXPORT_SYMBOL_GPL(__fput_sync);
|
||||
|
||||
void __init files_init(void)
|
||||
{
|
||||
diff -Nurp linux-5.15.37-aufs/fs/namespace.c linux-5.15.37-aufs-mod/fs/namespace.c
|
||||
--- linux-5.15.37-aufs/fs/namespace.c 2022-04-08 20:22:30.617616719 +0300
|
||||
+++ linux-5.15.37-aufs-mod/fs/namespace.c 2022-04-08 20:24:23.624148779 +0300
|
||||
@@ -440,6 +440,7 @@ void __mnt_drop_write(struct vfsmount *m
|
||||
mnt_dec_writers(real_mount(mnt));
|
||||
preempt_enable();
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(__mnt_drop_write);
|
||||
|
||||
/**
|
||||
* mnt_drop_write - give up write access to a mount
|
||||
@@ -844,6 +845,7 @@ int is_current_mnt_ns(struct vfsmount *m
|
||||
{
|
||||
return check_mnt(real_mount(mnt));
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(is_current_mnt_ns);
|
||||
|
||||
/*
|
||||
* vfsmount lock must be held for write
|
||||
@@ -2047,6 +2049,7 @@ int iterate_mounts(int (*f)(struct vfsmo
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(iterate_mounts);
|
||||
|
||||
static void lock_mnt_tree(struct mount *mnt)
|
||||
{
|
||||
diff -Nurp linux-5.15.37-aufs/fs/notify/group.c linux-5.15.37-aufs-mod/fs/notify/group.c
|
||||
--- linux-5.15.37-aufs/fs/notify/group.c 2022-03-20 22:14:17.000000000 +0200
|
||||
+++ linux-5.15.37-aufs-mod/fs/notify/group.c 2022-04-08 20:24:23.624148779 +0300
|
||||
@@ -100,6 +100,7 @@ void fsnotify_get_group(struct fsnotify_
|
||||
{
|
||||
refcount_inc(&group->refcnt);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_get_group);
|
||||
|
||||
/*
|
||||
* Drop a reference to a group. Free it if it's through.
|
||||
diff -Nurp linux-5.15.37-aufs/fs/open.c linux-5.15.37-aufs-mod/fs/open.c
|
||||
--- linux-5.15.37-aufs/fs/open.c 2022-03-20 22:14:17.000000000 +0200
|
||||
+++ linux-5.15.37-aufs-mod/fs/open.c 2022-04-08 20:24:23.625148828 +0300
|
||||
@@ -66,6 +66,7 @@ int do_truncate(struct user_namespace *m
|
||||
inode_unlock(dentry->d_inode);
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_truncate);
|
||||
|
||||
long vfs_truncate(const struct path *path, loff_t length)
|
||||
{
|
||||
diff -Nurp linux-5.15.37-aufs/fs/read_write.c linux-5.15.37-aufs-mod/fs/read_write.c
|
||||
--- linux-5.15.37-aufs/fs/read_write.c 2022-03-20 22:14:17.000000000 +0200
|
||||
+++ linux-5.15.37-aufs-mod/fs/read_write.c 2022-04-08 20:24:23.625148828 +0300
|
||||
@@ -488,6 +488,7 @@ ssize_t vfs_read(struct file *file, char
|
||||
inc_syscr(current);
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_read);
|
||||
|
||||
static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
|
||||
{
|
||||
@@ -598,6 +599,7 @@ ssize_t vfs_write(struct file *file, con
|
||||
file_end_write(file);
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_write);
|
||||
|
||||
/* file_ppos returns &file->f_pos or NULL if file is stream */
|
||||
static inline loff_t *file_ppos(struct file *file)
|
||||
diff -Nurp linux-5.15.37-aufs/fs/splice.c linux-5.15.37-aufs-mod/fs/splice.c
|
||||
--- linux-5.15.37-aufs/fs/splice.c 2022-04-08 20:22:30.617616719 +0300
|
||||
+++ linux-5.15.37-aufs-mod/fs/splice.c 2022-04-08 20:24:23.625148828 +0300
|
||||
@@ -766,6 +766,7 @@ long do_splice_from(struct pipe_inode_in
|
||||
return warn_unsupported(out, "write");
|
||||
return out->f_op->splice_write(pipe, out, ppos, len, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_splice_from);
|
||||
|
||||
/*
|
||||
* Attempt to initiate a splice from a file to a pipe.
|
||||
@@ -795,6 +796,7 @@ long do_splice_to(struct file *in, loff_
|
||||
return warn_unsupported(in, "read");
|
||||
return in->f_op->splice_read(in, ppos, pipe, len, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_splice_to);
|
||||
|
||||
/**
|
||||
* splice_direct_to_actor - splices data directly between two non-pipes
|
||||
diff -Nurp linux-5.15.37-aufs/fs/xattr.c linux-5.15.37-aufs-mod/fs/xattr.c
|
||||
--- linux-5.15.37-aufs/fs/xattr.c 2022-03-20 22:14:17.000000000 +0200
|
||||
+++ linux-5.15.37-aufs-mod/fs/xattr.c 2022-04-08 20:24:23.625148828 +0300
|
||||
@@ -384,6 +384,7 @@ vfs_getxattr_alloc(struct user_namespace
|
||||
*xattr_value = value;
|
||||
return error;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_getxattr_alloc);
|
||||
|
||||
ssize_t
|
||||
__vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
diff -Nurp linux-5.15.37-aufs/kernel/locking/lockdep.c linux-5.15.37-aufs-mod/kernel/locking/lockdep.c
|
||||
--- linux-5.15.37-aufs/kernel/locking/lockdep.c 2022-04-08 20:22:30.619616817 +0300
|
||||
+++ linux-5.15.37-aufs-mod/kernel/locking/lockdep.c 2022-04-08 20:24:23.625148828 +0300
|
||||
@@ -208,6 +208,7 @@ inline struct lock_class *lockdep_hlock_
|
||||
*/
|
||||
return lock_classes + class_idx;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(lockdep_hlock_class);
|
||||
#define hlock_class(hlock) lockdep_hlock_class(hlock)
|
||||
|
||||
#ifdef CONFIG_LOCK_STAT
|
||||
diff -Nurp linux-5.15.37-aufs/kernel/task_work.c linux-5.15.37-aufs-mod/kernel/task_work.c
|
||||
--- linux-5.15.37-aufs/kernel/task_work.c 2022-03-20 22:14:17.000000000 +0200
|
||||
+++ linux-5.15.37-aufs-mod/kernel/task_work.c 2022-04-08 20:24:23.625148828 +0300
|
||||
@@ -167,3 +167,4 @@ void task_work_run(void)
|
||||
} while (work);
|
||||
}
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(task_work_run);
|
||||
diff -Nurp linux-5.15.37-aufs/security/security.c linux-5.15.37-aufs-mod/security/security.c
|
||||
--- linux-5.15.37-aufs/security/security.c 2022-04-08 20:07:30.718500239 +0300
|
||||
+++ linux-5.15.37-aufs-mod/security/security.c 2022-04-08 20:24:23.626148877 +0300
|
||||
@@ -1164,6 +1164,7 @@ int security_path_rmdir(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_rmdir, 0, dir, dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_rmdir);
|
||||
|
||||
int security_path_unlink(const struct path *dir, struct dentry *dentry)
|
||||
{
|
||||
@@ -1180,6 +1181,7 @@ int security_path_symlink(const struct p
|
||||
return 0;
|
||||
return call_int_hook(path_symlink, 0, dir, dentry, old_name);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_symlink);
|
||||
|
||||
int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
|
||||
struct dentry *new_dentry)
|
||||
@@ -1188,6 +1190,7 @@ int security_path_link(struct dentry *ol
|
||||
return 0;
|
||||
return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_link);
|
||||
|
||||
int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
|
||||
const struct path *new_dir, struct dentry *new_dentry,
|
||||
@@ -1215,6 +1218,7 @@ int security_path_truncate(const struct
|
||||
return 0;
|
||||
return call_int_hook(path_truncate, 0, path);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_truncate);
|
||||
|
||||
int security_path_chmod(const struct path *path, umode_t mode)
|
||||
{
|
||||
@@ -1222,6 +1226,7 @@ int security_path_chmod(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_chmod, 0, path, mode);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_chmod);
|
||||
|
||||
int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
|
||||
{
|
||||
@@ -1229,6 +1234,7 @@ int security_path_chown(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_chown, 0, path, uid, gid);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_chown);
|
||||
|
||||
int security_path_chroot(const struct path *path)
|
||||
{
|
||||
@@ -1329,6 +1335,7 @@ int security_inode_permission(struct ino
|
||||
return 0;
|
||||
return call_int_hook(inode_permission, 0, inode, mask);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_inode_permission);
|
||||
|
||||
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
@@ -1526,6 +1533,7 @@ int security_file_permission(struct file
|
||||
|
||||
return fsnotify_perm(file, mask);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_file_permission);
|
||||
|
||||
int security_file_alloc(struct file *file)
|
||||
{
|
||||
@@ -0,0 +1,24 @@
|
||||
|
||||
Allow aufs to be built as module.
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
--- a/fs/aufs/Kconfig
|
||||
+++ b/fs/aufs/Kconfig
|
||||
@@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
config AUFS_FS
|
||||
- bool "Aufs (Advanced multi layered unification filesystem) support"
|
||||
+ tristate "Aufs (Advanced multi layered unification filesystem) support"
|
||||
help
|
||||
Aufs is a stackable unification filesystem such as Unionfs,
|
||||
which unifies several directories and provides a merged single
|
||||
@@ -72,7 +72,7 @@ endchoice
|
||||
|
||||
config AUFS_EXPORT
|
||||
bool "NFS-exportable aufs"
|
||||
- depends on EXPORTFS = y
|
||||
+ depends on EXPORTFS
|
||||
help
|
||||
If you want to export your mounted aufs via NFS, then enable this
|
||||
option. There are several requirements for this configuration.
|
||||
File diff suppressed because it is too large
Load Diff
+36
@@ -0,0 +1,36 @@
|
||||
From 435664ed44c4a17e6715d007061e2b155d3535c8 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Fri, 1 Oct 2021 13:38:15 +1000
|
||||
Subject: procfs: do not list TID 0 in /proc/<pid>/task
|
||||
|
||||
If a task exits concurrently, task_pid_nr_ns may return 0.
|
||||
|
||||
Link: https://lkml.kernel.org/r/8735pn5dx7.fsf@oldenburg.str.redhat.com
|
||||
Signed-off-by: Florian Weimer <fweimer@redhat.com>
|
||||
Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
|
||||
Cc: Kees Cook <keescook@chromium.org>
|
||||
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
|
||||
Cc: Alexey Dobriyan <adobriyan@gmail.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
|
||||
---
|
||||
fs/proc/base.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/fs/proc/base.c b/fs/proc/base.c
|
||||
index 533d5836eb9a4..54f29399088f0 100644
|
||||
--- a/fs/proc/base.c
|
||||
+++ b/fs/proc/base.c
|
||||
@@ -3800,6 +3800,9 @@ static int proc_task_readdir(struct file *file, struct dir_context *ctx)
|
||||
char name[10 + 1];
|
||||
unsigned int len;
|
||||
tid = task_pid_nr_ns(task, ns);
|
||||
+ if (!tid)
|
||||
+ /* The task has just exited. */
|
||||
+ continue;
|
||||
len = snprintf(name, sizeof(name), "%u", tid);
|
||||
if (!proc_fill_cache(file, ctx, name, len,
|
||||
proc_task_instantiate, task, NULL)) {
|
||||
--
|
||||
cgit 1.2.3-1.el7
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,30 @@
|
||||
|
||||
sparse_keymap_free() is now obsolete.
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
--- linux/drivers/platform/x86/shuttle-wmi.c.orig 2017-10-15 00:39:53.041395980 +0300
|
||||
+++ linux/drivers/platform/x86/shuttle-wmi.c 2017-10-15 01:05:37.008662881 +0300
|
||||
@@ -763,14 +763,9 @@ static int shuttle_wmi_input_init(struct
|
||||
goto err_free_dev;
|
||||
|
||||
rc = input_register_device(input);
|
||||
- if (rc)
|
||||
- goto err_free_keymap;
|
||||
|
||||
priv->inputdev = input;
|
||||
return 0;
|
||||
-
|
||||
-err_free_keymap:
|
||||
- sparse_keymap_free(input);
|
||||
err_free_dev:
|
||||
input_free_device(input);
|
||||
return rc;
|
||||
@@ -780,7 +775,6 @@ static void shuttle_wmi_input_remove(str
|
||||
{
|
||||
struct input_dev *input = priv->inputdev;
|
||||
|
||||
- sparse_keymap_free(input);
|
||||
input_unregister_device(input);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
--- linux/drivers/platform/x86/shuttle-wmi.c.orig 2015-09-30 00:51:13.000000000 +0300
|
||||
+++ linux/drivers/platform/x86/shuttle-wmi.c 2015-09-30 02:04:20.808458393 +0300
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <linux/input/sparse-keymap.h>
|
||||
#include <linux/backlight.h>
|
||||
#include <linux/fb.h>
|
||||
+#include <acpi/video.h>
|
||||
|
||||
MODULE_AUTHOR("Herton Ronaldo Krzesinski");
|
||||
MODULE_DESCRIPTION("Shuttle WMI Extras Driver");
|
||||
@@ -1161,7 +1162,7 @@ static int shuttle_wmi_probe(struct plat
|
||||
goto err_notify;
|
||||
}
|
||||
|
||||
- if (!acpi_video_backlight_support()) {
|
||||
+ if (acpi_video_get_backlight_type() == acpi_backlight_vendor) {
|
||||
rc = shuttle_wmi_backlight_init(priv);
|
||||
if (rc)
|
||||
goto err_backlight;
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
--- ./drivers/platform/x86/shuttle-wmi.c.orig 2013-01-16 18:13:57.000000000 +0200
|
||||
+++ ./drivers/platform/x86/shuttle-wmi.c 2013-01-16 18:41:13.676433242 +0200
|
||||
@@ -294,7 +294,7 @@ static struct dmi_system_id shuttle_dmi_
|
||||
{}
|
||||
};
|
||||
|
||||
-static struct dmi_system_id __devinitdata shuttle_quirk_bl_dmi_ids[] = {
|
||||
+static struct dmi_system_id shuttle_quirk_bl_dmi_ids[] = {
|
||||
{
|
||||
.ident = "Positivo M13",
|
||||
.matches = {
|
||||
@@ -1105,7 +1105,7 @@ fn_init_err:
|
||||
return rc;
|
||||
}
|
||||
|
||||
-static int __devinit shuttle_wmi_probe(struct platform_device *pdev)
|
||||
+static int shuttle_wmi_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct shuttle_wmi *priv;
|
||||
int rc, i;
|
||||
@@ -1181,7 +1181,7 @@ err_debugfs:
|
||||
return rc;
|
||||
}
|
||||
|
||||
-static int __devexit shuttle_wmi_remove(struct platform_device *pdev)
|
||||
+static int shuttle_wmi_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct shuttle_wmi *priv = platform_get_drvdata(pdev);
|
||||
|
||||
@@ -1211,7 +1211,7 @@ static struct platform_driver shuttle_wm
|
||||
.pm = &shuttle_wmi_pm_ops,
|
||||
},
|
||||
.probe = shuttle_wmi_probe,
|
||||
- .remove = __devexit_p(shuttle_wmi_remove),
|
||||
+ .remove = shuttle_wmi_remove,
|
||||
};
|
||||
|
||||
static struct platform_device *shuttle_wmi_device;
|
||||
@@ -0,0 +1,35 @@
|
||||
|
||||
pr_warning is now pr_warn
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
|
||||
--- ./drivers/platform/x86/shuttle-wmi.c.orig 2020-02-03 17:22:16.374611323 +0200
|
||||
+++ ./drivers/platform/x86/shuttle-wmi.c 2020-02-03 18:19:03.663898669 +0200
|
||||
@@ -379,7 +379,7 @@ static int wmi_setget_mtd(struct shuttle
|
||||
kfree(obj);
|
||||
} else {
|
||||
if (res) {
|
||||
- pr_warning("No result from WMI method (%s)", __func__);
|
||||
+ pr_warn("No result from WMI method (%s)", __func__);
|
||||
res = NULL;
|
||||
}
|
||||
}
|
||||
@@ -628,7 +628,7 @@ static void shuttle_wmi_notify(u32 value
|
||||
|
||||
status = wmi_get_event_data(value, &res);
|
||||
if (status != AE_OK) {
|
||||
- pr_warning("unable to retrieve wmi event status"
|
||||
+ pr_warn("unable to retrieve wmi event status"
|
||||
" (error=0x%x)\n", status);
|
||||
return;
|
||||
}
|
||||
@@ -678,7 +678,7 @@ static void shuttle_wmi_notify(u32 value
|
||||
break;
|
||||
case 0xec: /* Lost event */
|
||||
if (printk_ratelimit())
|
||||
- pr_warning("lost event because of buggy BIOS");
|
||||
+ pr_warn("lost event because of buggy BIOS");
|
||||
break;
|
||||
default:
|
||||
pr_info("unknown wmi notification type (0x%02x)\n", type);
|
||||
+39
-13
@@ -12,7 +12,7 @@
|
||||
<IsA>app:gui</IsA>
|
||||
<Summary>Performance analyser tool that makes full use of the Linux performance counter subsystem</Summary>
|
||||
<Description>perf is a new tool which is used to optimize, validate and measure applications, workloads or the full system through the Linux performance counter subsystem.</Description>
|
||||
<Archive sha1sum="baa841f624f6cfdafe01026963dcd32b334a3752" type="targz">https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.gz</Archive>
|
||||
<Archive sha1sum="01961045127c21f8a9dbaa9e7705dbb9e4cffbaa" type="targz">https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.15.tar.gz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency>libunwind-devel</Dependency>
|
||||
<Dependency>audit-devel</Dependency>
|
||||
@@ -42,46 +42,65 @@
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<!-- Linux patches -->
|
||||
<Patch level="1" compressionType="xz">patches/linux/patch-5.10.45.xz</Patch>
|
||||
<Patch level="1" compressionType="xz">patches/linux/patch-5.15.41.xz</Patch>
|
||||
|
||||
<!-- aufs5 patchec -->
|
||||
<Patch level="1">patches/aufs5/aufs5.15.36-20220509.patch</Patch>
|
||||
<Patch level="1">patches/aufs5/aufs5-base.patch</Patch>
|
||||
<Patch level="1">patches/aufs5/aufs5-kbuild.patch</Patch>
|
||||
<Patch level="1">patches/aufs5/aufs5-loopback.patch</Patch>
|
||||
<Patch level="1">patches/aufs5/aufs5-mmap.patch</Patch>
|
||||
<Patch level="1">patches/aufs5/tmpfs-idr.patch</Patch>
|
||||
<Patch level="1">patches/aufs5/vfs-ino.patch</Patch>
|
||||
<Patch level="1">patches/aufs5/aufs5-standalone.patch</Patch>
|
||||
|
||||
<!-- Mageia Linux patches-->
|
||||
<Patch level="1">patches/mageia/fs-aufs5.10.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs5.10-symbol-exports.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs5.10-tristate.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-procfs-do-not-list-TID-0-in-proc-pid-task.patch</Patch>
|
||||
|
||||
<Patch level="1">patches/mageia/CVE-2019-12379.patch</Patch>
|
||||
<Patch level="1">patches/mageia/CVE-2020-16119-DCCP-CCID-structure-use-after-free.patch</Patch>
|
||||
|
||||
|
||||
<Patch level="1">patches/mageia/platform-x86-add-shuttle-wmi-driver.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-drop-devinit-exit.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-4.2-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-4.13-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-kernel-5.5.patch</Patch>
|
||||
|
||||
<Patch level="1">patches/mageia/3rd-3rdparty-tree.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-3rdparty-merge.patch</Patch>
|
||||
|
||||
|
||||
<Patch level="1">patches/mageia/3rd-ndiswrapper-1.63.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-ndiswrapper-Kconfig.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-ndiswrapper-Makefile-build-fix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-niswrapper-Kconfig-Makefile.patch</Patch>
|
||||
|
||||
|
||||
<Patch level="1">patches/mageia/3rd-rtl8812au.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8812au-Kconfig-Makefile.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8812au-rename.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8812au-kernel-5.10.patch</Patch>
|
||||
|
||||
<Patch level="1">patches/mageia/3rd-rtl8812au-kernel-5.12.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8812au-kernel-5.15.patch</Patch>
|
||||
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723de.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723de-Kconfig-Makefile.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723de-fix-redefine.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723de-nodebug.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8223de-kernel-5.6.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723de-add-kernel-5.8-support.patch</Patch>
|
||||
|
||||
|
||||
<Patch level="1">patches/mageia/3rd-viahss-0.92.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-viahss-config.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-viahss-module-license.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-viahss-2.6.35-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-viahss-3.0-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-viahss-Kconfig-Makefile.patch</Patch>
|
||||
|
||||
|
||||
<Patch level="1">patches/mageia/3rd-rtl8821ce.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8821ce-Kconfig-Makefile.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8821ce-5.8-fix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8821ce-kernel-5.10.patch</Patch>
|
||||
|
||||
<Patch level="1">patches/mageia/3rd-rtl8821ce-kernel-5.12.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8821ce-kernel-5.15.patch</Patch>
|
||||
|
||||
<Patch level="1">patches/mageia/3rd-fix-kconfig.patch</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
@@ -116,6 +135,13 @@
|
||||
</Files>
|
||||
</Package>
|
||||
<History>
|
||||
<Update release="27">
|
||||
<Date>2022-05-21</Date>
|
||||
<Version>5.15.41</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="26">
|
||||
<Date>2021-06-19</Date>
|
||||
<Version>5.10.45</Version>
|
||||
|
||||
Reference in New Issue
Block a user