Merge remote-tracking branch 'asoc/fix/cirrus' into asoc-linus
[firefly-linux-kernel-4.4.55.git] / fs / ceph / file.c
index c407abb52b7be8d23f74067ede7bd9eea3551bae..d533075a823d5eb92e709547b8fe790c59cba981 100644 (file)
@@ -275,10 +275,10 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
        err = ceph_mdsc_do_request(mdsc,
                                   (flags & (O_CREAT|O_TRUNC)) ? dir : NULL,
                                   req);
+       err = ceph_handle_snapdir(req, dentry, err);
        if (err)
                goto out_req;
 
-       err = ceph_handle_snapdir(req, dentry, err);
        if (err == 0 && (flags & O_CREAT) && !req->r_reply_info.head->is_dentry)
                err = ceph_handle_notrace_create(dir, dentry);
 
@@ -292,7 +292,7 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
        }
        if (err)
                goto out_req;
-       if (dn || dentry->d_inode == NULL || S_ISLNK(dentry->d_inode->i_mode)) {
+       if (dn || dentry->d_inode == NULL || d_is_symlink(dentry)) {
                /* make vfs retry on splice, ENOENT, or symlink */
                dout("atomic_open finish_no_open on dn %p\n", dn);
                err = finish_no_open(file, dn);
@@ -952,7 +952,7 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)
        mutex_lock(&inode->i_mutex);
 
        /* We can write back this queue in page reclaim */
-       current->backing_dev_info = file->f_mapping->backing_dev_info;
+       current->backing_dev_info = inode_to_bdi(inode);
 
        err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode));
        if (err)