ext4: let ext4 maintain extent status tree
[firefly-linux-kernel-4.4.55.git] / fs / ext4 / super.c
index 6791d091fbc737976f54588f0414fd6488673b5a..ad6cd8aeb946006daf689e63dcf992710ae173cc 100644 (file)
@@ -50,6 +50,7 @@
 #include "xattr.h"
 #include "acl.h"
 #include "mballoc.h"
+#include "ext4_extents.h"
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/ext4.h>
@@ -1033,6 +1034,7 @@ void ext4_clear_inode(struct inode *inode)
        clear_inode(inode);
        dquot_drop(inode);
        ext4_discard_preallocations(inode);
+       ext4_es_remove_extent(inode, 0, EXT_MAX_BLOCKS);
        if (EXT4_I(inode)->jinode) {
                jbd2_journal_release_jbd_inode(EXT4_JOURNAL(inode),
                                               EXT4_I(inode)->jinode);
@@ -5296,9 +5298,14 @@ static int __init ext4_init_fs(void)
                init_waitqueue_head(&ext4__ioend_wq[i]);
        }
 
-       err = ext4_init_pageio();
+       err = ext4_init_es();
        if (err)
                return err;
+
+       err = ext4_init_pageio();
+       if (err)
+               goto out7;
+
        err = ext4_init_system_zone();
        if (err)
                goto out6;
@@ -5348,6 +5355,9 @@ out5:
        ext4_exit_system_zone();
 out6:
        ext4_exit_pageio();
+out7:
+       ext4_exit_es();
+
        return err;
 }