It may also be useful to allow invalidate_start() to fail in some contexts (try_to_unmap f.e., maybe if a certain flag is passed). This may allow the device to get out of tight situations (pending I/O f.e. or time out if there is no response for network communications). But then that complicates the API.