It is unclear who is wrong and who is right, but when operating on
plain file bsdlabel(8) always writes label at a fixed offset from its beginning (512 bytes), regardless of the sector size. At the same time, bsdlabel geom class expects label to be available at the very beginning of the second sector. As a result, images prepared in userland for media with sector size different from 512 bytes (i.e. 2k for cdroms) are not recognized by the tasting mechanism. Solve the problem by always looking for the label at 512-byte offset if we can't find it at the beginning of the second sector and sector size is not 512 bytes.
This commit is contained in:
parent
16e3e466cc
commit
44ba92fd8a
@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$");
|
||||
#define BSD_CLASS_NAME "BSD"
|
||||
|
||||
#define ALPHA_LABEL_OFFSET 64
|
||||
#define HISTORIC_LABEL_OFFSET 512
|
||||
|
||||
#define LABELSIZE (148 + 16 * MAXPARTITIONS)
|
||||
|
||||
@ -536,6 +537,15 @@ g_bsd_taste(struct g_class *mp, struct g_provider *pp, int flags)
|
||||
/* First look for a label at the start of the second sector. */
|
||||
error = g_bsd_try(gp, gsp, cp, secsize, ms, secsize);
|
||||
|
||||
/*
|
||||
* If sector size is not 512 the label still can be at
|
||||
* offset 512, not at the start of the second sector. At least
|
||||
* it's true for labels created by the FreeBSD's bsdlabel(8).
|
||||
*/
|
||||
if (error && secsize != HISTORIC_LABEL_OFFSET)
|
||||
error = g_bsd_try(gp, gsp, cp, secsize, ms,
|
||||
HISTORIC_LABEL_OFFSET);
|
||||
|
||||
/* Next, look for alpha labels */
|
||||
if (error)
|
||||
error = g_bsd_try(gp, gsp, cp, secsize, ms,
|
||||
|
Loading…
x
Reference in New Issue
Block a user