From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1SE4hm-0001nd-8b for mharc-grub-devel@gnu.org; Sat, 31 Mar 2012 16:15:22 -0400 Received: from eggs.gnu.org ([208.118.235.92]:37449) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SE4hc-0001m2-Dg for grub-devel@gnu.org; Sat, 31 Mar 2012 16:15:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SE4hZ-00013R-2q for grub-devel@gnu.org; Sat, 31 Mar 2012 16:15:11 -0400 Received: from mail-wg0-f49.google.com ([74.125.82.49]:53096) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SE4hY-0000Z1-Mk for grub-devel@gnu.org; Sat, 31 Mar 2012 16:15:09 -0400 Received: by mail-wg0-f49.google.com with SMTP id dr1so1143713wgb.30 for ; Sat, 31 Mar 2012 13:15:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:x-enigmail-version:content-type; bh=6QNYheprERptt0R6Clq/jI/d5BNR/2oO5EKlyWxpQtg=; b=Sk9g2Ce1PvRiafOGo8Q2x8V3vjOm2g1u/wMVR/KVdN2FzZPPDL8TZTul0GZmK3ANqv QH9veSMuCB8O13+Qvx2pM52moBSyzVqTyFSpy1QdNwusxT+abDZ9T4CzLbihzSZoH0RV 4IdEE9dW/50dCmB9RJX8A0+o10+Rn2v7S8M8vE7acegIPTiLMP83x8kcEbmxfSruoGRU x5jATH+UKE7kc2EiQxxPUNvO9SOjDWJPGbhaWuxeJ1uEnVp07Lmzqqyly1CvAW69WiEp ushgyth8aG8clF6v7iqmdY/iQuXl+GxL9ay8aLrfZcgPcyYv1vLaKTcCOPXjy/71dlD0 jjXA== Received: by 10.180.96.228 with SMTP id dv4mr9599668wib.14.1333224907870; Sat, 31 Mar 2012 13:15:07 -0700 (PDT) Received: from debian.x201.phnet (33-234.197-178.cust.bluewin.ch. [178.197.234.33]) by mx.google.com with ESMTPS id j3sm30276152wiw.1.2012.03.31.13.15.03 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 31 Mar 2012 13:15:06 -0700 (PDT) Message-ID: <4F7765BE.6020102@gmail.com> Date: Sat, 31 Mar 2012 22:14:54 +0200 From: =?UTF-8?B?VmxhZGltaXIgJ8+GLWNvZGVyL3BoY29kZXInIFNlcmJpbmVua28=?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.3) Gecko/20120329 Icedove/10.0.3 MIME-Version: 1.0 To: The development of GNU GRUB Subject: Re: [PATCH] Big endian fixes for btrfs References: <20120326003636.38c4fdd5@kryten> In-Reply-To: <20120326003636.38c4fdd5@kryten> X-Enigmail-Version: 1.4 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="------------enig0E43D7C719961EC6CB6EFB66" X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 74.125.82.49 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 31 Mar 2012 20:15:20 -0000 This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig0E43D7C719961EC6CB6EFB66 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 25.03.2012 15:36, Anton Blanchard wrote: > 2012-03-25 Anton Blanchard > > * grub-core/fs/btrfs.c (read_sblock): Fix incorrect endian conversion.= > (key_cmp): Likewise. > (lower_bound): Likewise. > (grub_btrfs_read_logical): Likewise. > (grub_btrfs_read_inode): Likewise. > (grub_btrfs_extent_read): Likewise. > (find_path): Likewise. > (grub_btrfs_dir): Likewise. > (grub_btrfs_open): Likewise. Applied it with some changes Thanks. > Index: grub/grub-core/fs/btrfs.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- grub.orig/grub-core/fs/btrfs.c 2012-03-26 00:19:28.690769829 +1100 > +++ grub/grub-core/fs/btrfs.c 2012-03-26 00:23:40.019447649 +1100 > @@ -279,9 +279,9 @@ read_sblock (grub_disk_t disk, struct gr > static int > key_cmp (const struct grub_btrfs_key *a, const struct grub_btrfs_key *= b) > { > - if (grub_cpu_to_le64 (a->object_id) < grub_cpu_to_le64 (b->object_id= )) > + if (grub_le_to_cpu64 (a->object_id) < grub_le_to_cpu64 (b->object_id= )) > return -1; > - if (grub_cpu_to_le64 (a->object_id) > grub_cpu_to_le64 (b->object_id= )) > + if (grub_le_to_cpu64 (a->object_id) > grub_le_to_cpu64 (b->object_id= )) > return +1; > =20 > if (a->type < b->type) > @@ -289,9 +289,9 @@ key_cmp (const struct grub_btrfs_key *a, > if (a->type > b->type) > return +1; > =20 > - if (grub_cpu_to_le64 (a->offset) < grub_cpu_to_le64 (b->offset)) > + if (grub_le_to_cpu64 (a->offset) < grub_le_to_cpu64 (b->offset)) > return -1; > - if (grub_cpu_to_le64 (a->offset) > grub_cpu_to_le64 (b->offset)) > + if (grub_le_to_cpu64 (a->offset) > grub_le_to_cpu64 (b->offset)) > return +1; > return 0; > } > @@ -400,7 +400,8 @@ lower_bound (struct grub_btrfs_data *dat > grub_dprintf ("btrfs", > "retrieving %" PRIxGRUB_UINT64_T > " %x %" PRIxGRUB_UINT64_T "\n", > - key_in->object_id, key_in->type, key_in->offset); > + grub_le_to_cpu64 (key_in->object_id), key_in->type, > + grub_le_to_cpu64 (key_in->offset)); > =20 > while (1) > { > @@ -430,8 +431,9 @@ lower_bound (struct grub_btrfs_data *dat > grub_dprintf ("btrfs", > "internal node (depth %d) %" PRIxGRUB_UINT64_T > " %x %" PRIxGRUB_UINT64_T "\n", depth, > - node.key.object_id, node.key.type, > - node.key.offset); > + grub_le_to_cpu64 (node.key.object_id), > + node.key.type, > + grub_le_to_cpu64 (node.key.offset)); > =20 > if (key_cmp (&node.key, key_in) =3D=3D 0) > { > @@ -482,7 +484,8 @@ lower_bound (struct grub_btrfs_data *dat > grub_dprintf ("btrfs", > "leaf (depth %d) %" PRIxGRUB_UINT64_T > " %x %" PRIxGRUB_UINT64_T "\n", depth, > - leaf.key.object_id, leaf.key.type, leaf.key.offset); > + grub_le_to_cpu64 (leaf.key.object_id), leaf.key.type, > + grub_le_to_cpu64 (leaf.key.offset)); > =20 > if (key_cmp (&leaf.key, key_in) =3D=3D 0) > { > @@ -642,9 +645,9 @@ grub_btrfs_read_logical (struct grub_btr > * grub_le_to_cpu16 (chunk->nstripes); > } > =20 > - key_in.object_id =3D GRUB_BTRFS_OBJECT_ID_CHUNK; > + key_in.object_id =3D grub_cpu_to_le64 (GRUB_BTRFS_OBJECT_ID_CHUN= K); > key_in.type =3D GRUB_BTRFS_ITEM_TYPE_CHUNK; > - key_in.offset =3D addr; > + key_in.offset =3D grub_cpu_to_le64 (addr); > err =3D lower_bound (data, &key_in, &key_out, > grub_le_to_cpu64 (data->sblock.chunk_tree), > &chaddr, &chsize, NULL); > @@ -776,7 +779,7 @@ grub_btrfs_read_logical (struct grub_btr > With RAID5-like it will be more difficult. */ > stripe +=3D stripen + i; > =20 > - paddr =3D stripe->offset + stripe_offset; > + paddr =3D grub_le_to_cpu64 (stripe->offset) + stripe_offset; > =20 > grub_dprintf ("btrfs", "chunk 0x%" PRIxGRUB_UINT64_T > "+0x%" PRIxGRUB_UINT64_T > @@ -788,7 +791,7 @@ grub_btrfs_read_logical (struct grub_btr > grub_le_to_cpu16 (chunk->nstripes), > grub_le_to_cpu16 (chunk->nsubstripes), > grub_le_to_cpu64 (chunk->stripe_length), > - stripen, stripe->offset); > + stripen, grub_le_to_cpu64 (stripe->offset)); > grub_dprintf ("btrfs", "reading paddr 0x%" PRIxGRUB_UINT64_T > " for laddr 0x%" PRIxGRUB_UINT64_T "\n", paddr, > addr); > @@ -883,14 +886,14 @@ grub_btrfs_read_inode (struct grub_btrfs > grub_size_t elemsize; > grub_err_t err; > =20 > - key_in.object_id =3D num; > + key_in.object_id =3D grub_cpu_to_le64 (num); > key_in.type =3D GRUB_BTRFS_ITEM_TYPE_INODE_ITEM; > key_in.offset =3D 0; > =20 > err =3D lower_bound (data, &key_in, &key_out, tree, &elemaddr, &elem= size, NULL); > if (err) > return err; > - if (num !=3D key_out.object_id > + if (num !=3D grub_le_to_cpu64 (key_out.object_id) > || key_out.type !=3D GRUB_BTRFS_ITEM_TYPE_INODE_ITEM) > return grub_error (GRUB_ERR_BAD_FS, "inode not found"); > =20 > @@ -990,14 +993,14 @@ grub_btrfs_extent_read (struct grub_btrf > grub_size_t elemsize; > =20 > grub_free (data->extent); > - key_in.object_id =3D ino; > + key_in.object_id =3D grub_cpu_to_le64 (ino); > key_in.type =3D GRUB_BTRFS_ITEM_TYPE_EXTENT_ITEM; > key_in.offset =3D grub_cpu_to_le64 (pos); > err =3D lower_bound (data, &key_in, &key_out, tree, > &elemaddr, &elemsize, NULL); > if (err) > return -1; > - if (key_out.object_id !=3D ino > + if (grub_le_to_cpu64 (key_out.object_id) !=3D ino > || key_out.type !=3D GRUB_BTRFS_ITEM_TYPE_EXTENT_ITEM) > { > grub_error (GRUB_ERR_BAD_FS, "extent not found"); > @@ -1174,7 +1177,7 @@ find_path (struct grub_btrfs_data *data, > unsigned symlinks_max =3D 32; > =20 > *type =3D GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY; > - *tree =3D data->sblock.root_tree; > + *tree =3D grub_le_to_cpu64 (data->sblock.root_tree); > key->object_id =3D data->sblock.root_dir_objectid; > key->type =3D GRUB_BTRFS_ITEM_TYPE_DIR_ITEM; > key->offset =3D 0; > @@ -1292,7 +1295,8 @@ find_path (struct grub_btrfs_data *data, > } > =20 > err =3D grub_btrfs_read_inode (data, &inode, > - cdirel->key.object_id, *tree); > + grub_le_to_cpu64 (cdirel->key.object_id), > + *tree); > if (err) > { > grub_free (direl); > @@ -1310,7 +1314,8 @@ find_path (struct grub_btrfs_data *data, > return grub_errno; > } > =20 > - if (grub_btrfs_extent_read (data, cdirel->key.object_id, > + if (grub_btrfs_extent_read (data, > + grub_le_to_cpu64 (cdirel->key.object_id), > *tree, 0, tmp, > grub_le_to_cpu64 (inode.size)) > !=3D (grub_ssize_t) grub_le_to_cpu64 (inode.size)) > @@ -1344,7 +1349,7 @@ find_path (struct grub_btrfs_data *data, > { > struct grub_btrfs_root_item ri; > err =3D lower_bound (data, &cdirel->key, &key_out, > - data->sblock.root_tree, > + grub_le_to_cpu64 (data->sblock.root_tree), > &elemaddr, &elemsize, NULL); > if (err) > { > @@ -1372,7 +1377,7 @@ find_path (struct grub_btrfs_data *data, > } > key->type =3D GRUB_BTRFS_ITEM_TYPE_DIR_ITEM; > key->offset =3D 0; > - key->object_id =3D GRUB_BTRFS_OBJECT_ID_CHUNK; > + key->object_id =3D grub_cpu_to_le64 (GRUB_BTRFS_OBJECT_ID_CHUNK);= > *tree =3D grub_le_to_cpu64 (ri.tree); > break; > } > @@ -1487,14 +1492,15 @@ grub_btrfs_dir (grub_device_t device, co > char c; > struct grub_btrfs_inode inode; > struct grub_dirhook_info info; > - err =3D grub_btrfs_read_inode (data, &inode, cdirel->key.object_id,= > + err =3D grub_btrfs_read_inode (data, &inode, > + grub_le_to_cpu64 (cdirel->key.object_id), > tree); > grub_memset (&info, 0, sizeof (info)); > if (err) > grub_errno =3D GRUB_ERR_NONE; > else > { > - info.mtime =3D inode.mtime.sec; > + info.mtime =3D grub_le_to_cpu64 (inode.mtime.sec); > info.mtimeset =3D 1; > } > c =3D cdirel->name[grub_le_to_cpu16 (cdirel->n)]; > @@ -1541,7 +1547,7 @@ grub_btrfs_open (struct grub_file *file, > return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a regular fil= e")); > } > =20 > - data->inode =3D key_in.object_id; > + data->inode =3D grub_le_to_cpu64 (key_in.object_id); > err =3D grub_btrfs_read_inode (data, &inode, data->inode, data->tree= ); > if (err) > { > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel > --=20 Regards Vladimir '=CF=86-coder/phcoder' Serbinenko --------------enig0E43D7C719961EC6CB6EFB66 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iF4EAREKAAYFAk93Zb4ACgkQNak7dOguQglnfQD+MM+/CGo4epOJZ4B2Y+WkJdxM pb59VGOtlSREHHrVpMoA/RspFNJj3Sych96Wa1FBWYMENFD+bDBy96E+y2G2Ef6B =jO0E -----END PGP SIGNATURE----- --------------enig0E43D7C719961EC6CB6EFB66--