atomic_open(): return the right dentry in FMODE_OPENED case
->atomic_open() might have used a different alias than the one we'd passed to it; in "not opened" case we take care of that, in "opened" one we don't. Currently we don't care downstream of "opened" case which alias to return; however, that will change shortly when we get to unifying may_open() calls. It's not hard to get right in all cases, anyway. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
9deed3ebca
Коммит
6fb968cdf9
|
@ -2949,11 +2949,15 @@ static struct dentry *atomic_open(struct nameidata *nd, struct dentry *dentry,
|
|||
d_lookup_done(dentry);
|
||||
if (!error) {
|
||||
if (file->f_mode & FMODE_OPENED) {
|
||||
int acc_mode = op->acc_mode;
|
||||
if (unlikely(dentry != file->f_path.dentry)) {
|
||||
dput(dentry);
|
||||
dentry = dget(file->f_path.dentry);
|
||||
}
|
||||
/*
|
||||
* We didn't have the inode before the open, so check open
|
||||
* permission here.
|
||||
*/
|
||||
int acc_mode = op->acc_mode;
|
||||
if (file->f_mode & FMODE_CREATED) {
|
||||
WARN_ON(!(open_flag & O_CREAT));
|
||||
fsnotify_create(dir, dentry);
|
||||
|
|
Загрузка…
Ссылка в новой задаче