static int ext4_ext_get_access(handle_t *handle, struct inode *inode,
                                struct ext4_ext_path *path)
 {
+       int err = 0;
+
        if (path->p_bh) {
                /* path points to block */
                BUFFER_TRACE(path->p_bh, "get_write_access");
-               return ext4_journal_get_write_access(handle, inode->i_sb,
-                                                    path->p_bh, EXT4_JTR_NONE);
+               err = ext4_journal_get_write_access(handle, inode->i_sb,
+                                                   path->p_bh, EXT4_JTR_NONE);
+               /*
+                * The extent buffer's verified bit will be set again in
+                * __ext4_ext_dirty(). We could leave an inconsistent
+                * buffer if the extents updating procudure break off du
+                * to some error happens, force to check it again.
+                */
+               if (!err)
+                       clear_buffer_verified(path->p_bh);
        }
        /* path points to leaf/index in inode body */
        /* we use in-core data, no need to protect them */
-       return 0;
+       return err;
 }
 
 /*
                /* path points to block */
                err = __ext4_handle_dirty_metadata(where, line, handle,
                                                   inode, path->p_bh);
+               /* Extents updating done, re-set verified flag */
+               if (!err)
+                       set_buffer_verified(path->p_bh);
        } else {
                /* path points to leaf/index in inode body */
                err = ext4_mark_inode_dirty(handle, inode);