mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-23 06:14:42 +08:00
proc_fill_cache(): switch to d_alloc_parallel()
... making it usable with directory locked shared Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
6192269444
commit
3781764b5c
@ -1819,12 +1819,17 @@ bool proc_fill_cache(struct file *file, struct dir_context *ctx,
|
||||
|
||||
child = d_hash_and_lookup(dir, &qname);
|
||||
if (!child) {
|
||||
child = d_alloc(dir, &qname);
|
||||
if (!child)
|
||||
goto end_instantiate;
|
||||
if (instantiate(d_inode(dir), child, task, ptr) < 0) {
|
||||
dput(child);
|
||||
DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
|
||||
child = d_alloc_parallel(dir, &qname, &wq);
|
||||
if (IS_ERR(child))
|
||||
goto end_instantiate;
|
||||
if (d_in_lookup(child)) {
|
||||
int err = instantiate(d_inode(dir), child, task, ptr);
|
||||
d_lookup_done(child);
|
||||
if (err < 0) {
|
||||
dput(child);
|
||||
goto end_instantiate;
|
||||
}
|
||||
}
|
||||
}
|
||||
inode = d_inode(child);
|
||||
|
Loading…
Reference in New Issue
Block a user