From: Xiubo Li <xiubli@xxxxxxxxxx> When truncating the file size the MDS will help update the last encrypted block, and during this we need to make sure the client won't fill the pagecaches. Signed-off-by: Xiubo Li <xiubli@xxxxxxxxxx> --- fs/ceph/inode.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index f4059d73edd5..cc1829ab497d 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -2647,9 +2647,12 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr, struct ceph_iattr *c req->r_num_caps = 1; req->r_stamp = attr->ia_ctime; if (fill_fscrypt) { + filemap_invalidate_lock(inode->i_mapping); err = fill_fscrypt_truncate(inode, req, attr); - if (err) + if (err) { + filemap_invalidate_unlock(inode->i_mapping); goto out; + } } /* @@ -2660,6 +2663,8 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr, struct ceph_iattr *c * it. */ err = ceph_mdsc_do_request(mdsc, NULL, req); + if (fill_fscrypt) + filemap_invalidate_unlock(inode->i_mapping); if (err == -EAGAIN && truncate_retry--) { dout("setattr %p result=%d (%s locally, %d remote), retry it!\n", inode, err, ceph_cap_string(dirtied), mask); -- 2.27.0