Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Aufs5 Standalone
Commits
8fef72dc
Commit
8fef72dc
authored
May 28, 2019
by
J. R. Okajima
Browse files
Merge branch 'aufs5.x-rcN/30stdalone' into aufs5.x-rcN/39public
parents
51a0d3a9
274a824c
Changes
9
Hide whitespace changes
Inline
Side-by-side
Documentation/filesystems/aufs/README
View file @
8fef72dc
...
...
@@ -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
...
...
fs/aufs/branch.h
View file @
8fef72dc
...
...
@@ -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
{
...
...
fs/aufs/hfsnotify.c
View file @
8fef72dc
...
...
@@ -162,13 +162,12 @@ static void au_hfsn_free_group(struct fsnotify_group *group)
static
int
au_hfsn_handle_event
(
struct
fsnotify_group
*
group
,
struct
inode
*
inode
,
u32
mask
,
const
void
*
data
,
int
data_type
,
const
unsigned
cha
r
*
file_name
,
u32
cookie
,
const
struct
qst
r
*
file_name
,
u32
cookie
,
struct
fsnotify_iter_info
*
iter_info
)
{
int
err
;
struct
au_hnotify
*
hnotify
;
struct
inode
*
h_dir
,
*
h_inode
;
struct
qstr
h_child_qstr
=
QSTR_INIT
(
file_name
,
strlen
(
file_name
));
struct
fsnotify_mark
*
inode_mark
;
AuDebugOn
(
data_type
!=
FSNOTIFY_EVENT_INODE
);
...
...
@@ -196,7 +195,7 @@ static int au_hfsn_handle_event(struct fsnotify_group *group,
inode_mark
=
fsnotify_iter_inode_mark
(
iter_info
);
AuDebugOn
(
!
inode_mark
);
hnotify
=
container_of
(
inode_mark
,
struct
au_hnotify
,
hn_mark
);
err
=
au_hnotify
(
h_dir
,
hnotify
,
mask
,
&
h_child_qstr
,
h_inode
);
err
=
au_hnotify
(
h_dir
,
hnotify
,
mask
,
file_name
,
h_inode
);
out:
return
err
;
...
...
fs/aufs/hnotify.c
View file @
8fef72dc
...
...
@@ -548,7 +548,7 @@ out:
/* ---------------------------------------------------------------------- */
int
au_hnotify
(
struct
inode
*
h_dir
,
struct
au_hnotify
*
hnotify
,
u32
mask
,
struct
qstr
*
h_child_qstr
,
struct
inode
*
h_child_inode
)
const
struct
qstr
*
h_child_qstr
,
struct
inode
*
h_child_inode
)
{
int
err
,
len
;
unsigned
int
flags
[
AuHnLast
],
f
;
...
...
fs/aufs/inode.h
View file @
8fef72dc
...
...
@@ -613,7 +613,7 @@ void au_hn_free(struct au_hinode *hinode);
void
au_hn_ctl
(
struct
au_hinode
*
hinode
,
int
do_set
);
void
au_hn_reset
(
struct
inode
*
inode
,
unsigned
int
flags
);
int
au_hnotify
(
struct
inode
*
h_dir
,
struct
au_hnotify
*
hnotify
,
u32
mask
,
struct
qstr
*
h_child_qstr
,
struct
inode
*
h_child_inode
);
const
struct
qstr
*
h_child_qstr
,
struct
inode
*
h_child_inode
);
int
au_hnotify_reset_br
(
unsigned
int
udba
,
struct
au_branch
*
br
,
int
perm
);
int
au_hnotify_init_br
(
struct
au_branch
*
br
,
int
perm
);
void
au_hnotify_fin_br
(
struct
au_branch
*
br
);
...
...
fs/aufs/loop.h
View file @
8fef72dc
...
...
@@ -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
)
...
...
fs/aufs/opts.c
View file @
8fef72dc
...
...
@@ -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
;
...
...
fs/aufs/super.c
View file @
8fef72dc
...
...
@@ -44,18 +44,15 @@ static struct inode *aufs_alloc_inode(struct super_block *sb __maybe_unused)
return
NULL
;
}
static
void
aufs_destroy_inode_cb
(
struct
rcu_head
*
head
)
{
struct
inode
*
inode
=
container_of
(
head
,
struct
inode
,
i_rcu
);
au_cache_free_icntnr
(
container_of
(
inode
,
struct
au_icntnr
,
vfs_inode
));
}
static
void
aufs_destroy_inode
(
struct
inode
*
inode
)
{
if
(
!
au_is_bad_inode
(
inode
))
au_iinfo_fin
(
inode
);
call_rcu
(
&
inode
->
i_rcu
,
aufs_destroy_inode_cb
);
}
static
void
aufs_free_inode
(
struct
inode
*
inode
)
{
au_cache_free_icntnr
(
container_of
(
inode
,
struct
au_icntnr
,
vfs_inode
));
}
struct
inode
*
au_iget_locked
(
struct
super_block
*
sb
,
ino_t
ino
)
...
...
@@ -853,6 +850,7 @@ out:
static
const
struct
super_operations
aufs_sop
=
{
.
alloc_inode
=
aufs_alloc_inode
,
.
destroy_inode
=
aufs_destroy_inode
,
.
free_inode
=
aufs_free_inode
,
/* always deleting, no clearing */
.
drop_inode
=
generic_delete_inode
,
.
show_options
=
aufs_show_options
,
...
...
fs/aufs/xino.c
View file @
8fef72dc
...
...
@@ -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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment