On Mon, 2022-01-17 at 13:47 +0000, Matthew Wilcox wrote: > 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 ... > That would be nicer, I think. If you do that though, then patch #3 probably needs to come first in the series... -- Jeff Layton <jlayton@xxxxxxxxxx>