let read_inode p n =
      let buffer = read_block p n in
      let kind =
        match (read_int buffer 0) with
          0 -> S_REG
        | 1 -> S_DIR
        | _ -> system_error EIO "read_inode" "kind" in
      let nlink = read_int buffer 4 in
      let size = read_int buffer 8 in
      if size > p.max_file_size then system_error EIO "read_inode" "size";
      let init_block i = (read_int buffer (i*4 + p.blocktbl_offset)) in
      let blocktbl = Array.init (p.blocktbl_sizeinit_block in
      {
        stats =  { st_dev = 0;
          st_ino = n ;
          st_kind = kind ;
          st_nlink = nlink;
          st_size = size;
        };
        blocktbl = blocktbl;
        partition = p;
      }