Deallocate requests that clip only the start of a single page need to be
taken into account as well- it misses the first branch because
startofs == 0, but then it also misses the last branch because the start
and end are on the same page.
Handling this case in either branch is equally valid, so I've
arbitrarily chosen the first branch since it already has single-page
logic.