On Wed, Oct 18, 2023 at 09:25:18AM -0300, Wedson Almeida Filho wrote: > + fn read_folio(inode: &INode<Self>, mut folio: LockedFolio<'_>) -> Result { > + let pos = u64::try_from(folio.pos()).unwrap_or(u64::MAX); > + let size = u64::try_from(inode.size())?; > + let sb = inode.super_block(); > + > + let copied = if pos >= size { > + 0 > + } else { > + let offset = inode.data().offset.checked_add(pos).ok_or(ERANGE)?; > + let len = core::cmp::min(size - pos, folio.size().try_into()?); > + let mut foffset = 0; > + > + if offset.checked_add(len).ok_or(ERANGE)? > sb.data().data_size { > + return Err(EIO); > + } > + > + for v in sb.read(offset, len)? { > + let v = v?; > + folio.write(foffset, v.data())?; > + foffset += v.data().len(); > + } > + foffset > + }; > + > + folio.zero_out(copied, folio.size() - copied)?; > + folio.mark_uptodate(); > + folio.flush_dcache(); > + > + Ok(()) > + } Who unlocks the folio here?