On Thu, 2022-04-07 at 22:41 +0800, xiubli@xxxxxxxxxx wrote: > 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); Looks reasonable. Is there any reason we shouldn't do this in the non- encrypted case too? I suppose it doesn't make as much difference in that case. I'll plan to pull this and the other patch into the wip-fscrypt branch. Should I just fold them into your earlier patches? -- Jeff Layton <jlayton@xxxxxxxxxx>