Commit 6e23cf0d authored by J. R. Okajima's avatar J. R. Okajima
Browse files

Merge branch 'aufs5.1/30stdalone' into aufs5.x-rcN/30stdalone

parents 10ba7e13 42461c58
...@@ -249,6 +249,13 @@ optional. When you meet some problems, they will help you. ...@@ -249,6 +249,13 @@ optional. When you meet some problems, they will help you.
Supports a nested loopback mount in a branch-fs. This patch is Supports a nested loopback mount in a branch-fs. This patch is
unnecessary until aufs produces a message like "you may want to try unnecessary until aufs produces a message like "you may want to try
another patch for loopback file". another patch for loopback file".
- proc_mounts.patch
When there are many mountpoints and many mount(2)/umount(2) are
running, then /proc/mounts may not show the all mountpoints. This
patch makes /proc/mounts always show the full mountpoints list.
If you don't want to apply this patch and meet such problem, then you
need to increase the value of 'ProcMounts_Times' make-variable in
aufs-util.git as a second best solution.
- vfs-ino.patch - vfs-ino.patch
Modifies a system global kernel internal function get_next_ino() in Modifies a system global kernel internal function get_next_ino() in
order to stop assigning 0 for an inode-number. Not directly related to order to stop assigning 0 for an inode-number. Not directly related to
......
...@@ -225,7 +225,8 @@ int au_br_stfs(struct au_branch *br, struct aufs_stfs *stfs); ...@@ -225,7 +225,8 @@ int au_br_stfs(struct au_branch *br, struct aufs_stfs *stfs);
static const loff_t au_loff_max = LLONG_MAX; static const loff_t au_loff_max = LLONG_MAX;
aufs_bindex_t au_xi_root(struct super_block *sb, struct dentry *dentry); aufs_bindex_t au_xi_root(struct super_block *sb, struct dentry *dentry);
struct file *au_xino_create(struct super_block *sb, char *fpath, int silent); struct file *au_xino_create(struct super_block *sb, char *fpath, int silent,
int wbrtop);
struct file *au_xino_create2(struct super_block *sb, struct path *base, struct file *au_xino_create2(struct super_block *sb, struct path *base,
struct file *copy_src); struct file *copy_src);
struct au_xi_new { struct au_xi_new {
......
...@@ -40,7 +40,7 @@ void au_warn_loopback(struct super_block *h_sb); ...@@ -40,7 +40,7 @@ void au_warn_loopback(struct super_block *h_sb);
int au_loopback_init(void); int au_loopback_init(void);
void au_loopback_fin(void); void au_loopback_fin(void);
#else #else
AuStub(struct file *, loop_backing_file, return NULL) AuStub(struct file *, loop_backing_file, return NULL, struct super_block *sb)
AuStubInt0(au_test_loopback_overlap, struct super_block *sb, AuStubInt0(au_test_loopback_overlap, struct super_block *sb,
struct dentry *h_adding) struct dentry *h_adding)
......
...@@ -918,7 +918,7 @@ static int au_opts_parse_xino(struct super_block *sb, struct au_opt_xino *xino, ...@@ -918,7 +918,7 @@ static int au_opts_parse_xino(struct super_block *sb, struct au_opt_xino *xino,
int err; int err;
struct file *file; struct file *file;
file = au_xino_create(sb, args[0].from, /*silent*/0); file = au_xino_create(sb, args[0].from, /*silent*/0, /*wbrtop*/0);
err = PTR_ERR(file); err = PTR_ERR(file);
if (IS_ERR(file)) if (IS_ERR(file))
goto out; goto out;
......
...@@ -160,22 +160,28 @@ static void au_xino_unlock_dir(struct au_xino_lock_dir *ldir) ...@@ -160,22 +160,28 @@ static void au_xino_unlock_dir(struct au_xino_lock_dir *ldir)
/* /*
* create and set a new xino file * create and set a new xino file
*/ */
struct file *au_xino_create(struct super_block *sb, char *fpath, int silent) struct file *au_xino_create(struct super_block *sb, char *fpath, int silent,
int wbrtop)
{ {
struct file *file; struct file *file;
struct dentry *h_parent, *d; struct dentry *h_parent, *d;
struct inode *h_dir, *inode; struct inode *h_dir, *inode;
int err; int err;
static DEFINE_MUTEX(mtx);
/* /*
* at mount-time, and the xino file is the default path, * at mount-time, and the xino file is the default path,
* hnotify is disabled so we have no notify events to ignore. * hnotify is disabled so we have no notify events to ignore.
* when a user specified the xino, we cannot get au_hdir to be ignored. * when a user specified the xino, we cannot get au_hdir to be ignored.
*/ */
if (!wbrtop)
mutex_lock(&mtx);
file = vfsub_filp_open(fpath, O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE file = vfsub_filp_open(fpath, O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE
/* | __FMODE_NONOTIFY */, /* | __FMODE_NONOTIFY */,
0666); 0666);
if (IS_ERR(file)) { if (IS_ERR(file)) {
if (!wbrtop)
mutex_unlock(&mtx);
if (!silent) if (!silent)
pr_err("open %s(%ld)\n", fpath, PTR_ERR(file)); pr_err("open %s(%ld)\n", fpath, PTR_ERR(file));
return file; return file;
...@@ -185,6 +191,8 @@ struct file *au_xino_create(struct super_block *sb, char *fpath, int silent) ...@@ -185,6 +191,8 @@ struct file *au_xino_create(struct super_block *sb, char *fpath, int silent)
err = 0; err = 0;
d = file->f_path.dentry; d = file->f_path.dentry;
h_parent = au_dget_parent_lock(d, AuLsc_I_PARENT); h_parent = au_dget_parent_lock(d, AuLsc_I_PARENT);
if (!wbrtop)
mutex_unlock(&mtx);
/* mnt_want_write() is unnecessary here */ /* mnt_want_write() is unnecessary here */
h_dir = d_inode(h_parent); h_dir = d_inode(h_parent);
inode = file_inode(file); inode = file_inode(file);
...@@ -1667,11 +1675,12 @@ struct file *au_xino_def(struct super_block *sb) ...@@ -1667,11 +1675,12 @@ struct file *au_xino_def(struct super_block *sb)
if (!IS_ERR(p)) { if (!IS_ERR(p)) {
strcat(p, "/" AUFS_XINO_FNAME); strcat(p, "/" AUFS_XINO_FNAME);
AuDbg("%s\n", p); AuDbg("%s\n", p);
file = au_xino_create(sb, p, /*silent*/0); file = au_xino_create(sb, p, /*silent*/0, /*wbrtop*/1);
} }
free_page((unsigned long)page); free_page((unsigned long)page);
} else { } else {
file = au_xino_create(sb, AUFS_XINO_DEFPATH, /*silent*/0); file = au_xino_create(sb, AUFS_XINO_DEFPATH, /*silent*/0,
/*wbrtop*/0);
if (IS_ERR(file)) if (IS_ERR(file))
goto out; goto out;
h_sb = file->f_path.dentry->d_sb; h_sb = file->f_path.dentry->d_sb;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment