vsl: ordering bugfix.

Functions specifically using the BUG_ON macro on an argument used
the same argument in assignments preceding the NULL check - this
has been addressed by reordering assignment and BUG_ON checks.
vsl: rephrased comments

Comments have been rephrase to improve readability.
vsl: removed misleading comment

__vsl_write_req no longer assumes the callee has locked the
inflight structure for the corresponding l_addr as the function
itself now does this (and double-locking would entail deadlocking)
vsl: added ioctl handling functionality
NVMe: added VSL ioctl handling hooks
vsl: corrected BUG_ON condition
vsl: refactor code for expanded vsl_target_type functionality (block management)

Moved target-specific code for mapping(allocation of pages) out from core to vsltgt and
expanded vsl_target_type to define which functions to use for block management.
First step in allowing block-allocation strategies.
vsl: Implemented debug-only sanity check abilities.

BUG_ON is always evaluated, regardless of compiling the kernel for
production or debugging/development use - hence the modified make
file and vsl.h definition of 'VSL_ASSERT(c)', used for validating
preconditions in code provided DEBUG=y is set in the makefile.

Example: can be used to ensure functions requiring locks to be
taken aren't invoked unless this is the case:

--
VSL_ASSERT(spin_is_locked(&block->lock));
--

The difference lies in the lack of overhead on production code.
vsl: removed unused #define's
vsl: Fix makefile build instructions

The kernel (wisely) prevents overriding the CFLAGS variable, by
mistake or otherwise. Instead, per-module, overrides are required
to be put in 'ccflags-y' if necessary. This patch does that.
vsl: refactor show_pool

Code using show_pool to output pool statistics occasionally
already has the pool lock, rather than relinquishing it only to
have show_pool reacquire it (possibly getting preempted in the
process), we refactor show_pool into show_pool and __show_pool.
The former wraps the latter, acquiring the pool lock.
vsl: store granularity values in vsl_stor

The lightnvm standard specifies 3 values regarding the granularity
(minimum request sizes) of read-, write- and erase requests.
vsl_stor now stores these for later use by GC & data placement
algorithms.
vsl: Protect GC collect from interrupt (deadlock fix)

Possible deadlock where CPU-X executed vsl_gc_collect holding
pool lock Y when interrupted which eventually would be interrupted
by a finished request, which would attempt to take same pool lock
(Y) in vsl_endio, causing a deadlock.
vsl: disable IRQ's during block get/put operations

vsl_pool_get_block, default block allocator for the present VSL
target types, locks a pool as part of finding a suitable block.
Considering the short duration of the work and the need to NEVER
have interrupts deadlock on a pool lock - we temporarily disable
IRQ's.
vsl: defer end_io work (IRQ) of recycling blocks

Recycling full blocks requires adding the block to the tail of the
pool's prio list, which presently requires the heavily contended
pool->lock - to avoid disabling IRQ's the work is deferred.
Fix later, not too scalable.
vsl: add 'block_for_each_page' loop macro.

A simple macro with which to loop through all 'vsl_addr' pages
belonging to the specified block.
vsl: refactor 'invalid_block_page'

Added optional '__invalid_block_page' to allow calls from within a
context of having the block lock already. Formalised the
requirement of holding the reverse translation map lock as stated
in the comment with a debug-only check.
vsl: inflight, per-addr to per-range revamp

In preparation for block- or multi-page allocation schemes, the
inflight system is revamped such that each inflight list contains
request ranges rather than individual page addresses. While
checking against a range is slightly more expensive (potentially
2 comparisons per range instead of 1) the number of ranges is
comparatively smaller - anything but pure page-based allocation
should benefit from this.
NOTE: request ranges spanning more than a single physical block
are not supported yet, a better mapping scheme is required for
that.