aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ceph/file.c')
-rw-r--r--fs/ceph/file.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index a65acf355384..dd44f3593992 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -651,7 +651,6 @@ static ssize_t ceph_aio_read(struct kiocb *iocb, const struct iovec *iov,
651 dout("aio_read %p %llx.%llx %llu~%u trying to get caps on %p\n", 651 dout("aio_read %p %llx.%llx %llu~%u trying to get caps on %p\n",
652 inode, ceph_vinop(inode), pos, (unsigned)len, inode); 652 inode, ceph_vinop(inode), pos, (unsigned)len, inode);
653again: 653again:
654 __ceph_do_pending_vmtruncate(inode, true);
655 if (fi->fmode & CEPH_FILE_MODE_LAZY) 654 if (fi->fmode & CEPH_FILE_MODE_LAZY)
656 want = CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_LAZYIO; 655 want = CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_LAZYIO;
657 else 656 else
@@ -728,7 +727,7 @@ retry_snap:
728 ret = -ENOSPC; 727 ret = -ENOSPC;
729 goto out; 728 goto out;
730 } 729 }
731 __ceph_do_pending_vmtruncate(inode, true); 730 mutex_lock(&inode->i_mutex);
732 dout("aio_write %p %llx.%llx %llu~%u getting caps. i_size %llu\n", 731 dout("aio_write %p %llx.%llx %llu~%u getting caps. i_size %llu\n",
733 inode, ceph_vinop(inode), pos, (unsigned)iov->iov_len, 732 inode, ceph_vinop(inode), pos, (unsigned)iov->iov_len,
734 inode->i_size); 733 inode->i_size);
@@ -737,8 +736,10 @@ retry_snap:
737 else 736 else
738 want = CEPH_CAP_FILE_BUFFER; 737 want = CEPH_CAP_FILE_BUFFER;
739 ret = ceph_get_caps(ci, CEPH_CAP_FILE_WR, want, &got, endoff); 738 ret = ceph_get_caps(ci, CEPH_CAP_FILE_WR, want, &got, endoff);
740 if (ret < 0) 739 if (ret < 0) {
741 goto out_put; 740 mutex_unlock(&inode->i_mutex);
741 goto out;
742 }
742 743
743 dout("aio_write %p %llx.%llx %llu~%u got cap refs on %s\n", 744 dout("aio_write %p %llx.%llx %llu~%u got cap refs on %s\n",
744 inode, ceph_vinop(inode), pos, (unsigned)iov->iov_len, 745 inode, ceph_vinop(inode), pos, (unsigned)iov->iov_len,
@@ -748,10 +749,10 @@ retry_snap:
748 (iocb->ki_filp->f_flags & O_DIRECT) || 749 (iocb->ki_filp->f_flags & O_DIRECT) ||
749 (inode->i_sb->s_flags & MS_SYNCHRONOUS) || 750 (inode->i_sb->s_flags & MS_SYNCHRONOUS) ||
750 (fi->flags & CEPH_F_SYNC)) { 751 (fi->flags & CEPH_F_SYNC)) {
752 mutex_unlock(&inode->i_mutex);
751 ret = ceph_sync_write(file, iov->iov_base, iov->iov_len, 753 ret = ceph_sync_write(file, iov->iov_base, iov->iov_len,
752 &iocb->ki_pos); 754 &iocb->ki_pos);
753 } else { 755 } else {
754 mutex_lock(&inode->i_mutex);
755 ret = __generic_file_aio_write(iocb, iov, nr_segs, 756 ret = __generic_file_aio_write(iocb, iov, nr_segs,
756 &iocb->ki_pos); 757 &iocb->ki_pos);
757 mutex_unlock(&inode->i_mutex); 758 mutex_unlock(&inode->i_mutex);
@@ -766,7 +767,6 @@ retry_snap:
766 __mark_inode_dirty(inode, dirty); 767 __mark_inode_dirty(inode, dirty);
767 } 768 }
768 769
769out_put:
770 dout("aio_write %p %llx.%llx %llu~%u dropping cap refs on %s\n", 770 dout("aio_write %p %llx.%llx %llu~%u dropping cap refs on %s\n",
771 inode, ceph_vinop(inode), pos, (unsigned)iov->iov_len, 771 inode, ceph_vinop(inode), pos, (unsigned)iov->iov_len,
772 ceph_cap_string(got)); 772 ceph_cap_string(got));