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? David