Initial support of journaling

- Reorder block numbers to make it more sequental for mkfs
- mkfs: adjust writing, to make it correct write journal blocks and ino too
- simplefs_iget: use fops for journal inode
- simplefs_iget: check sfs_inode->mode instead of i_mode (not initialized yet)
simplefs_write: add journaling using jbd2
Implement external journal device instead of internal
Write journal device name
Check that journal was initialized successfully

Otherwise you will next trace:
[  964.775061] The magic number obtained in disk is: [268640275]
[  964.775554] simplefs filesystem of version [1] formatted with a block size of [4096] detected in the device.
[  964.776308] Loading journal devnum: 63
[  964.776724] Journal device is: unknown-block(0,63)
[  964.779494] simplefs superblock is destroyed. Unmount succesful.
[  964.781366] Freeing private data of inode ffff88007babe3a8 (1)
[  964.781903] simplefs is succesfully mounted on [/dev/loop0]
[  964.782393] BUG: unable to handle kernel NULL pointer dereference at 0000000000000069
[  964.783381] IP: [<ffffffff8112f0b3>] mount_fs+0x71/0x148
[  964.783977] PGD 7a545067 PUD 7a514067 PMD 0
[  964.784814] Oops: 0000 [#1] PREEMPT SMP
[  964.785176] Modules linked in: simplefs(PO) loop fuse joydev hid_generic usbhid hid snd_pcm microcode snd_timer snd psmouse soundcore evdev pcspkr serio_raw ohci_pci ohci_hcd ehci_hcd processor parport_pc usbcore button battery ac thermal_sys parport i2c_piix4 usb_common i2c_core ext4 crc16 jbd2 mbcache sg sd_mod sr_mod crc_t10dif cdrom crct10dif_common ata_generic ahci libahci ata_piix libata scsi_mod e1000 [last unloaded: simplefs]
[  964.785176] CPU: 0 PID: 3507 Comm: mount Tainted: P           O 3.14.0-rc6+ #101
[  964.785176] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[  964.785176] task: ffff88007cb8c6d0 ti: ffff88007ad04000 task.ti: ffff88007ad04000
[  964.785176] RIP: 0010:[<ffffffff8112f0b3>]  [<ffffffff8112f0b3>] mount_fs+0x71/0x148
[  964.785176] RSP: 0018:ffff88007ad05e40  EFLAGS: 00010203
[  964.785176] RAX: 0000000000000001 RBX: ffff88007c0fd000 RCX: 0000000000000007
[  964.785176] RDX: 0000000000000001 RSI: 0000000000000046 RDI: 00000000ffffffff
[  964.785176] RBP: ffff88007ad05e70 R08: 0000000000000004 R09: ffff8800000bbca0
[  964.785176] R10: fffffff000007bf4 R11: 0000000000000000 R12: ffff88007a329000
[  964.785176] R13: 0000000000000001 R14: ffffffffa01d2000 R15: 0000000000000000
[  964.785176] FS:  00007f195521f840(0000) GS:ffff88007fc00000(0000) knlGS:0000000000000000
[  964.785176] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[  964.785176] CR2: 0000000000000069 CR3: 000000007a540000 CR4: 00000000000006f0
[  964.785176] Stack:
[  964.785176]  ffff88007a1de080 ffff88007a1de080 ffffffffa01d2000 ffff8800377b2220
[  964.785176]  ffff88007c0fd000 ffffffffa01d2000 ffff88007ad05ea8 ffffffff81143628
[  964.785176]  0000000081142d1b ffff88007c0fd000 ffff8800377b2220 0000000000000027
[  964.785176] Call Trace:
[  964.785176]  [<ffffffff81143628>] vfs_kern_mount+0x5f/0xd3
[  964.785176]  [<ffffffff811458e9>] do_mount+0x6f9/0x7f0
[  964.785176]  [<ffffffff81145c01>] SyS_mount+0x80/0xb9
[  964.785176]  [<ffffffff813d2262>] system_call_fastpath+0x16/0x1b
[  964.785176] Code: cf 06 00 85 c0 0f 85 d0 00 00 00 4c 89 ea 48 89 d9 44 89 fe 4c 89 f7 41 ff 56 10 49 89 c5 49 81 fd 00 f0 ff ff 0f 87 b0 00 00 00 <49> 8b 5d 68 48 85 db 75 02 0f 0b 48 83 bb d0 00 00 00 00 75 11
[  964.785176] RIP  [<ffffffff8112f0b3>] mount_fs+0x71/0x148
[  964.785176]  RSP <ffff88007ad05e40>
[  964.785176] CR2: 0000000000000069
[  964.820009] ---[ end trace fc63610f0693bff7 ]---
simple-test: enable jbd2-debug
Add sfs_trace for lookup and compare inside it
Add loader for internal journal (we need to update mkfs to support this)

For internal journal we need enhance mkfs to use ext2fs lib, that will
allow us to create journal (with proper header).
Implement journal_path option
simple-test: mount fs with journal
Actually load journal by calling jbd2_journal_load()
Handle bdevs for journal_path= mount flag
simple-test: use losetup+journal_path=/dev/loopX for mounting with journal
simple-test: create journal with 4k block size

This must avoid next error:
[    6.694339] Journal device is: unknown-block(7,0)
[    6.695620] JBD2: no valid journal superblock found
Use max available journal size with jbd2_journal_init_dev()

Avoid next error:
JBD2: journal file too short
simplefs_write: install h_sync (sync on close) for jbd2 handle

This will make simplefs journaling more robust.

+ head -n100 /proc/fs/jbd2/loop0/info
7 transactions (7 requested), each up to 640 blocks
average:
  0ms waiting for transaction
  10ms request delay
  26ms running transaction
  0ms transaction was being locked
  0ms flushing data (in ordered mode)
  0ms logging transaction
  3459us average transaction commit time
  1 handles per transaction
  1 blocks per transaction
  2 logged blocks per transaction
Merge branch 'journal-v6'

This patchset adds journal support into simplefs using jbd2, the only
available journal is external (you could create it using mke2fs -O
journal_dev, for more info look into simple-test.sh), and the only spot
that have start/write_access/dirty_metadata/stop is simplefs_write()
(IOW no support for creation).

This branch is compacted, for more verbose versions of this patchset
please look into more older version (v4, v3, ...).

Here is the example of records in journal:
==> final-jbd2-ext4.logdump <==
logdump
Journal starts at block 1, transaction 4
Found expected sequence 4, type 1 (descriptor block) at block 1
Found expected sequence 4, type 2 (commit block) at block 16
Found expected sequence 5, type 1 (descriptor block) at block 17
Found expected sequence 5, type 2 (commit block) at block 19
Found expected sequence 6, type 1 (descriptor block) at block 20
Found expected sequence 6, type 2 (commit block) at block 22
No magic number at block 23: end of journal.

==> final-jbd2-simplefs.logdump <==
debugfs:  logdump -f /dev/loop0
Ext2 superblock header found.
Journal starts at block 2, transaction 2
Found expected sequence 2, type 1 (descriptor block) at block 2
Found expected sequence 2, type 2 (commit block) at block 4
Found expected sequence 3, type 1 (descriptor block) at block 5
Found expected sequence 3, type 2 (commit block) at block 7
Found expected sequence 4, type 1 (descriptor block) at block 8
Found expected sequence 4, type 2 (commit block) at block 10
Found expected sequence 5, type 1 (descriptor block) at block 11
Found expected sequence 5, type 2 (commit block) at block 13
Found expected sequence 6, type 1 (descriptor block) at block 14
Found expected sequence 6, type 2 (commit block) at block 16
Found expected sequence 7, type 1 (descriptor block) at block 17
Found expected sequence 7, type 2 (commit block) at block 19
Found expected sequence 8, type 1 (descriptor block) at block 20
Found expected sequence 8, type 2 (commit block) at block 22
No magic number at block 23: end of journal.

* journal-v6:
  simplefs_write: install h_sync (sync on close) for jbd2 handle
  Use max available journal size with jbd2_journal_init_dev()
  simple-test: create journal with 4k block size
  simple-test: use losetup+journal_path=/dev/loopX for mounting with journal
  Handle bdevs for journal_path= mount flag
  Actually load journal by calling jbd2_journal_load()
  simple-test: mount fs with journal
  Implement journal_path option
  Add loader for internal journal (we need to update mkfs to support this)
  Add sfs_trace for lookup and compare inside it
  simple-test: enable jbd2-debug
  Check that journal was initialized successfully
  Write journal device name
  Implement external journal device instead of internal
  simplefs_write: add journaling using jbd2
  Initial support of journaling