On Mon, Jan 17, 2022 at 12:44:33PM +0000, David Howells wrote: > + if (ceph_caps_issued(ci) & (CEPH_CAP_FILE_CACHE|CEPH_CAP_FILE_LAZYIO)) { > + folio = filemap_get_folio(inode->i_mapping, 0); > + if (folio) { > + if (folio_test_uptodate(folio)) { > from_pagecache = true; > - lock_page(page); > + folio_lock(folio); > } else { > - put_page(page); > - page = NULL; > + folio_put(folio); > + folio = NULL; This all falls very much under "doing it the hard way", and quite possibly under the "actively buggy with races" category. read_mapping_folio() does what you want, as long as you pass 'filp' as your 'void *data'. I should fix that type ...