We used to have sync_blockdev() on each normal (== non-raw)
blkdev_put() + kill_bdev() on the final blkdev_put(). That worked
fine until we'd moved sync_blockdev() to the final blkdev_put().
Now we have a nasty scenario:
open block device
open raw device
write on block device # data ends up in cache
close block device # no sync here, we still have the sucker opened
close raw device # no sync here either
# ... and cache is killed by kill_bdev()
IOW, if we postpone sync to final close, we must do it regardless of
kind of close. Otherwise we are in for data corruption and yes, it is easy
to trigger. Fix is obvious...