Large hash buckets (in the 10's of thousands range) are costly to walk
in find_all_dups. Instead, we catch those buckets during hash insert
time and add filerec pointers (for each unique filerec) to the
dupe_blocks_list structure. Later, when find_all_dups() encounters
these it walks the filerecs directly instead of the blocks list.

This patch halves the time (from 16s to 8s) to calculate extents
from a sample hash file (created from my build partition).

The value chosen at the moment (30000) is arbitrary. We might want to
make it user selectable. There is also the question as to whether it
makes sense to _always_ do this but the downside is we then lose the
block_ever_seen() shortcut in find_all_dups.

Signed-off-by: Mark Fasheh <mfasheh@suse.de>
Use fiemap to record extent flags on our hash blocks. These are then
used during the extent search to skip blocks which are already
deduped, or have no ability to be deduped (inline, unwritten, etc).

A future patch can skip checksumming those blocks which we know will
not be considered for dedupe.

Signed-off-by: Mark Fasheh <mfasheh@suse.de>