anchor.diff:      (error "Bad magic : #x~x.
     Valid magic value is #xEF53." magic)))
   
  -(let* ((not-implemented (list +incompat-compression+
  -                              +incompat-journal-dev+
  -                              +incompat-meta-bg+
  -                              +incompat-mmp+
  -                              +incompat-ea-inode+
  -                              +incompat-dirdata+
  -                              +incompat-csum-seed+
  -                              +incompat-largedir+
  -                              +incompat-encrypt+))
  -       (sum (reduce #'logior not-implemented)))
  +(let ((not-implemented (list +incompat-compression+
  +                             +incompat-journal-dev+
  +                             +incompat-meta-bg+
  +                             +incompat-mmp+
  +                             +incompat-ea-inode+
  +                             +incompat-dirdata+
  +                             +incompat-csum-seed+
  +                             +incompat-largedir+
  +                             +incompat-encrypt+)))
     (defun check-feature-incompat (feature-incompat)
  -    (when (= +incompat-recover+ (logand +incompat-recover+ feature-incompat))
  +    (when (logbitp +incompat-recover+ feature-incompat)
         (error "Filesystem needs recovery"))
  -    (unless (= +incompat-filetype+ (logand (+ +incompat-filetype+ sum) feature-incompat))
  -      (error "Required features not implemented : ~{#x~x ~}"
  -             (loop :for feature :in not-implemented
  -                   :unless (zerop (logand feature feature-incompat))
  -                   :collect (logand feature feature-incompat))))))
  +    (unless (logbitp +incompat-filetype+ feature-incompat)
  +      (error "+incompat-filetype+ is required"))
  +    (iter (for feature :in not-implemented)
  +          (when (logbitp feature feature-incompat)
  +            (collect feature :into result))
  +          (finally
  +           (when result
  +             (error "Required incompatible feature not implemented : ~{~d, ~}" result))))))
   
   (defun read-superblock (disk)
     (let* ((superblock (block-device-read-sector disk 2 2))
  
positive.code:                     (collecting (read-block-group-descriptor superblock block offset)))))
  
  (defun read-block-bitmap (disk superblock bgds)
    (let ((n-blocks (if (zerop (logand +incompat-flex-bg+ (superblock-feature-incompat superblock)))
                        1 (expt 2 (superblock-log-groups-per-flex superblock)))))
      (read-block disk superblock (block-group-descriptor-block-bitmap bgds) n-blocks)))
  
  (defun read-inode-bitmap (disk superblock bgds)
    (let ((n-blocks (if (zerop (logand +incompat-flex-bg+ (superblock-feature-incompat superblock)))
                        1 (expt 2 (superblock-log-groups-per-flex superblock)))))
      (read-block disk superblock (block-group-descriptor-inode-bitmap bgds) n-blocks)))
  
  (defstruct inode
  
negative.code:   (let* ((inode (read-inode disk superblock bgdt inode-n))
           (inode-block (inode-block inode))
           (inode-flags (inode-flags inode)))
      (cond ((logbitp +extents-flag+ inode-flags)
             ;; TODO: Add support for extent-header-depth not equal to 0
             (let ((extent-header (read-extent-header inode-block)))
               (unless (zerop (extent-header-depth extent-header))
                 (error "Not 0 depth extents nodes not implemented"))
  