-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: J. R. Okajima <[email protected]>
- Loading branch information
Showing
9 changed files
with
1,488 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,262 @@ | ||
SPDX-License-Identifier: GPL-2.0 | ||
aufs5.10.82 base patch | ||
|
||
diff --git a/MAINTAINERS b/MAINTAINERS | ||
index 4fef10dd29753..e013880d69f33 100644 | ||
--- a/MAINTAINERS | ||
+++ b/MAINTAINERS | ||
@@ -3009,6 +3009,19 @@ F: include/linux/audit.h | ||
F: include/uapi/linux/audit.h | ||
F: kernel/audit* | ||
|
||
+AUFS (advanced multi layered unification filesystem) FILESYSTEM | ||
+M: "J. R. Okajima" <[email protected]> | ||
+L: [email protected] (members only) | ||
+L: [email protected] | ||
+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 Sandonis <[email protected]> | ||
S: Maintained | ||
diff --git a/drivers/block/loop.c b/drivers/block/loop.c | ||
index ee537a9f1d1a4..d09b1ef4a2b56 100644 | ||
--- a/drivers/block/loop.c | ||
+++ b/drivers/block/loop.c | ||
@@ -752,6 +752,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 ea0485861d937..ddca6240e0db4 100644 | ||
--- a/fs/dcache.c | ||
+++ b/fs/dcache.c | ||
@@ -1285,7 +1285,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 71b43538fa44c..7cd57fb4e8646 100644 | ||
--- a/fs/fcntl.c | ||
+++ b/fs/fcntl.c | ||
@@ -32,7 +32,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; | ||
@@ -63,6 +63,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 046b084136c51..a256f0f9c6c09 100644 | ||
--- a/fs/namespace.c | ||
+++ b/fs/namespace.c | ||
@@ -792,6 +792,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 866d5c2367b23..55b5356262085 100644 | ||
--- a/fs/splice.c | ||
+++ b/fs/splice.c | ||
@@ -756,8 +756,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"); | ||
@@ -767,9 +767,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) | ||
{ | ||
int ret; | ||
|
||
diff --git a/fs/sync.c b/fs/sync.c | ||
index 1373a610dc784..b7b5a0a0df6ff 100644 | ||
--- a/fs/sync.c | ||
+++ b/fs/sync.c | ||
@@ -28,7 +28,7 @@ | ||
* wait == 1 case since in that case write_inode() functions do | ||
* sync_dirty_buffer() and thus effectively write one block at a time. | ||
*/ | ||
-static int __sync_filesystem(struct super_block *sb, int wait) | ||
+int __sync_filesystem(struct super_block *sb, int wait) | ||
{ | ||
if (wait) | ||
sync_inodes_sb(sb); | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h | ||
index 42d246a942283..2cc1a02e444c4 100644 | ||
--- a/include/linux/fs.h | ||
+++ b/include/linux/fs.h | ||
@@ -1332,6 +1332,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); | ||
@@ -1843,6 +1844,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); | ||
@@ -2330,6 +2332,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; | ||
@@ -2566,6 +2569,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 20b6797babe2c..7888c04c3ffaf 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. | ||
* | ||
@@ -384,6 +386,7 @@ static inline void lockdep_unregister_key(struct lock_class_key *key) | ||
|
||
#define lockdep_depth(tsk) (0) | ||
|
||
+#define lockdep_is_held(lock) (1) | ||
#define lockdep_is_held_type(l, r) (1) | ||
|
||
#define lockdep_assert_held(l) do { (void)(l); } while (0) | ||
diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h | ||
index 8f882f5881e87..6b9808f098435 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 a55179fd60fc3..8e21c53cf8831 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 1f6a2f1226fa9..4550f7a021178 100644 | ||
--- a/kernel/locking/lockdep.c | ||
+++ b/kernel/locking/lockdep.c | ||
@@ -188,7 +188,7 @@ static | ||
struct lock_class lock_classes[MAX_LOCKDEP_KEYS]; | ||
static 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; | ||
|
||
@@ -209,6 +209,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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
SPDX-License-Identifier: GPL-2.0 | ||
aufs5.10.82 kbuild patch | ||
|
||
diff --git a/fs/Kconfig b/fs/Kconfig | ||
index da524c4d7b7e0..50ab89368c2b5 100644 | ||
--- a/fs/Kconfig | ||
+++ b/fs/Kconfig | ||
@@ -288,6 +288,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 999d1a23f036c..0cd76857ca764 100644 | ||
--- a/fs/Makefile | ||
+++ b/fs/Makefile | ||
@@ -136,3 +136,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/ |
Oops, something went wrong.