Loading fs/9p/vfs_inode_dotl.c +1 −7 Original line number Diff line number Diff line Loading @@ -267,14 +267,8 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, } /* Only creates */ if (!(flags & O_CREAT)) if (!(flags & O_CREAT) || dentry->d_inode) return finish_no_open(file, res); else if (dentry->d_inode) { if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)) return -EEXIST; else return finish_no_open(file, res); } v9ses = v9fs_inode2v9ses(dir); Loading fs/namei.c +19 −14 Original line number Diff line number Diff line Loading @@ -2725,16 +2725,6 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry, goto out; } acc_mode = op->acc_mode; if (WARN_ON(excl && !(*opened & FILE_CREATED))) *opened |= FILE_CREATED; if (*opened & FILE_CREATED) { WARN_ON(!(open_flag & O_CREAT)); fsnotify_create(dir, dentry); acc_mode = MAY_OPEN; } if (error) { /* returned 1, that is */ if (WARN_ON(file->f_path.dentry == DENTRY_NOT_SET)) { error = -EIO; Loading @@ -2744,11 +2734,20 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry, dput(dentry); dentry = file->f_path.dentry; } WARN_ON(!dentry->d_inode && (*opened & FILE_CREATED)); if (create_error && dentry->d_inode == NULL) { if (*opened & FILE_CREATED) fsnotify_create(dir, dentry); if (!dentry->d_inode) { WARN_ON(*opened & FILE_CREATED); if (create_error) { error = create_error; goto out; } } else { if (excl && !(*opened & FILE_CREATED)) { error = -EEXIST; goto out; } } goto looked_up; } Loading @@ -2756,6 +2755,12 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry, * We didn't have the inode before the open, so check open permission * here. */ acc_mode = op->acc_mode; if (*opened & FILE_CREATED) { WARN_ON(!(open_flag & O_CREAT)); fsnotify_create(dir, dentry); acc_mode = MAY_OPEN; } error = may_open(&file->f_path, acc_mode, open_flag); if (error) fput(file); Loading Loading
fs/9p/vfs_inode_dotl.c +1 −7 Original line number Diff line number Diff line Loading @@ -267,14 +267,8 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, } /* Only creates */ if (!(flags & O_CREAT)) if (!(flags & O_CREAT) || dentry->d_inode) return finish_no_open(file, res); else if (dentry->d_inode) { if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)) return -EEXIST; else return finish_no_open(file, res); } v9ses = v9fs_inode2v9ses(dir); Loading
fs/namei.c +19 −14 Original line number Diff line number Diff line Loading @@ -2725,16 +2725,6 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry, goto out; } acc_mode = op->acc_mode; if (WARN_ON(excl && !(*opened & FILE_CREATED))) *opened |= FILE_CREATED; if (*opened & FILE_CREATED) { WARN_ON(!(open_flag & O_CREAT)); fsnotify_create(dir, dentry); acc_mode = MAY_OPEN; } if (error) { /* returned 1, that is */ if (WARN_ON(file->f_path.dentry == DENTRY_NOT_SET)) { error = -EIO; Loading @@ -2744,11 +2734,20 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry, dput(dentry); dentry = file->f_path.dentry; } WARN_ON(!dentry->d_inode && (*opened & FILE_CREATED)); if (create_error && dentry->d_inode == NULL) { if (*opened & FILE_CREATED) fsnotify_create(dir, dentry); if (!dentry->d_inode) { WARN_ON(*opened & FILE_CREATED); if (create_error) { error = create_error; goto out; } } else { if (excl && !(*opened & FILE_CREATED)) { error = -EEXIST; goto out; } } goto looked_up; } Loading @@ -2756,6 +2755,12 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry, * We didn't have the inode before the open, so check open permission * here. */ acc_mode = op->acc_mode; if (*opened & FILE_CREATED) { WARN_ON(!(open_flag & O_CREAT)); fsnotify_create(dir, dentry); acc_mode = MAY_OPEN; } error = may_open(&file->f_path, acc_mode, open_flag); if (error) fput(file); Loading