Commit 0d0b7ef4 authored by J. R. Okajima's avatar J. R. Okajima
Browse files

Merge branch 'aufs5.0/30stdalone' into aufs5.1/30stdalone

parents e37a6b3f 18798024
......@@ -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
unnecessary until aufs produces a message like "you may want to try
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
Modifies a system global kernel internal function get_next_ino() in
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);
static const loff_t au_loff_max = LLONG_MAX;
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 *copy_src);
struct au_xi_new {
......
......@@ -40,7 +40,7 @@ void au_warn_loopback(struct super_block *h_sb);
int au_loopback_init(void);
void au_loopback_fin(void);
#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,
struct dentry *h_adding)
......
......@@ -918,7 +918,7 @@ static int au_opts_parse_xino(struct super_block *sb, struct au_opt_xino *xino,
int err;
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);
if (IS_ERR(file))
goto out;
......
......@@ -160,22 +160,28 @@ static void au_xino_unlock_dir(struct au_xino_lock_dir *ldir)
/*
* 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 dentry *h_parent, *d;
struct inode *h_dir, *inode;
int err;
static DEFINE_MUTEX(mtx);
/*
* at mount-time, and the xino file is the default path,
* 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.
*/
if (!wbrtop)
mutex_lock(&mtx);
file = vfsub_filp_open(fpath, O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE
/* | __FMODE_NONOTIFY */,
0666);
if (IS_ERR(file)) {
if (!wbrtop)
mutex_unlock(&mtx);
if (!silent)
pr_err("open %s(%ld)\n", fpath, PTR_ERR(file));
return file;
......@@ -185,6 +191,8 @@ struct file *au_xino_create(struct super_block *sb, char *fpath, int silent)
err = 0;
d = file->f_path.dentry;
h_parent = au_dget_parent_lock(d, AuLsc_I_PARENT);
if (!wbrtop)
mutex_unlock(&mtx);
/* mnt_want_write() is unnecessary here */
h_dir = d_inode(h_parent);
inode = file_inode(file);
......@@ -1667,11 +1675,12 @@ struct file *au_xino_def(struct super_block *sb)
if (!IS_ERR(p)) {
strcat(p, "/" AUFS_XINO_FNAME);
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);
} 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))
goto out;
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