> +static inline unsigned long pgmap_geometry(struct dev_pagemap *pgmap) > +{ > + if (!pgmap || !pgmap->geometry) > + return PAGE_SIZE; > + return pgmap->geometry; Nit, but avoiding all the negations would make this a little easier to read: if (pgmap && pgmap->geometry) return pgmap->geometry; return PAGE_SIZE > + if (pgmap_geometry(pgmap) > PAGE_SIZE) > + percpu_ref_get_many(pgmap->ref, (pfn_end(pgmap, range_id) > + - pfn_first(pgmap, range_id)) / pgmap_pfn_geometry(pgmap)); > + else > + percpu_ref_get_many(pgmap->ref, pfn_end(pgmap, range_id) > + - pfn_first(pgmap, range_id)); This is a horrible undreadable mess, which is trivially fixed by a strategically used local variable: refs = pfn_end(pgmap, range_id) - pfn_first(pgmap, range_id); if (pgmap_geometry(pgmap) > PAGE_SIZE) refs /= pgmap_pfn_geometry(pgmap); percpu_ref_get_many(pgmap->ref, refs);