ceph: fix incorrect revoked caps assert in ceph_fill_file_size()
commit15c0a870dc
upstream. When truncating the inode the MDS will acquire the xlock for the ifile Locker, which will revoke the 'Frwsxl' caps from the clients. But when the client just releases and flushes the 'Fw' caps to MDS, for exmaple, and once the MDS receives the caps flushing msg it just thought the revocation has finished. Then the MDS will continue truncating the inode and then issued the truncate notification to all the clients. While just before the clients receives the cap flushing ack they receive the truncation notification, the clients will detecte that the 'issued | dirty' is still holding the 'Fw' caps. Cc: stable@vger.kernel.org Link: https://tracker.ceph.com/issues/56693 Fixes:b0d7c22310
("ceph: introduce i_truncate_mutex") Signed-off-by: Xiubo Li <xiubli@redhat.com> Reviewed-by: Milind Changire <mchangir@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
58f0e6324e
Коммит
c0c4acd53a
|
@ -647,9 +647,7 @@ int ceph_fill_file_size(struct inode *inode, int issued,
|
|||
ci->i_truncate_seq = truncate_seq;
|
||||
|
||||
/* the MDS should have revoked these caps */
|
||||
WARN_ON_ONCE(issued & (CEPH_CAP_FILE_EXCL |
|
||||
CEPH_CAP_FILE_RD |
|
||||
CEPH_CAP_FILE_WR |
|
||||
WARN_ON_ONCE(issued & (CEPH_CAP_FILE_RD |
|
||||
CEPH_CAP_FILE_LAZYIO));
|
||||
/*
|
||||
* If we hold relevant caps, or in the case where we're
|
||||
|
|
Загрузка…
Ссылка в новой задаче