diff options
Diffstat (limited to 'fs/ceph/file.c')
-rw-r--r-- | fs/ceph/file.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c index b9b8eb225f66..3b6b522b4b31 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c | |||
@@ -291,14 +291,14 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry, | |||
291 | } | 291 | } |
292 | if (err) | 292 | if (err) |
293 | goto out_req; | 293 | goto out_req; |
294 | if (dn || dentry->d_inode == NULL || d_is_symlink(dentry)) { | 294 | if (dn || d_really_is_negative(dentry) || d_is_symlink(dentry)) { |
295 | /* make vfs retry on splice, ENOENT, or symlink */ | 295 | /* make vfs retry on splice, ENOENT, or symlink */ |
296 | dout("atomic_open finish_no_open on dn %p\n", dn); | 296 | dout("atomic_open finish_no_open on dn %p\n", dn); |
297 | err = finish_no_open(file, dn); | 297 | err = finish_no_open(file, dn); |
298 | } else { | 298 | } else { |
299 | dout("atomic_open finish_open on dn %p\n", dn); | 299 | dout("atomic_open finish_open on dn %p\n", dn); |
300 | if (req->r_op == CEPH_MDS_OP_CREATE && req->r_reply_info.has_create_ino) { | 300 | if (req->r_op == CEPH_MDS_OP_CREATE && req->r_reply_info.has_create_ino) { |
301 | ceph_init_inode_acls(dentry->d_inode, &acls); | 301 | ceph_init_inode_acls(d_inode(dentry), &acls); |
302 | *opened |= FILE_CREATED; | 302 | *opened |= FILE_CREATED; |
303 | } | 303 | } |
304 | err = finish_open(file, dentry, ceph_open, opened); | 304 | err = finish_open(file, dentry, ceph_open, opened); |