On 5/19/23 17:24, David Howells wrote:
Xiubo Li <xiubli@xxxxxxxxxx> wrote:
+ ret = ceph_get_caps(in, CEPH_CAP_FILE_RD, want, -1, &got);
+ if (ret < 0) {
+ ceph_end_io_read(inode);
+ return ret;
+ }
+
+ if ((got & (CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_LAZYIO)) == 0) {
+ dout("splice_read/sync %p %llx.%llx %llu~%zu got cap refs on %s\n",
+ inode, ceph_vinop(inode), *ppos, len,
+ ceph_cap_string(got));
+
+ ceph_end_io_read(inode);
+ return direct_splice_read(in, ppos, pipe, len, flags);
Shouldn't we release cap ref before returning here ?
Ummm... Even if we got no caps?
No, at least we have got the 'need' caps: CEPH_CAP_FILE_RD once here.
I saw you have updated this and will check it.
Thanks
- Xiubo
David