anchor.diff:                   (never (zerop block-n))
                    (follow-pointer disk superblock block-n fn indirection))))))
   
  -(defun read-file (disk superblock bgdt inode-n)
  +(defun read-file (disk superblock bgdt inode)
     (let ((blocks))
       (do-file #'(lambda (block)
                    (push block blocks))
  -      disk superblock bgdt inode-n)
  +      disk superblock bgdt inode)
       (iter (with block-size := (block-size-in-bytes disk superblock))
             (with result := (make-array (list (* block-size (length blocks))) :element-type '(unsigned-byte 8)))
             (for block :in (nreverse blocks))
  
positive.code:   `(mezzano.supervisor:with-mutex ((ext4-host-lock ,host))
       ,@body))
  
  ;; WIP
  (defmethod open-using-host ((host ext4-host) pathname
                              &key direction element-type if-exists if-does-not-exist external-format)
    (with-ext4-host-locked (host)
      (let ((file-inode nil)
            (buffer nil)
            (file-position 0)
            (file-length 0)
            (created-file nil)
            (abort-action nil))
        (let ((inode-n (find-file host pathname))
              (block-device (file-host-mount-device host)))
          (if inode-n
              (let ((file-inode (read-inode block-device (superblock host) (bgdt host) inode-n)))
                (setf file-inode file-inode
                      buffer (read-file block-device (superblock host) (bgdt host) inode-n)
                      file-length (inode-size file-inode)))
              (ecase if-does-not-exist
                (:error (error 'simple-file-error
                               :pathname pathname
                               :format-control "File ~A does not exist. ~S"
                               :format-arguments (list pathname (file-name pathname))))
                (:create (setf created-file t
                               abort-action :delete)
                 (error ":create not implemented")))))
        (when (and (not created-file) (member direction '(:output :io)))
          (error ":output :io not implemented"))
        (cond ((or (eql element-type :default)
  
negative.code:           (replace result block :start1 offset)
            (finally (return result)))))
  
  (defmacro do-files ((arg var) disk superblock bgdt inode finally &body body)
    `(unless (do-file (lambda (,arg)
                        (do ((,var 0 (+ ,var (sys.int::ub16ref/le ,arg (+ 4 ,var)))))
                            ((= ,var (block-size-in-bytes disk superblock)) nil)
                          ,@body))
               ,disk ,superblock ,bgdt ,inode)
       ,finally))
  
  ;;; Host integration
  