Abort blkid on I/O errors
v2 cover Abort blkid on I/O errors
Whenever blkid incurs an I/O error it should abort all probes, as any result will be bogus anyway. Plus blkid will taking ages to complete on faulty devices, stalling the uevent queue and resulting in udev killing the process eventually.
With this patch the number of I/O errors during
blkid run is cut from 156 to just 2.
Changes to v1:
- Fixup issues found when running 'make check'
- Only fail for I/O errors
Hannes Reinecke (2):
blkid: stop scanning on I/O error
blkid: convert superblocks to new calling convention
libblkid/src/partitions/aix.c | 2 +- libblkid/src/partitions/bsd.c | 14 ++++++--- libblkid/src/partitions/dos.c | 24 ++++++++++----- libblkid/src/partitions/gpt.c | 26 +++++++++++----- libblkid/src/partitions/mac.c | 19 ++++++++---- libblkid/src/partitions/minix.c | 14 ++++++--- libblkid/src/partitions/partitions.c | 13 +++++--- libblkid/src/partitions/sgi.c | 12 +++++--- libblkid/src/partitions/solaris_x86.c | 14 ++++++--- libblkid/src/partitions/sun.c | 14 ++++++--- libblkid/src/partitions/ultrix.c | 16 ++++++---- libblkid/src/partitions/unixware.c | 14 ++++++--- libblkid/src/probe.c | 13 ++++++-- libblkid/src/superblocks/adaptec_raid.c | 15 ++++----- libblkid/src/superblocks/bcache.c | 4 +-- libblkid/src/superblocks/befs.c | 24 +++++++-------- libblkid/src/superblocks/btrfs.c | 2 +- libblkid/src/superblocks/cramfs.c | 2 +- libblkid/src/superblocks/ddf_raid.c | 19 +++++++----- libblkid/src/superblocks/drbd.c | 8 ++--- libblkid/src/superblocks/drbdproxy_datalog.c | 2 +- libblkid/src/superblocks/exfat.c | 4 ++- libblkid/src/superblocks/ext.c | 30 +++++++++--------- libblkid/src/superblocks/f2fs.c | 2 +- libblkid/src/superblocks/gfs.c | 8 ++--- libblkid/src/superblocks/hfs.c | 12 ++++---- libblkid/src/superblocks/highpoint_raid.c | 12 ++++---- libblkid/src/superblocks/hpfs.c | 8 ++--- libblkid/src/superblocks/iso9660.c | 4 +-- libblkid/src/superblocks/isw_raid.c | 13 ++++---- libblkid/src/superblocks/jfs.c | 2 +- libblkid/src/superblocks/jmicron_raid.c | 13 ++++---- libblkid/src/superblocks/linux_raid.c | 46 ++++++++++++++++------------ libblkid/src/superblocks/lsi_raid.c | 10 +++--- libblkid/src/superblocks/luks.c | 2 +- libblkid/src/superblocks/lvm.c | 6 ++-- libblkid/src/superblocks/minix.c | 18 ++++++----- libblkid/src/superblocks/netware.c | 2 +- libblkid/src/superblocks/nilfs.c | 4 +-- libblkid/src/superblocks/ntfs.c | 6 ++-- libblkid/src/superblocks/nvidia_raid.c | 12 ++++---- libblkid/src/superblocks/ocfs.c | 8 ++--- libblkid/src/superblocks/promise_raid.c | 10 +++--- libblkid/src/superblocks/reiserfs.c | 8 ++--- libblkid/src/superblocks/romfs.c | 2 +- libblkid/src/superblocks/silicon_raid.c | 10 +++--- libblkid/src/superblocks/squashfs.c | 2 +- libblkid/src/superblocks/superblocks.c | 13 ++++++-- libblkid/src/superblocks/swap.c | 24 +++++++-------- libblkid/src/superblocks/sysv.c | 8 ++--- libblkid/src/superblocks/ubifs.c | 2 +- libblkid/src/superblocks/udf.c | 16 +++++----- libblkid/src/superblocks/ufs.c | 4 +-- libblkid/src/superblocks/vfat.c | 16 +++++----- libblkid/src/superblocks/via_raid.c | 6 ++-- libblkid/src/superblocks/vmfs.c | 4 +-- libblkid/src/superblocks/vxfs.c | 2 +- libblkid/src/superblocks/xfs.c | 6 ++-- libblkid/src/superblocks/zfs.c | 6 ++-- 59 files changed, 363 insertions(+), 269 deletions(-)
Signature · 1 line
1.7.12.4
PATCH v2 1/2 blkid: stop scanning on I/O error
Whenever we fail to read from a device it's pointless to continue with probing; we should be failing immediately. Otherwise the system will continue logging I/O errors.
This patch updates the probe functions to return -1 on I/O error and 1 if not found.
--- libblkid/src/partitions/partitions.c | 13 +++++++++---- libblkid/src/probe.c | 13 +++++++++++-- libblkid/src/superblocks/superblocks.c | 13 ++++++++++--- 3 files changed, 30 insertions(+), 9 deletions(-)
libblkid/src/partitions/partitions.c +9 -4
@@ -540,7 +540,8 @@ static int idinfo_probe(blkid_probe pr, const struct blkid_idinfo *id,if (pr->size <=0 || (id->minsz && id->minsz > pr->size)) goto nothing;/* the device is too small */ -if (blkid_probe_get_idmag (pr, id, &off, &mag)) + rc =blkid_probe_get_idmag (pr, id, &off, &mag); +if (rc !=0 ) goto nothing;/* final check by probing function */
@@ -548,12 +549,13 @@ static int idinfo_probe(blkid_probe pr, const struct blkid_idinfo *id,DBG (LOWPROBE ,blkid_debug ("%s: ---> call probefunc()" , id->name)); rc = id->probefunc (pr, mag); -if (rc ==-1 ) { +if (rc !=0 ) {/* reset after error */ reset_partlist (blkid_probe_get_partlist (pr));if (chn && !chn->binary)blkid_probe_chain_reset_vals (pr, chn); -DBG (LOWPROBE ,blkid_debug ("%s probefunc failed" , id->name)); +DBG (LOWPROBE ,blkid_debug ("%s probefunc failed, rc %d" , + id->name, rc)); }if (rc ==0 && mag && chn && !chn->binary) rc = blkid_probe_set_magic(pr, off, mag->len,
@@ -599,7 +601,10 @@ static int partitions_probe(blkid_probe pr, struct blkid_chain *chn)continue ;/* apply checks from idinfo */ -if (idinfo_probe (pr, idinfos[i], chn) !=0 ) + rc =idinfo_probe (pr, idinfos[i], chn); +if (rc <0 ) +return rc; +if (rc >0 )continue ; name = idinfos[i]->name;
libblkid/src/probe.c +11 -2
@@ -569,13 +569,17 @@ unsigned char *blkid_probe_get_buffer(blkid_probe pr,if (!bf) {ssize_t ret; -if (blkid_llseek (pr->fd, pr->off + off,SEEK_SET ) <0 ) +if (blkid_llseek (pr->fd, pr->off + off,SEEK_SET ) <0 ) { + errno =0 ;return NULL ; + }/* allocate info and space for data by why call */ bf =calloc (1 ,sizeof (struct blkid_bufinfo ) + len); -if (!bf) +if (!bf) { + errno =0 ;return NULL ; + } bf->data = ((unsigned char *) bf) +sizeof (struct blkid_bufinfo ); bf->len = len;
@@ -587,7 +591,10 @@ unsigned char *blkid_probe_get_buffer(blkid_probe pr, ret =read (pr->fd, bf->data, len);if (ret != (ssize_t ) len) { +DBG (LOWPROBE ,blkid_debug ("\tbuffer read: return %d error %d" , ret, errno));free (bf); +if (ret >=0 || errno !=EIO ) + errno =0 ;return NULL ; }list_add_tail (&bf->bufs, &pr->buffers);
@@ -794,6 +801,8 @@ int blkid_probe_get_idmag(blkid_probe pr, const struct blkid_idinfo *id, off = (mag->kboff + (mag->sboff >>10 )) <<10 ; buf =blkid_probe_get_buffer (pr, off,1024 ); +if (!buf && errno) +return -1 ;if (buf && !memcmp (mag->magic, buf + (mag->sboff &0x3ff ), mag->len)) { DBG(LOWPROBE, blkid_debug("\tmagic sboff=%u, kboff=%ld",
libblkid/src/superblocks/superblocks.c +10 -3
@@ -379,15 +379,22 @@ static int superblocks_probe(blkid_probe pr, struct blkid_chain *chn)DBG (LOWPROBE ,blkid_debug ("[%zd] %s:" , i, id->name)); -if (blkid_probe_get_idmag (pr, id, &off, &mag)) + rc =blkid_probe_get_idmag (pr, id, &off, &mag); +if (rc <0 ) +break ; +if (rc >0 )continue ;/* final check by probing function */ if (id->probefunc) {DBG (LOWPROBE ,blkid_debug ("\tcall probefunc()" )); -if (id->probefunc (pr, mag) !=0 ) { + rc = id->probefunc (pr, mag); +if (rc !=0 ) {blkid_probe_chain_reset_vals (pr, chn); -continue ; +if (rc <0 ) +break ; +else +continue ; } }
Signature · 1 line
1.7.12.4
Karel Zak
maintainerRe: [PATCH 1/2] blkid: stop scanning on I/O error
libblkid/src/probe.c int blkid_probe_get_idmag(blkid_probe pr, const struct blkid_idinfo *id, · line 805
Quoted 6 lines · Hannes Reinecke
libblkid/src/probe.c +2
-0@@ -794,6 +801,8 @@ int blkid_probe_get_idmag(blkid_probe pr, const struct blkid_idinfo *id, off = (mag->kboff + (mag->sboff >>10 )) <<10 ; buf =blkid_probe_get_buffer (pr, off,1024 ); +if (!buf && errno) +return -1 ;
return -errno;
Quoted 22 lines
libblkid/src/probe.c +0
-0if (buf && !memcmp (mag->magic, buf + (mag->sboff &0x3ff ), mag->len)) { DBG(LOWPROBE, blkid_debug("\tmagic sboff=%u, kboff=%ld",libblkid/src/superblocks/superblocks.c +4
-2@@ -379,15 +379,22 @@ static int superblocks_probe(blkid_probe pr, struct blkid_chain *chn)DBG (LOWPROBE ,blkid_debug ("[%zd] %s:" , i, id->name)); -if (blkid_probe_get_idmag (pr, id, &off, &mag)) + rc =blkid_probe_get_idmag (pr, id, &off, &mag); +if (rc <0 ) +break ; +if (rc >0 )continue ;/* final check by probing function */ if (id->probefunc) {DBG (LOWPROBE ,blkid_debug ("\tcall probefunc()" )); -if (id->probefunc (pr, mag) !=0 ) {
libblkid/src/superblocks/superblocks.c static int superblocks_probe(blkid_probe pr, struct blkid_chain *chn) · line 399
Quoted 10 lines
libblkid/src/superblocks/superblocks.c +6
-1+ rc = id->probefunc (pr, mag); +if (rc !=0 ) {blkid_probe_chain_reset_vals (pr, chn); -continue ; +if (rc <0 ) +break ; +else +continue ; } }
The function superblocks_probe() has to return 'rc' (now after the loop break it returns 1), otherwise the errors will be invisible for superblocks_safeprobe().
The errors has to be propagated to top level function (probe.c blkid_do_probe(), blkid_do_safeprobe(), etc).
Karel
Signature · 2 lines
Karel Zak <[email protected]> http://karelzak.blogspot.com
Re: [PATCH 1/2] blkid: stop scanning on I/O error
Quoted 10 lines · Karel Zak
libblkid/src/probe.c int blkid_probe_get_idmag(blkid_probe pr, const struct blkid_idinfo *id, · line 805
Quoted 6 lines · Hannes Reinecke
libblkid/src/probe.c +2
-0@@ -794,6 +801,8 @@ int blkid_probe_get_idmag(blkid_probe pr, const struct blkid_idinfo *id, off = (mag->kboff + (mag->sboff >>10 )) <<10 ; buf =blkid_probe_get_buffer (pr, off,1024 ); +if (!buf && errno) +return -1 ;return -errno;
Hmm. Okay; but then I'll need to audit the callers.
Quoted 28 lines
Quoted 28 lines
libblkid/src/probe.c +0
-0if (buf && !memcmp (mag->magic, buf + (mag->sboff &0x3ff ), mag->len)) { DBG(LOWPROBE, blkid_debug("\tmagic sboff=%u, kboff=%ld",libblkid/src/superblocks/superblocks.c +8
-3@@ -379,15 +379,22 @@ static int superblocks_probe(blkid_probe pr, struct blkid_chain *chn)DBG (LOWPROBE ,blkid_debug ("[%zd] %s:" , i, id->name)); -if (blkid_probe_get_idmag (pr, id, &off, &mag)) + rc =blkid_probe_get_idmag (pr, id, &off, &mag); +if (rc <0 ) +break ; +if (rc >0 )continue ;/* final check by probing function */ if (id->probefunc) {DBG (LOWPROBE ,blkid_debug ("\tcall probefunc()" )); -if (id->probefunc (pr, mag) !=0 ) { + rc = id->probefunc (pr, mag); +if (rc !=0 ) {blkid_probe_chain_reset_vals (pr, chn); -continue ; +if (rc <0 ) +break ;
Quoted 9 lines
libblkid/src/superblocks/superblocks.c static int superblocks_probe(blkid_probe pr, struct blkid_chain *chn) · line 399
Quoted 4 lines
libblkid/src/superblocks/superblocks.c +2
-0+else +continue ; } }The function
superblocks_probe()has to return 'rc' (now after the loop break it returns 1), otherwise the errors will be invisible forsuperblocks_safeprobe().
Okay, fixed.
Quoted 3 lines
The errors has to be propagated to top level function (
probe.cblkid_do_probe(),blkid_do_safeprobe(), etc).
That's already taken care of; the current code allows for this.
Cheers,
Hannes
PATCH v2 2/2 blkid: convert superblocks to new calling convention
In reply to Hannes ReineckeWith the previous patch the scanning functions were modified to return a differentiated return code. To correctly abort scanning when an I/O error occurs we need to differentiate between 'error' (= -1) and 'not found' (= 1) in the probe functions. This patch updates all superblock scanning functions to the new calling convention.
--- libblkid/src/partitions/aix.c | 2 +- libblkid/src/partitions/bsd.c | 14 ++++++--- libblkid/src/partitions/dos.c | 24 ++++++++++----- libblkid/src/partitions/gpt.c | 26 +++++++++++----- libblkid/src/partitions/mac.c | 19 ++++++++---- libblkid/src/partitions/minix.c | 14 ++++++--- libblkid/src/partitions/sgi.c | 12 +++++--- libblkid/src/partitions/solaris_x86.c | 14 ++++++--- libblkid/src/partitions/sun.c | 14 ++++++--- libblkid/src/partitions/ultrix.c | 16 ++++++---- libblkid/src/partitions/unixware.c | 14 ++++++--- libblkid/src/superblocks/adaptec_raid.c | 15 ++++----- libblkid/src/superblocks/bcache.c | 4 +-- libblkid/src/superblocks/befs.c | 24 +++++++-------- libblkid/src/superblocks/btrfs.c | 2 +- libblkid/src/superblocks/cramfs.c | 2 +- libblkid/src/superblocks/ddf_raid.c | 19 +++++++----- libblkid/src/superblocks/drbd.c | 8 ++--- libblkid/src/superblocks/drbdproxy_datalog.c | 2 +- libblkid/src/superblocks/exfat.c | 4 ++- libblkid/src/superblocks/ext.c | 30 +++++++++--------- libblkid/src/superblocks/f2fs.c | 2 +- libblkid/src/superblocks/gfs.c | 8 ++--- libblkid/src/superblocks/hfs.c | 12 ++++---- libblkid/src/superblocks/highpoint_raid.c | 12 ++++---- libblkid/src/superblocks/hpfs.c | 8 ++--- libblkid/src/superblocks/iso9660.c | 4 +-- libblkid/src/superblocks/isw_raid.c | 13 ++++---- libblkid/src/superblocks/jfs.c | 2 +- libblkid/src/superblocks/jmicron_raid.c | 13 ++++---- libblkid/src/superblocks/linux_raid.c | 46 ++++++++++++++++------------ libblkid/src/superblocks/lsi_raid.c | 10 +++--- libblkid/src/superblocks/luks.c | 2 +- libblkid/src/superblocks/lvm.c | 6 ++-- libblkid/src/superblocks/minix.c | 18 ++++++----- libblkid/src/superblocks/netware.c | 2 +- libblkid/src/superblocks/nilfs.c | 4 +-- libblkid/src/superblocks/ntfs.c | 6 ++-- libblkid/src/superblocks/nvidia_raid.c | 12 ++++---- libblkid/src/superblocks/ocfs.c | 8 ++--- libblkid/src/superblocks/promise_raid.c | 10 +++--- libblkid/src/superblocks/reiserfs.c | 8 ++--- libblkid/src/superblocks/romfs.c | 2 +- libblkid/src/superblocks/silicon_raid.c | 10 +++--- libblkid/src/superblocks/squashfs.c | 2 +- libblkid/src/superblocks/swap.c | 24 +++++++-------- libblkid/src/superblocks/sysv.c | 8 ++--- libblkid/src/superblocks/ubifs.c | 2 +- libblkid/src/superblocks/udf.c | 16 +++++----- libblkid/src/superblocks/ufs.c | 4 +-- libblkid/src/superblocks/vfat.c | 16 +++++----- libblkid/src/superblocks/via_raid.c | 6 ++-- libblkid/src/superblocks/vmfs.c | 4 +-- libblkid/src/superblocks/vxfs.c | 2 +- libblkid/src/superblocks/xfs.c | 6 ++-- libblkid/src/superblocks/zfs.c | 6 ++-- 56 files changed, 333 insertions(+), 260 deletions(-)
libblkid/src/partitions/aix.c +1 -1
@@ -34,7 +34,7 @@ static int probe_aix_pt(blkid_probe pr,return 0 ; err: -return -1 ; +return 1 ; }/*
libblkid/src/partitions/bsd.c +9 -5
@@ -42,14 +42,18 @@ static int probe_bsd_pt(blkid_probe pr, const struct blkid_idmag *mag)return 0 ; data =blkid_probe_get_sector (pr,BLKID_MAG_SECTOR (mag)); -if (!data) - goto nothing; +if (!data) { +if (errno) + goto err; +else + goto nothing; + } l = (struct bsd_disklabel *) data +BLKID_MAG_LASTOFFSET (mag); ls =blkid_probe_get_partlist (pr);if (!ls) - goto err; + goto nothing;/* try to determine the real type of BSD system according to * (parental) primary partition */
@@ -76,7 +80,7 @@ static int probe_bsd_pt(blkid_probe pr, const struct blkid_idmag *mag) tab =blkid_partlist_new_parttable (ls, name,BLKID_MAG_OFFSET (mag));if (!tab) - goto err; + goto nothing;if (le16_to_cpu (l->d_npartitions) <BSD_MAXPARTITIONS ) nparts =le16_to_cpu (l->d_npartitions);
@@ -113,7 +117,7 @@ static int probe_bsd_pt(blkid_probe pr, const struct blkid_idmag *mag) par =blkid_partlist_add_partition (ls, tab, start, size);if (!par) - goto err; + goto nothing;blkid_partition_set_type (par, p->p_fstype); }
libblkid/src/partitions/dos.c +16 -8
@@ -54,8 +54,12 @@ static int parse_dos_extended(blkid_probe pr, blkid_parttable tab,if (++ct_nodata >100 )return 0 ; data =blkid_probe_get_sector (pr, cur_start); -if (!data) - goto leave;/* malformed partition? */ +if (!data) { +if (errno) + goto err; +else + goto leave;/* malformed partition? */ + }if (!mbr_is_valid_magic (data)) goto leave;
@@ -98,7 +102,7 @@ static int parse_dos_extended(blkid_probe pr, blkid_parttable tab, par =blkid_partlist_add_partition (ls, tab, abs_start, size);if (!par) - goto err; + goto leave;blkid_partition_set_type (par, p->sys_ind);blkid_partition_set_flags (par, p->boot_ind);
@@ -142,8 +146,12 @@ static int probe_dos_pt(blkid_probe pr, data =blkid_probe_get_sector (pr,0 ); -if (!data) - goto nothing; +if (!data) { +if (errno) + goto err; +else + goto nothing; + }/* ignore disks with AIX magic number -- for more details see aix.c */ if (memcmp (data,BLKID_AIX_MAGIC_STRING ,BLKID_AIX_MAGIC_STRLEN ) ==0 )
@@ -207,7 +215,7 @@ static int probe_dos_pt(blkid_probe pr,/* allocate a new partition table */ tab =blkid_partlist_new_parttable (ls,"dos" ,MBR_PT_OFFSET );if (!tab) - goto err; + goto nothing;if (id)blkid_parttable_set_id (tab, (unsigned char *) idstr);
@@ -227,7 +235,7 @@ static int probe_dos_pt(blkid_probe pr, } par =blkid_partlist_add_partition (ls, tab, start, size);if (!par) - goto err; + goto nothing;blkid_partition_set_type (par, p->sys_ind);blkid_partition_set_flags (par, p->boot_ind);
@@ -248,7 +256,7 @@ static int probe_dos_pt(blkid_probe pr,continue ;if (is_extended (p) &&parse_dos_extended (pr, tab, start, size, ssf) ==-1 ) - goto err; + goto nothing; }/* Parse subtypes (nested partitions) on large disks */
libblkid/src/partitions/gpt.c +18 -8
@@ -168,8 +168,11 @@ static int is_pmbr_valid(blkid_probe pr, int *has) goto ok;/* skip PMBR check */ data =blkid_probe_get_sector (pr,0 ); -if (!data) +if (!data) { +if (errno) +return -1 ; goto failed; + }if (!mbr_is_valid_magic (data)) goto failed;
@@ -302,26 +305,33 @@ static int probe_gpt_pt(blkid_probe pr,uint64_t fu, lu;uint32_t ssf, i;efi_guid_t guid; +int ret;if (last_lba (pr, &lastlba)) goto nothing; -if (!is_pmbr_valid (pr,NULL )) + ret =is_pmbr_valid (pr,NULL ); +if (ret <0 ) + goto err; +else if (ret ==0 ) goto nothing; h =get_gpt_header (pr, &hdr, &e, (lba =GPT_PRIMARY_LBA ), lastlba); -if (!h) +if (!h && !errno) h =get_gpt_header (pr, &hdr, &e, (lba = lastlba), lastlba); -if (!h) +if (!h) { +if (errno) + goto err; goto nothing; + }blkid_probe_use_wiper (pr, lba *blkid_probe_get_size (pr),8 );if (blkid_probe_set_magic (pr, lba <<9 ,sizeof (GPT_HEADER_SIGNATURE_STR ) -1 , (unsigned char *)GPT_HEADER_SIGNATURE_STR )) - goto err; + goto nothing; guid = h->disk_guid;swap_efi_guid (&guid);
@@ -335,11 +345,11 @@ static int probe_gpt_pt(blkid_probe pr, ls =blkid_probe_get_partlist (pr);if (!ls) - goto err; + goto nothing; tab =blkid_partlist_new_parttable (ls,"gpt" , lba <<9 );if (!tab) - goto err; + goto nothing;blkid_parttable_set_uuid (tab, (const unsigned char *) &guid);
@@ -372,7 +382,7 @@ static int probe_gpt_pt(blkid_probe pr, par =blkid_partlist_add_partition (ls, tab, start * ssf, size * ssf);if (!par) - goto err; + goto nothing; blkid_partition_set_utf8name(par, (unsigned char *) e->partition_name,
libblkid/src/partitions/mac.c +13 -6
@@ -87,8 +87,12 @@ static int probe_mac_pt(blkid_probe pr,* the first block on the disk. */ md = (struct mac_driver_desc *)blkid_probe_get_sector (pr,0 ); -if (!md) - goto nothing; +if (!md) { +if (errno) + goto err; +else + goto nothing; + } block_size =be16_to_cpu (md->block_size);
@@ -96,8 +100,11 @@ static int probe_mac_pt(blkid_probe pr,* the second block on the disk. */ p = (struct mac_partition *)get_mac_block (pr, block_size,1 ); -if (!p) +if (!p) { +if (errno) + goto err; goto nothing; + }/* check the first partition signature */ if (!has_part_signature (p))
@@ -109,11 +116,11 @@ static int probe_mac_pt(blkid_probe pr, ls =blkid_probe_get_partlist (pr);if (!ls) - goto err; + goto nothing; tab =blkid_partlist_new_parttable (ls,"mac" ,0 );if (!tab) - goto err; + goto nothing; ssf = block_size /512 ; nblks =be32_to_cpu (p->map_count);
@@ -148,7 +155,7 @@ static int probe_mac_pt(blkid_probe pr, par =blkid_partlist_add_partition (ls, tab, start, size);if (!par) - goto err; + goto nothing;blkid_partition_set_name (par, (unsigned char *) p->name,sizeof (p->name));
libblkid/src/partitions/minix.c +9 -5
@@ -25,12 +25,16 @@ static int probe_minix_pt(blkid_probe pr,int i; data =blkid_probe_get_sector (pr,0 ); -if (!data) - goto nothing; +if (!data) { +if (errno) + goto err; +else + goto nothing; + } ls =blkid_probe_get_partlist (pr);if (!ls) - goto err; + goto nothing;/* Parent is required, because Minix uses the same PT as DOS and * difference is only in primary partition (parent) type.
@@ -48,7 +52,7 @@ static int probe_minix_pt(blkid_probe pr, tab =blkid_partlist_new_parttable (ls,"minix" ,MBR_PT_OFFSET );if (!tab) - goto err; + goto nothing;for (i =0 , p =mbr_get_partition (data,0 ); i <MINIX_MAXPARTITIONS ; i++, p++) {
@@ -71,7 +75,7 @@ static int probe_minix_pt(blkid_probe pr, par =blkid_partlist_add_partition (ls, tab, start, size);if (!par) - goto err; + goto nothing;blkid_partition_set_type (par, p->sys_ind);blkid_partition_set_flags (par, p->boot_ind);
libblkid/src/partitions/sgi.c +8 -4
@@ -25,8 +25,12 @@ static int probe_sgi_pt(blkid_probe pr,int i; l = (struct sgi_disklabel *)blkid_probe_get_sector (pr,0 ); -if (!l) - goto nothing; +if (!l) { +if (errno) + goto err; +else + goto nothing; + }if (sgi_pt_checksum (l)) { DBG(LOWPROBE, blkid_debug(
@@ -40,7 +44,7 @@ static int probe_sgi_pt(blkid_probe pr, ls =blkid_probe_get_partlist (pr);if (!ls) - goto err; + goto nothing; tab =blkid_partlist_new_parttable (ls,"sgi" ,0 );if (!tab)
@@ -58,7 +62,7 @@ static int probe_sgi_pt(blkid_probe pr, } par =blkid_partlist_add_partition (ls, tab, start, size);if (!par) - goto err; + goto nothing;blkid_partition_set_type (par, type); }
libblkid/src/partitions/solaris_x86.c +9 -5
@@ -69,8 +69,12 @@ static int probe_solaris_pt(blkid_probe pr,uint16_t nparts; l = (struct solaris_vtoc *)blkid_probe_get_sector (pr,SOLARIS_SECTOR ); -if (!l) - goto nothing; +if (!l) { +if (errno) + goto err; +else + goto nothing; + }if (le32_to_cpu (l->v_version) !=1 ) { DBG(LOWPROBE, blkid_debug(
@@ -85,13 +89,13 @@ static int probe_solaris_pt(blkid_probe pr, ls =blkid_probe_get_partlist (pr);if (!ls) - goto err; + goto nothing; parent =blkid_partlist_get_parent (ls); tab =blkid_partlist_new_parttable (ls,"solaris" ,SOLARIS_OFFSET );if (!tab) - goto err; + goto nothing; nparts =le16_to_cpu (l->v_nparts);if (nparts >SOLARIS_MAXPARTITIONS )
@@ -120,7 +124,7 @@ static int probe_solaris_pt(blkid_probe pr, par =blkid_partlist_add_partition (ls, tab, start, size);if (!par) - goto err; + goto nothing;blkid_partition_set_type (par,le16_to_cpu (p->s_tag));blkid_partition_set_flags (par,le16_to_cpu (p->s_flag));
libblkid/src/partitions/sun.c +9 -5
@@ -27,8 +27,12 @@ static int probe_sun_pt(blkid_probe pr,int i, use_vtoc; l = (struct sun_disklabel *)blkid_probe_get_sector (pr,0 ); -if (!l) - goto nothing; +if (!l) { +if (errno) + goto err; +else + goto nothing; + }if (sun_pt_checksum (l)) { DBG(LOWPROBE, blkid_debug(
@@ -42,11 +46,11 @@ static int probe_sun_pt(blkid_probe pr, ls =blkid_probe_get_partlist (pr);if (!ls) - goto err; + goto nothing; tab =blkid_partlist_new_parttable (ls,"sun" ,0 );if (!tab) - goto err; + goto nothing;/* sectors per cylinder (partition offset is in cylinders...) */ spc =be16_to_cpu (l->nhead) *be16_to_cpu (l->nsect);
@@ -89,7 +93,7 @@ static int probe_sun_pt(blkid_probe pr, } par =blkid_partlist_add_partition (ls, tab, start, size);if (!par) - goto err; + goto nothing;if (type)blkid_partition_set_type (par, type);
libblkid/src/partitions/ultrix.c +10 -6
@@ -44,8 +44,12 @@ static int probe_ultrix_pt(blkid_probe pr,int i; data =blkid_probe_get_sector (pr,ULTRIX_SECTOR ); -if (!data) - goto nothing; +if (!data) { +if (errno) + goto err; +else + goto nothing; + } l = (struct ultrix_disklabel *) (data +ULTRIX_OFFSET );
@@ -55,7 +59,7 @@ static int probe_ultrix_pt(blkid_probe pr,if (blkid_probe_set_magic (pr, (ULTRIX_SECTOR <<9 ) +ULTRIX_OFFSET ,sizeof (ULTRIX_MAGIC_STR ) -1 , (unsigned char *)ULTRIX_MAGIC_STR )) - goto err; + goto nothing;if (blkid_partitions_need_typeonly (pr))/* caller does not ask for details about partitions */
@@ -63,11 +67,11 @@ static int probe_ultrix_pt(blkid_probe pr, ls =blkid_probe_get_partlist (pr);if (!ls) - goto err; + goto nothing; tab =blkid_partlist_new_parttable (ls,"ultrix" ,0 );if (!tab) - goto err; + goto nothing;for (i =0 ; i <ULTRIX_MAXPARTITIONS ; i++) {if (!l->pt_part[i].pi_nblocks)
@@ -76,7 +80,7 @@ static int probe_ultrix_pt(blkid_probe pr,if (!blkid_partlist_add_partition (ls, tab, l->pt_part[i].pi_blkoff, l->pt_part[i].pi_nblocks)) - goto err; + goto nothing; } }
libblkid/src/partitions/unixware.c +9 -5
@@ -106,8 +106,12 @@ static int probe_unixware_pt(blkid_probe pr, l = (struct unixware_disklabel *)blkid_probe_get_sector (pr,UNIXWARE_SECTOR ); -if (!l) - goto nothing; +if (!l) { +if (errno) + goto err; +else + goto nothing; + }if (le32_to_cpu (l->vtoc.v_magic) !=UNIXWARE_VTOCMAGIC ) goto nothing;
@@ -118,13 +122,13 @@ static int probe_unixware_pt(blkid_probe pr, ls =blkid_probe_get_partlist (pr);if (!ls) - goto err; + goto nothing; parent =blkid_partlist_get_parent (ls); tab =blkid_partlist_new_parttable (ls,"unixware" ,UNIXWARE_OFFSET );if (!tab) - goto err; + goto nothing;/* Skip the first partition that describe whole disk */
@@ -155,7 +159,7 @@ static int probe_unixware_pt(blkid_probe pr, par =blkid_partlist_add_partition (ls, tab, start, size);if (!par) - goto err; + goto nothing;blkid_partition_set_type (par, tag);blkid_partition_set_flags (par, flg);
libblkid/src/superblocks/adaptec_raid.c +8 -7
@@ -80,10 +80,10 @@ static int probe_adraid(blkid_probe pr,struct adaptec_metadata *ad;if (pr->size <0x10000 ) -return -1 ; +return 1 ;if (!S_ISREG (pr->mode) && !blkid_probe_is_wholedisk (pr)) -return -1 ; +return 1 ; off = ((pr->size /0x200 )-1 ) *0x200 ; ad = (struct adaptec_metadata *)
@@ -91,16 +91,17 @@ static int probe_adraid(blkid_probe pr, off, sizeof(struct adaptec_metadata));if (!ad) -return -1 ; +return errno ?-1 :1 ; +if (ad->smagic !=be32_to_cpu (AD_SIGNATURE )) -return -1 ; +return 1 ;if (ad->b0idcode !=be32_to_cpu (AD_MAGIC )) -return -1 ; +return 1 ;if (blkid_probe_sprintf_version (pr,"%u" , ad->resver) !=0 ) -return -1 ; +return 1 ;if (blkid_probe_set_magic (pr, off,sizeof (ad->b0idcode), (unsigned char *) &ad->b0idcode)) -return -1 ; +return 1 ;return 0 ; }
libblkid/src/superblocks/bcache.c +2 -2
@@ -104,7 +104,7 @@ static int probe_bcache (blkid_probe pr, const struct blkid_idmag *mag) bcs = blkid_probe_get_sb(pr, mag, struct bcache_super_block);if (!bcs) -return -1 ; +return errno ?-1 :1 ;if (le64_to_cpu (bcs->offset) !=BCACHE_SB_OFF /512 )return 1 ;
@@ -112,7 +112,7 @@ static int probe_bcache (blkid_probe pr, const struct blkid_idmag *mag)return 1 ;if (blkid_probe_set_uuid (pr, bcs->uuid) <0 ) -return -1 ; +return 1 ;return 0 ; };
libblkid/src/superblocks/befs.c +12 -12
@@ -264,7 +264,7 @@ static int64_t get_key_value(blkid_probe pr, const struct befs_super_block *bs, bh = (struct bplustree_header *)get_tree_node (pr, bs, &bi->data,0 ,sizeof (struct bplustree_header ), fs_le);if (!bh) -return -1 ; +return errno ?-1 :1 ;if ((int32_t )FS32_TO_CPU (bh->magic, fs_le) !=BPLUSTREE_MAGIC )return -1 ;
@@ -275,7 +275,7 @@ static int64_t get_key_value(blkid_probe pr, const struct befs_super_block *bs, bn = (struct bplustree_node *)get_tree_node (pr, bs, &bi->data, node_pointer,FS32_TO_CPU (bh->node_size, fs_le), fs_le);if (!bn) -return -1 ; +return errno ?-1 :1 ; keylengths = (uint16_t *) ((uint8_t *) bn + ((sizeof(struct bplustree_node)
@@ -336,10 +336,10 @@ static int get_uuid(blkid_probe pr, const struct befs_super_block *bs, bi = (struct befs_inode *)get_block_run (pr, bs, &bs->root_dir, fs_le);if (!bi) -return -1 ; +return errno ?-1 :1 ;if (FS32_TO_CPU (bi->magic1, fs_le) !=INODE_MAGIC1 ) -return -1 ; +return 1 ; sd = (struct small_data *) bi->small_data;
@@ -376,10 +376,10 @@ static int get_uuid(blkid_probe pr, const struct befs_super_block *bs, bi = (struct befs_inode *)get_block_run (pr, bs, &bi->attributes, fs_le);if (!bi) -return -1 ; +return errno ?-1 :1 ;if (FS32_TO_CPU (bi->magic1, fs_le) !=INODE_MAGIC1 ) -return -1 ; +return 1 ; value =get_key_value (pr, bs, bi,KEY_NAME , fs_le);
@@ -390,10 +390,10 @@ static int get_uuid(blkid_probe pr, const struct befs_super_block *bs, value <<FS32_TO_CPU (bs->block_shift, fs_le), FS32_TO_CPU(bs->block_size, fs_le));if (!bi) -return -1 ; +return errno ?-1 :1 ;if (FS32_TO_CPU (bi->magic1, fs_le) !=INODE_MAGIC1 ) -return -1 ; +return 1 ;if (FS32_TO_CPU (bi->type, fs_le) ==B_UINT64_TYPE && FS64_TO_CPU(bi->data.size, fs_le) == KEY_SIZE
@@ -404,7 +404,7 @@ static int get_uuid(blkid_probe pr, const struct befs_super_block *bs, attr_data = (uint64_t *)get_block_run (pr, bs, &bi->data.direct[0 ], fs_le);if (!attr_data) -return -1 ; +return errno ?-1 :1 ; *uuid = *attr_data; }
@@ -424,7 +424,7 @@ static int probe_befs(blkid_probe pr, const struct blkid_idmag *mag) mag->sboff -B_OS_NAME_LENGTH , sizeof(struct befs_super_block));if (!bs) -return -1 ; +return errno ?-1 :1 ;if (le32_to_cpu (bs->magic1) ==SUPER_BLOCK_MAGIC1 && le32_to_cpu(bs->magic2) == SUPER_BLOCK_MAGIC2
@@ -439,11 +439,11 @@ static int probe_befs(blkid_probe pr, const struct blkid_idmag *mag) fs_le =0 ; version ="big-endian" ; }else -return -1 ; +return 1 ; ret =get_uuid (pr, bs, &volume_id, fs_le); -if (ret <0 ) +if (ret !=0 )return ret;/*
libblkid/src/superblocks/btrfs.c +1 -1
@@ -65,7 +65,7 @@ static int probe_btrfs(blkid_probe pr, const struct blkid_idmag *mag) bfs = blkid_probe_get_sb(pr, mag, struct btrfs_super_block);if (!bfs) -return -1 ; +return errno ?-1 :1 ;if (*bfs->label) blkid_probe_set_label(pr,
libblkid/src/superblocks/cramfs.c +1 -1
@@ -40,7 +40,7 @@ static int probe_cramfs(blkid_probe pr, const struct blkid_idmag *mag) cs = blkid_probe_get_sb(pr, mag, struct cramfs_super);if (!cs) -return -1 ; +return errno ?-1 :1 ;blkid_probe_set_label (pr, cs->name,sizeof (cs->name));return 0 ;
libblkid/src/superblocks/ddf_raid.c +11 -8
@@ -81,7 +81,7 @@ static int probe_ddf(blkid_probe pr,uint64_t off, lba;if (pr->size <0x30000 ) -return -1 ; +return 1 ;for (i =0 ; i <ARRAY_SIZE (hdrs); i++) { off = ((pr->size /0x200 ) - hdrs[i]) *0x200 ;
@@ -90,8 +90,7 @@ static int probe_ddf(blkid_probe pr, off, sizeof(struct ddf_header));if (!ddf) -return -1 ; - +return errno ?-1 :1 ;if (ddf->signature ==cpu_to_be32 (DDF_MAGIC ) || ddf->signature ==cpu_to_le32 (DDF_MAGIC ))break ;
@@ -99,7 +98,7 @@ static int probe_ddf(blkid_probe pr, }if (!ddf) -return -1 ; +return 1 ; lba = ddf->signature ==cpu_to_be32 (DDF_MAGIC ) ? be64_to_cpu(ddf->primary_lba) :
@@ -111,8 +110,12 @@ static int probe_ddf(blkid_probe pr, buf =blkid_probe_get_buffer (pr, lba <<9 ,sizeof (ddf->signature)); -if (!buf ||memcmp (buf, &ddf->signature,4 )) -return -1 ; +if (!buf) { +if (errno) +return -1 ; +if (memcmp (buf, &ddf->signature,4 )) +return 1 ; + } }blkid_probe_strncpy_uuid (pr, ddf->guid,sizeof (ddf->guid));
@@ -121,11 +124,11 @@ static int probe_ddf(blkid_probe pr, *(version +sizeof (ddf->ddf_rev)) ='\0' ;if (blkid_probe_set_version (pr, version) !=0 ) -return -1 ; +return 1 ;if (blkid_probe_set_magic (pr, off,sizeof (ddf->signature), (unsigned char *) &ddf->signature)) -return -1 ; +return 1 ;return 0 ; }
libblkid/src/superblocks/drbd.c +4 -4
@@ -75,18 +75,18 @@ static int probe_drbd(blkid_probe pr,/* Small devices cannot be drbd (?) */ if (pr->size <0x10000 ) -return -1 ; +return 1 ; md = (struct md_on_disk_08 *)blkid_probe_get_buffer (pr, off,sizeof (struct md_on_disk_08 ));if (!md) -return -1 ; +return errno ?-1 :1 ;if (be32_to_cpu (md->magic) !=DRBD_MD_MAGIC_08 &&be32_to_cpu (md->magic) !=DRBD_MD_MAGIC_84_UNCLEAN ) -return -1 ; +return 1 ;/* * DRBD does not have "real" uuids; the following resembles DRBD's
@@ -102,7 +102,7 @@ static int probe_drbd(blkid_probe pr, off + offsetof(struct md_on_disk_08 , magic),sizeof (md->magic), (unsigned char *) &md->magic)) - return -1; + return 1;return 0 ; }
libblkid/src/superblocks/drbdproxy_datalog.c +1 -1
@@ -33,7 +33,7 @@ static int probe_drbdproxy_datalog(blkid_probe pr, lh = (struct log_header_t *)blkid_probe_get_buffer (pr,0 ,sizeof (*lh));if (!lh) -return -1 ; +return errno ?-1 :1 ;blkid_probe_set_uuid (pr, lh->uuid);blkid_probe_sprintf_version (pr,"v%jd" ,le64_to_cpu (lh->version));
libblkid/src/superblocks/exfat.c +3 -1
@@ -115,12 +115,14 @@ static int probe_exfat(blkid_probe pr, const struct blkid_idmag *mag) sb = blkid_probe_get_sb(pr, mag, struct exfat_super_block);if (!sb) -return -1 ; +return errno ?-1 :1 ; label =find_label (pr, sb);if (label)blkid_probe_set_utf8label (pr, label->name,min (label->length *2 ,30 ),BLKID_ENC_UTF16LE ); +else if (errno) +return -1 ; blkid_probe_sprintf_uuid(pr, sb->volume_serial, 4, "%02hhX%02hhX-%02hhX%02hhX",
libblkid/src/superblocks/ext.c +15 -15
@@ -198,9 +198,9 @@ static int probe_jbd(blkid_probe pr, es =ext_get_super (pr,NULL , &fi,NULL );if (!es) -return -BLKID_ERR_PARAM ; +return errno ?-1 :1 ;if (!(fi &EXT3_FEATURE_INCOMPAT_JOURNAL_DEV )) -return -BLKID_ERR_PARAM ; +return 1 ;ext_get_info (pr,2 , es);blkid_probe_set_uuid_as (pr, es->s_uuid,"LOGUUID" );
@@ -216,16 +216,16 @@ static int probe_ext2(blkid_probe pr, es =ext_get_super (pr, &fc, &fi, &frc);if (!es) -return -BLKID_ERR_PARAM ; +return errno ?-1 :1 ;/* Distinguish between ext3 and ext2 */ if (fc &EXT3_FEATURE_COMPAT_HAS_JOURNAL ) -return -BLKID_ERR_PARAM ; +return 1 ;/* Any features which ext2 doesn't understand */ if ((frc &EXT2_FEATURE_RO_COMPAT_UNSUPPORTED ) || (fi &EXT2_FEATURE_INCOMPAT_UNSUPPORTED )) -return -BLKID_ERR_PARAM ; +return 1 ;ext_get_info (pr,2 , es);return 0 ;
@@ -239,16 +239,16 @@ static int probe_ext3(blkid_probe pr, es =ext_get_super (pr, &fc, &fi, &frc);if (!es) -return -BLKID_ERR_PARAM ; +return errno ?-1 :1 ;/* ext3 requires journal */ if (!(fc &EXT3_FEATURE_COMPAT_HAS_JOURNAL )) -return -BLKID_ERR_PARAM ; +return 1 ;/* Any features which ext3 doesn't understand */ if ((frc &EXT3_FEATURE_RO_COMPAT_UNSUPPORTED ) || (fi &EXT3_FEATURE_INCOMPAT_UNSUPPORTED )) -return -BLKID_ERR_PARAM ; +return 1 ;ext_get_info (pr,3 , es);return 0 ;
@@ -263,14 +263,14 @@ static int probe_ext4dev(blkid_probe pr, es =ext_get_super (pr, &fc, &fi, &frc);if (!es) -return -BLKID_ERR_PARAM ; +return errno ?-1 :1 ;/* Distinguish from jbd */ if (fi &EXT3_FEATURE_INCOMPAT_JOURNAL_DEV ) -return -BLKID_ERR_PARAM ; +return 1 ;if (!(le32_to_cpu (es->s_flags) &EXT2_FLAGS_TEST_FILESYS )) -return -BLKID_ERR_PARAM ; +return 1 ;ext_get_info (pr,4 , es);return 0 ;
@@ -284,16 +284,16 @@ static int probe_ext4(blkid_probe pr, es =ext_get_super (pr, &fc, &fi, &frc);if (!es) -return -1 ; +return errno ?-1 :1 ;/* Distinguish from jbd */ if (fi &EXT3_FEATURE_INCOMPAT_JOURNAL_DEV ) -return -BLKID_ERR_PARAM ; +return 1 ;/* Ext4 has at least one feature which ext3 doesn't understand */ if (!(frc &EXT3_FEATURE_RO_COMPAT_UNSUPPORTED ) && !(fi &EXT3_FEATURE_INCOMPAT_UNSUPPORTED )) -return -BLKID_ERR_PARAM ; +return 1 ;/* * If the filesystem is a OK for use by in-development
@@ -306,7 +306,7 @@ static int probe_ext4(blkid_probe pr,* ext4dev. */ if (le32_to_cpu (es->s_flags) &EXT2_FLAGS_TEST_FILESYS ) -return -BLKID_ERR_PARAM ; +return 1 ;ext_get_info (pr,4 , es);return 0 ;
libblkid/src/superblocks/f2fs.c +1 -1
@@ -62,7 +62,7 @@ static int probe_f2fs(blkid_probe pr, const struct blkid_idmag *mag) sb = blkid_probe_get_sb(pr, mag, struct f2fs_super_block);if (!sb) -return -1 ; +return errno ?-1 :1 ; major =le16_to_cpu (sb->major_ver); minor =le16_to_cpu (sb->minor_ver);
libblkid/src/superblocks/gfs.c +4 -4
@@ -64,7 +64,7 @@ static int probe_gfs(blkid_probe pr, const struct blkid_idmag *mag) sbd = blkid_probe_get_sb(pr, mag, struct gfs2_sb);if (!sbd) -return -1 ; +return errno ?-1 :1 ;if (be32_to_cpu (sbd->sb_fs_format) ==GFS_FORMAT_FS &&be32_to_cpu (sbd->sb_multihost_format) ==GFS_FORMAT_MULTI )
@@ -78,7 +78,7 @@ static int probe_gfs(blkid_probe pr, const struct blkid_idmag *mag)return 0 ; } -return -1 ; +return 1 ; }static int probe_gfs2 (blkid_probe pr,const struct blkid_idmag *mag)
@@ -87,7 +87,7 @@ static int probe_gfs2(blkid_probe pr, const struct blkid_idmag *mag) sbd = blkid_probe_get_sb(pr, mag, struct gfs2_sb);if (!sbd) -return -1 ; +return errno ?-1 :1 ;if (be32_to_cpu (sbd->sb_fs_format) ==GFS2_FORMAT_FS &&be32_to_cpu (sbd->sb_multihost_format) ==GFS2_FORMAT_MULTI )
@@ -100,7 +100,7 @@ static int probe_gfs2(blkid_probe pr, const struct blkid_idmag *mag)blkid_probe_set_version (pr,"1" );return 0 ; } -return -1 ; +return 1 ; } const struct blkid_idinfo gfs_idinfo =
libblkid/src/superblocks/hfs.c +6 -6
@@ -154,7 +154,7 @@ static int probe_hfs(blkid_probe pr, const struct blkid_idmag *mag) hfs = blkid_probe_get_sb(pr, mag, struct hfs_mdb);if (!hfs) -return -1 ; +return errno ?-1 :1 ;if ((memcmp (hfs->embed_sig,"H+" ,2 ) ==0 ) || (memcmp (hfs->embed_sig,"HX" ,2 ) ==0 ))
@@ -193,7 +193,7 @@ static int probe_hfsplus(blkid_probe pr, const struct blkid_idmag *mag) sbd = blkid_probe_get_sb(pr, mag, struct hfs_mdb);if (!sbd) -return -1 ; +return errno ?-1 :1 ;/* Check for a HFS+ volume embedded in a HFS volume */ if (memcmp (sbd->signature,"BD" ,2 ) ==0 ) {
@@ -218,7 +218,7 @@ static int probe_hfsplus(blkid_probe pr, const struct blkid_idmag *mag) struct hfsplus_vol_header);if (!hfsplus) -return -1 ; +return errno ?-1 :1 ;if ((memcmp (hfsplus->signature,"H+" ,2 ) !=0 ) && (memcmp (hfsplus->signature,"HX" ,2 ) !=0 ))
@@ -228,7 +228,7 @@ static int probe_hfsplus(blkid_probe pr, const struct blkid_idmag *mag) blocksize =be32_to_cpu (hfsplus->blocksize);if (blocksize <HFSPLUS_SECTOR_SIZE ) -return -1 ; +return 1 ;memcpy (extents, hfsplus->cat_file.extents,sizeof (extents)); cat_block =be32_to_cpu (extents[0 ].start_block);
@@ -236,7 +236,7 @@ static int probe_hfsplus(blkid_probe pr, const struct blkid_idmag *mag) buf =blkid_probe_get_buffer (pr, off + ((blkid_loff_t ) cat_block * blocksize),0x2000 );if (!buf) -return 0 ; +return errno ?-1 :0 ; bnode = (struct hfsplus_bheader_record *) &buf[sizeof (struct hfsplus_bnode_descriptor )];
@@ -271,7 +271,7 @@ static int probe_hfsplus(blkid_probe pr, const struct blkid_idmag *mag) (blkid_loff_t ) off + leaf_off, leaf_node_size);if (!buf) -return 0 ; +return errno ?-1 :0 ; descr = (struct hfsplus_bnode_descriptor *) buf; record_count =be16_to_cpu (descr->num_recs);
libblkid/src/superblocks/highpoint_raid.c +6 -6
@@ -30,9 +30,9 @@ static int probe_highpoint45x(blkid_probe pr,uint32_t magic;if (pr->size <0x10000 ) -return -1 ; +return 1 ;if (!S_ISREG (pr->mode) && !blkid_probe_is_wholedisk (pr)) -return -1 ; +return 1 ; off = ((pr->size /0x200 ) -11 ) *0x200 ; hpt = (struct hpt45x_metadata *)
@@ -40,13 +40,13 @@ static int probe_highpoint45x(blkid_probe pr, off, sizeof(struct hpt45x_metadata));if (!hpt) -return -1 ; +return errno ?-1 :1 ; magic =le32_to_cpu (hpt->magic);if (magic !=HPT45X_MAGIC_OK && magic !=HPT45X_MAGIC_BAD ) -return -1 ; +return 1 ;if (blkid_probe_set_magic (pr, off,sizeof (hpt->magic), (unsigned char *) &hpt->magic)) -return -1 ; +return 1 ;return 0 ; }
@@ -54,7 +54,7 @@ static int probe_highpoint37x(blkid_probe pr, const struct blkid_idmag *mag __attribute__((__unused__))) {if (!S_ISREG (pr->mode) && !blkid_probe_is_wholedisk (pr)) -return -1 ; +return 1 ;return 0 ; }
libblkid/src/superblocks/hpfs.c +4 -4
@@ -68,7 +68,7 @@ static int probe_hpfs(blkid_probe pr, const struct blkid_idmag *mag)/* super block */ hs = blkid_probe_get_sb(pr, mag, struct hpfs_super_block);if (!hs) -return -1 ; +return errno ?-1 :1 ; version = hs->version;/* spare super block */
@@ -77,9 +77,9 @@ static int probe_hpfs(blkid_probe pr, const struct blkid_idmag *mag)HPFS_SBSPARE_OFFSET , sizeof(struct hpfs_spare_super));if (!hss) -return -1 ; +return errno ?-1 :1 ;if (memcmp (hss->magic,"\x49\x18\x91\xf9" ,4 ) !=0 ) -return -1 ; +return 1 ;/* boot block (with UUID and LABEL) */ hbb = (struct hpfs_boot_block *)
@@ -87,7 +87,7 @@ static int probe_hpfs(blkid_probe pr, const struct blkid_idmag *mag)0 , sizeof(struct hpfs_boot_block));if (!hbb) -return -1 ; +return errno ?-1 :1 ;if (memcmp (hbb->magic,"\x55\xaa" ,2 ) ==0 &&memcmp (hbb->sig_hpfs,"HPFS" ,4 ) ==0 && hbb->sig_28h ==0x28 ) {
libblkid/src/superblocks/iso9660.c +2 -2
@@ -100,7 +100,7 @@ static int probe_iso9660_hsfs(blkid_probe pr, const struct blkid_idmag *mag) iso = blkid_probe_get_sb(pr, mag, struct high_sierra_volume_descriptor);if (!iso) -return -1 ; +return errno ?-1 :1 ;blkid_probe_set_version (pr,"High Sierra" );blkid_probe_set_label (pr, iso->volume_id,sizeof (iso->volume_id));
@@ -178,7 +178,7 @@ int probe_iso9660(blkid_probe pr, const struct blkid_idmag *mag) iso = blkid_probe_get_sb(pr, mag, struct iso_volume_descriptor);if (!iso) -return -1 ; +return errno ?-1 :1 ;memcpy (label, iso->volume_id,sizeof (label));
libblkid/src/superblocks/isw_raid.c +7 -6
@@ -33,9 +33,9 @@ static int probe_iswraid(blkid_probe pr,struct isw_metadata *isw;if (pr->size <0x10000 ) -return -1 ; +return 1 ;if (!S_ISREG (pr->mode) && !blkid_probe_is_wholedisk (pr)) -return -1 ; +return 1 ; off = ((pr->size /0x200 ) -2 ) *0x200 ; isw = (struct isw_metadata *)
@@ -43,15 +43,16 @@ static int probe_iswraid(blkid_probe pr, off, sizeof(struct isw_metadata));if (!isw) -return -1 ; +return errno ?-1 :1 ; +if (memcmp (isw->sig,ISW_SIGNATURE ,sizeof (ISW_SIGNATURE )-1 ) !=0 ) -return -1 ; +return 1 ;if (blkid_probe_sprintf_version (pr,"%6s" , &isw->sig[sizeof (ISW_SIGNATURE )-1 ]) !=0 ) -return -1 ; +return 1 ;if (blkid_probe_set_magic (pr, off,sizeof (isw->sig), (unsigned char *) isw->sig)) -return -1 ; +return 1 ;return 0 ; }
libblkid/src/superblocks/jfs.c +1 -1
@@ -40,7 +40,7 @@ static int probe_jfs(blkid_probe pr, const struct blkid_idmag *mag) js = blkid_probe_get_sb(pr, mag, struct jfs_super_block);if (!js) -return -1 ; +return errno ?-1 :1 ;if (le32_to_cpu (js->js_bsize) != (1U <<le16_to_cpu (js->js_l2bsize)))return 1 ;if (le32_to_cpu (js->js_pbsize) != (1U <<le16_to_cpu (js->js_l2pbsize)))
libblkid/src/superblocks/jmicron_raid.c +7 -6
@@ -32,9 +32,9 @@ static int probe_jmraid(blkid_probe pr,struct jm_metadata *jm;if (pr->size <0x10000 ) -return -1 ; +return 1 ;if (!S_ISREG (pr->mode) && !blkid_probe_is_wholedisk (pr)) -return -1 ; +return 1 ; off = ((pr->size /0x200 ) -1 ) *0x200 ; jm = (struct jm_metadata *)
@@ -42,15 +42,16 @@ static int probe_jmraid(blkid_probe pr, off, sizeof(struct jm_metadata));if (!jm) -return -1 ; +return errno ?-1 :1 ; +if (memcmp (jm->signature,JM_SIGNATURE ,sizeof (JM_SIGNATURE ) -1 ) !=0 ) -return -1 ; +return 1 ;if (blkid_probe_sprintf_version (pr,"%u.%u" , jm->major_version, jm->minor_version) !=0 ) -return -1 ; +return 1 ;if (blkid_probe_set_magic (pr, off,sizeof (jm->signature), (unsigned char *) jm->signature)) -return -1 ; +return 1 ;return 0 ; }
libblkid/src/superblocks/linux_raid.c +27 -19
106 lines not on this page · raw message
libblkid/src/superblocks/lsi_raid.c +5 -5
@@ -30,9 +30,9 @@ static int probe_lsiraid(blkid_probe pr,struct lsi_metadata *lsi;if (pr->size <0x10000 ) -return -1 ; +return 1 ;if (!S_ISREG (pr->mode) && !blkid_probe_is_wholedisk (pr)) -return -1 ; +return 1 ; off = ((pr->size /0x200 ) -1 ) *0x200 ; lsi = (struct lsi_metadata *)
@@ -40,13 +40,13 @@ static int probe_lsiraid(blkid_probe pr, off, sizeof(struct lsi_metadata));if (!lsi) -return -1 ; +return errno ?-1 :1 ;if (memcmp (lsi->sig,LSI_SIGNATURE ,sizeof (LSI_SIGNATURE )-1 ) !=0 ) -return -1 ; +return 1 ;if (blkid_probe_set_magic (pr, off,sizeof (lsi->sig), (unsigned char *) lsi->sig)) -return -1 ; +return 1 ;return 0 ; }
libblkid/src/superblocks/luks.c +1 -1
@@ -45,7 +45,7 @@ static int probe_luks(blkid_probe pr, const struct blkid_idmag *mag) header = blkid_probe_get_sb(pr, mag, struct luks_phdr);if (header ==NULL ) -return -1 ; +return errno ?-1 :1 ;blkid_probe_strncpy_uuid (pr, (unsigned char *) header->uuid,sizeof (header->uuid));
libblkid/src/superblocks/lvm.c +3 -3
@@ -82,7 +82,7 @@ static int probe_lvm2(blkid_probe pr, const struct blkid_idmag *mag) mag->kboff <<10 , 512 + sizeof(struct lvm2_pv_label_header));if (!buf) -return -1 ; +return errno ?-1 :1 ;/* buf is at 0k or 1k offset; find label inside */ if (memcmp (buf,"LABELONE" ,8 ) ==0 ) {
@@ -128,7 +128,7 @@ static int probe_lvm1(blkid_probe pr, const struct blkid_idmag *mag) label = blkid_probe_get_sb(pr, mag, struct lvm1_pv_label_header);if (!label) -return -1 ; +return errno ?-1 :1 ; version =le16_to_cpu (label->version);if (version !=1 && version !=2 )
@@ -163,7 +163,7 @@ static int probe_verity(blkid_probe pr, const struct blkid_idmag *mag) sb = blkid_probe_get_sb(pr, mag, struct verity_sb);if (sb ==NULL ) -return -1 ; +return errno ?-1 :1 ; version =le32_to_cpu (sb->version);if (version !=1 )
libblkid/src/superblocks/minix.c +10 -8
@@ -80,17 +80,17 @@ static int probe_minix(blkid_probe pr, const struct blkid_idmag *mag)max (sizeof (struct minix_super_block ), sizeof(struct minix3_super_block)));if (!data) -return -1 ; +return errno ?-1 :1 ; version =get_minix_version (data, &swabme);if (version <1 ) -return -1 ; +return 1 ;if (version <=2 ) {struct minix_super_block *sb = (struct minix_super_block *) data;int zones, ninodes, imaps, zmaps, firstz;if (sb->s_imap_blocks ==0 || sb->s_zmap_blocks ==0 ) -return -1 ; +return 1 ; zones = version ==2 ?minix_swab32 (swabme, sb->s_zones) :minix_swab16 (swabme, sb->s_nzones);
@@ -101,15 +101,15 @@ static int probe_minix(blkid_probe pr, const struct blkid_idmag *mag)/* sanity checks to be sure that the FS is really minix */ if (imaps *MINIX_BLOCK_SIZE *8 < ninodes +1 ) -return -1 ; +return 1 ;if (zmaps *MINIX_BLOCK_SIZE *8 < zones - firstz +1 ) -return -1 ; +return 1 ; }else if (version ==3 ) {struct minix3_super_block *sb = (struct minix3_super_block *) data;if (sb->s_imap_blocks ==0 || sb->s_zmap_blocks ==0 ) -return -1 ; +return 1 ; }/* unfortunately, some parts of ext3 is sometimes possible to
@@ -117,8 +117,10 @@ static int probe_minix(blkid_probe pr, const struct blkid_idmag *mag)* string. (For extN magic string and offsets see ext.c.) */ ext =blkid_probe_get_buffer (pr,0x400 +0x38 ,2 ); -if (ext &&memcmp (ext,"\123\357" ,2 ) ==0 ) -return -1 ; +if (!ext) +return errno ?-1 :1 ; +else if (memcmp (ext,"\123\357" ,2 ) ==0 ) +return 1 ;blkid_probe_sprintf_version (pr,"%d" , version);return 0 ;
libblkid/src/superblocks/netware.c +1 -1
@@ -71,7 +71,7 @@ static int probe_netware(blkid_probe pr, const struct blkid_idmag *mag) nw = blkid_probe_get_sb(pr, mag, struct netware_super_block);if (!nw) -return -1 ; +return errno ?-1 :1 ;blkid_probe_set_uuid (pr, nw->SBH_PoolID);
libblkid/src/superblocks/nilfs.c +2 -2
@@ -93,12 +93,12 @@ static int probe_nilfs2(blkid_probe pr, const struct blkid_idmag *mag) sbp = (struct nilfs_super_block *)blkid_probe_get_buffer ( pr,NILFS_SB_OFFSET ,sizeof (struct nilfs_super_block ));if (!sbp) -return -1 ; +return errno ?-1 :1 ;/* backup */ sbb = (struct nilfs_super_block *)blkid_probe_get_buffer ( pr, ((pr->size /0x200 ) -8 ) *0x200 ,sizeof (struct nilfs_super_block ));if (!sbp) -return -1 ; +return errno ?-1 :1 ;/* * Compare two super blocks and set 1 in swp if the secondary
libblkid/src/superblocks/ntfs.c +3 -3
@@ -91,7 +91,7 @@ static int probe_ntfs(blkid_probe pr, const struct blkid_idmag *mag) ns = blkid_probe_get_sb(pr, mag, struct ntfs_super_block);if (!ns) -return -1 ; +return errno ?-1 :1 ;/* * Check bios parameters block
@@ -158,7 +158,7 @@ static int probe_ntfs(blkid_probe pr, const struct blkid_idmag *mag) buf_mft =blkid_probe_get_buffer (pr, off, mft_record_size);if (!buf_mft) -return 1 ; +return errno ?-1 :1 ;if (memcmp (buf_mft,"FILE" ,4 ))return 1 ;
@@ -167,7 +167,7 @@ static int probe_ntfs(blkid_probe pr, const struct blkid_idmag *mag) buf_mft =blkid_probe_get_buffer (pr, off, mft_record_size);if (!buf_mft) -return 1 ; +return errno ?-1 :1 ;if (memcmp (buf_mft,"FILE" ,4 ))return 1 ;
libblkid/src/superblocks/nvidia_raid.c +6 -6
@@ -32,9 +32,9 @@ static int probe_nvraid(blkid_probe pr,struct nv_metadata *nv;if (pr->size <0x10000 ) -return -1 ; +return 1 ;if (!S_ISREG (pr->mode) && !blkid_probe_is_wholedisk (pr)) -return -1 ; +return 1 ; off = ((pr->size /0x200 ) -2 ) *0x200 ; nv = (struct nv_metadata *)
@@ -42,15 +42,15 @@ static int probe_nvraid(blkid_probe pr, off, sizeof(struct nv_metadata));if (!nv) -return -1 ; +return errno ?-1 :1 ;if (memcmp (nv->vendor,NVIDIA_SIGNATURE ,sizeof (NVIDIA_SIGNATURE )-1 ) !=0 ) -return -1 ; +return 1 ;if (blkid_probe_sprintf_version (pr,"%u" ,le16_to_cpu (nv->version)) !=0 ) -return -1 ; +return 1 ;if (blkid_probe_set_magic (pr, off,sizeof (nv->vendor), (unsigned char *) nv->vendor)) -return -1 ; +return 1 ;return 0 ; }
libblkid/src/superblocks/ocfs.c +4 -4
@@ -109,14 +109,14 @@ static int probe_ocfs(blkid_probe pr, const struct blkid_idmag *mag) buf =blkid_probe_get_buffer (pr, mag->kboff <<10 ,sizeof (struct ocfs_volume_header ));if (!buf) -return -1 ; +return errno ?-1 :1 ;memcpy (&ovh, buf,sizeof (ovh));/* label */ buf =blkid_probe_get_buffer (pr, (mag->kboff <<10 ) +512 ,sizeof (struct ocfs_volume_label ));if (!buf) -return -1 ; +return errno ?-1 :1 ;memcpy (&ovl, buf,sizeof (ovl)); maj =ocfsmajor (ovh);
@@ -144,7 +144,7 @@ static int probe_ocfs2(blkid_probe pr, const struct blkid_idmag *mag) osb = blkid_probe_get_sb(pr, mag, struct ocfs2_super_block);if (!osb) -return -1 ; +return errno ?-1 :1 ;blkid_probe_set_label (pr, (unsigned char *) osb->s_label,sizeof (osb->s_label));blkid_probe_set_uuid (pr, osb->s_uuid);
@@ -162,7 +162,7 @@ static int probe_oracleasm(blkid_probe pr, const struct blkid_idmag *mag) dl = blkid_probe_get_sb(pr, mag, struct oracle_asm_disk_label);if (!dl) -return -1 ; +return errno ?-1 :1 ;blkid_probe_set_label (pr, (unsigned char *) dl->dl_id,sizeof (dl->dl_id));return 0 ;
libblkid/src/superblocks/promise_raid.c +5 -5
@@ -33,9 +33,9 @@ static int probe_pdcraid(blkid_probe pr, };if (pr->size <0x40000 ) -return -1 ; +return 1 ;if (!S_ISREG (pr->mode) && !blkid_probe_is_wholedisk (pr)) -return -1 ; +return 1 ;for (i =0 ; sectors[i] !=0 ; i++) {uint64_t off;
@@ -47,18 +47,18 @@ static int probe_pdcraid(blkid_probe pr, off, sizeof(struct promise_metadata));if (!pdc) -return -1 ; +return errno ?-1 :1 ;if (memcmp (pdc->sig,PDC_SIGNATURE ,sizeof (PDC_SIGNATURE ) -1 ) ==0 ) {if (blkid_probe_set_magic (pr, off,sizeof (pdc->sig), (unsigned char *) pdc->sig)) -return -1 ; +return 1 ;return 0 ; } } -return -1 ; +return 1 ; }const struct blkid_idinfo pdcraid_idinfo = {
libblkid/src/superblocks/reiserfs.c +4 -4
@@ -45,17 +45,17 @@ static int probe_reiser(blkid_probe pr, const struct blkid_idmag *mag) rs = blkid_probe_get_sb(pr, mag, struct reiserfs_super_block);if (!rs) -return -1 ; +return errno ?-1 :1 ; blocksize =le16_to_cpu (rs->rs_blocksize);/* The blocksize must be at least 512B */ if ((blocksize >>9 ) ==0 ) -return -BLKID_ERR_PARAM ; +return 1 ;/* If the superblock is inside the journal, we have the wrong one */ if (mag->kboff / (blocksize >>9 ) >le32_to_cpu (rs->rs_journal_block) /2 ) -return -BLKID_ERR_BIG ; +return 1 ;/* LABEL/UUID are only valid for later versions of Reiserfs v3.6. */ if (mag->magic[6 ] =='2' || mag->magic[6 ] =='3' ) {
@@ -82,7 +82,7 @@ static int probe_reiser4(blkid_probe pr, const struct blkid_idmag *mag) rs4 = blkid_probe_get_sb(pr, mag, struct reiser4_super_block);if (!rs4) -return -1 ; +return errno ?-1 :1 ;if (*rs4->rs4_label)blkid_probe_set_label (pr, rs4->rs4_label,sizeof (rs4->rs4_label));
libblkid/src/superblocks/romfs.c +1 -1
@@ -29,7 +29,7 @@ static int probe_romfs(blkid_probe pr, const struct blkid_idmag *mag) ros = blkid_probe_get_sb(pr, mag, struct romfs_super_block);if (!ros) -return -1 ; +return errno ?-1 :1 ;if (strlen ((char *) ros->ros_volume)) blkid_probe_set_label(pr, ros->ros_volume,
libblkid/src/superblocks/silicon_raid.c +5 -5
@@ -88,9 +88,9 @@ static int probe_silraid(blkid_probe pr,struct silicon_metadata *sil;if (pr->size <0x10000 ) -return -1 ; +return 1 ;if (!S_ISREG (pr->mode) && !blkid_probe_is_wholedisk (pr)) -return -1 ; +return 1 ; off = ((pr->size /0x200 ) -1 ) *0x200 ;
@@ -98,7 +98,7 @@ static int probe_silraid(blkid_probe pr,blkid_probe_get_buffer (pr, off,sizeof (struct silicon_metadata ));if (!sil) -return -1 ; +return errno ?-1 :1 ;if (le32_to_cpu (sil->magic) !=SILICON_MAGIC )return 1 ;
@@ -110,13 +110,13 @@ static int probe_silraid(blkid_probe pr,if (blkid_probe_sprintf_version (pr,"%u.%u" ,le16_to_cpu (sil->major_ver),le16_to_cpu (sil->minor_ver)) !=0 ) -return -1 ; +return 1 ;if (blkid_probe_set_magic (pr, off + offsetof(struct silicon_metadata , magic),sizeof (sil->magic), (unsigned char *) &sil->magic)) -return -1 ; +return 1 ;return 0 ; }
libblkid/src/superblocks/squashfs.c +1 -1
@@ -34,7 +34,7 @@ static int probe_squashfs(blkid_probe pr, const struct blkid_idmag *mag) sq = blkid_probe_get_sb(pr, mag, struct sqsh_super_block);if (!sq) -return -1 ; +return errno ?-1 :1 ;if (strcmp (mag->magic,"sqsh" ) ==0 ||strcmp (mag->magic,"qshs" ) ==0 )
libblkid/src/superblocks/swap.c +12 -12
@@ -44,27 +44,27 @@ static int swap_set_info(blkid_probe pr, const char *version) hdr = (struct swap_header_v1_2 *)blkid_probe_get_buffer (pr,1024 ,sizeof (struct swap_header_v1_2 ));if (!hdr) -return -1 ; +return errno ?-1 :1 ;/* SWAPSPACE2 - check for wrong version or zeroed pagecount */ -if (strcmp (version,"1" ) ==0 ) { +if (strcmp (version,"2" ) ==0 ) {if (hdr->version !=1 &&swab32 (hdr->version) !=1 ) {DBG (LOWPROBE ,blkid_debug ("incorrect swap version" )); -return -1 ; +return 1 ; }if (hdr->lastpage ==0 ) {DBG (LOWPROBE ,blkid_debug ("not set last swap page" )); -return -1 ; +return 1 ; } - } + }/* arbitrary sanity check.. is there any garbage down there? */ if (hdr->padding[32 ] ==0 && hdr->padding[33 ] ==0 ) {if (hdr->volume[0 ] &&blkid_probe_set_label (pr, hdr->volume,sizeof (hdr->volume)) <0 ) -return -1 ; +return 1 ;if (blkid_probe_set_uuid (pr, hdr->uuid) <0 ) -return -1 ; +return 1 ; }blkid_probe_set_version (pr, version);
@@ -76,12 +76,12 @@ static int probe_swap(blkid_probe pr, const struct blkid_idmag *mag)unsigned char *buf;if (!mag) -return -1 ; +return 1 ;/* TuxOnIce keeps valid swap header at the end of the 1st page */ buf =blkid_probe_get_buffer (pr,0 ,TOI_MAGIC_STRLEN );if (!buf) -return -1 ; +return errno ?-1 :1 ;if (memcmp (buf,TOI_MAGIC_STRING ,TOI_MAGIC_STRLEN ) ==0 )return 1 ;/* Ignore swap signature, it's TuxOnIce */
@@ -94,13 +94,13 @@ static int probe_swap(blkid_probe pr, const struct blkid_idmag *mag) }else if (!memcmp (mag->magic,"SWAPSPACE2" , mag->len))return swap_set_info (pr,"1" ); -return -1 ; +return 1 ; }static int probe_swsuspend (blkid_probe pr,const struct blkid_idmag *mag) {if (!mag) -return -1 ; +return 1 ;if (!memcmp (mag->magic,"S1SUSPEND" , mag->len))return swap_set_info (pr,"s1suspend" );if (!memcmp (mag->magic,"S2SUSPEND" , mag->len))
@@ -112,7 +112,7 @@ static int probe_swsuspend(blkid_probe pr, const struct blkid_idmag *mag)if (!memcmp (mag->magic,"LINHIB0001" , mag->len))return swap_set_info (pr,"linhib0001" ); -return -1 ;/* no signature detected */ +return 1 ;/* no signature detected */ } const struct blkid_idinfo swap_idinfo =
libblkid/src/superblocks/sysv.c +4 -4
@@ -80,7 +80,7 @@ static int probe_xenix(blkid_probe pr, const struct blkid_idmag *mag) sb = blkid_probe_get_sb(pr, mag, struct xenix_super_block);if (!sb) -return -1 ; +return errno ?-1 :1 ;blkid_probe_set_label (pr, sb->s_fname,sizeof (sb->s_fname));return 0 ; }
@@ -105,21 +105,21 @@ static int probe_sysv(blkid_probe pr, off, sizeof(struct sysv_super_block));if (!sb) -return -1 ; +return errno ?-1 :1 ;if (sb->s_magic ==cpu_to_le32 (0xfd187e20 ) || sb->s_magic ==cpu_to_be32 (0xfd187e20 )) {if (blkid_probe_set_label (pr, sb->s_fname,sizeof (sb->s_fname))) -return -1 ; +return 1 ;if (blkid_probe_set_magic (pr, off + offsetof(struct sysv_super_block , s_magic),sizeof (sb->s_magic), (unsigned char *) &sb->s_magic)) -return -1 ; +return 1 ;return 0 ; }
libblkid/src/superblocks/ubifs.c +1 -1
@@ -99,7 +99,7 @@ static int probe_ubifs(blkid_probe pr, const struct blkid_idmag *mag) sb = blkid_probe_get_sb(pr, mag, struct ubifs_sb_node);if (!sb) -return -1 ; +return errno ?-1 :1 ;blkid_probe_set_uuid (pr, sb->uuid); blkid_probe_sprintf_version(pr, "w%dr%d",
libblkid/src/superblocks/udf.c +8 -8
@@ -85,11 +85,11 @@ static int probe_udf(blkid_probe pr,UDF_VSD_OFFSET + b, sizeof(*vsd));if (!vsd) -return 1 ; +return errno ?-1 :1 ;if (vsd->id[0 ] !='\0' ) goto nsr; } -return -1 ; +return 1 ; nsr:/* search the list of VSDs for a NSR descriptor */
@@ -99,15 +99,15 @@ nsr:UDF_VSD_OFFSET + ((blkid_loff_t ) b *0x800 ), sizeof(*vsd));if (!vsd) -return -1 ; +return errno ?-1 :1 ;if (vsd->id[0 ] =='\0' ) -return -1 ; +return 1 ;if (memcmp (vsd->id,"NSR02" ,5 ) ==0 ) goto anchor;if (memcmp (vsd->id,"NSR03" ,5 ) ==0 ) goto anchor; } -return -1 ; +return 1 ; anchor:/* read Anchor Volume Descriptor (AVDP), checking block size */
@@ -115,7 +115,7 @@ anchor: vd = (struct volume_descriptor *)blkid_probe_get_buffer (pr,256 * pbs[i],sizeof (*vd));if (!vd) -return -1 ; +return errno ?-1 :1 ; type =le16_to_cpu (vd->tag.id);if (type ==2 )/* TAG_ID_AVDP */
@@ -138,7 +138,7 @@ real_blksz: (blkid_loff_t) (loc + b) * bs, sizeof(*vd));if (!vd) -return -1 ; +return errno ?-1 :1 ; }/* Try extract all possible ISO9660 information -- if there is
@@ -155,7 +155,7 @@ real_blksz: (blkid_loff_t) (loc + b) * bs, sizeof(*vd));if (!vd) -return -1 ; +return errno ?-1 :1 ; type =le16_to_cpu (vd->tag.id);if (type ==0 )break ;
libblkid/src/superblocks/ufs.c +2 -2
@@ -185,7 +185,7 @@ static int probe_ufs(blkid_probe pr, offsets[i] *1024 , sizeof(struct ufs_super_block));if (!ufs) -return -1 ; +return errno ?-1 :1 ; magBE =be32_to_cpu (ufs->fs_magic); magLE =le32_to_cpu (ufs->fs_magic);
@@ -231,7 +231,7 @@ found: offsetof(struct ufs_super_block , fs_magic),sizeof (ufs->fs_magic), (unsigned char *) &ufs->fs_magic)) - return -1; + return 1;return 0 ; }
libblkid/src/superblocks/vfat.c +9 -7
@@ -261,10 +261,10 @@ int blkid_probe_is_vfat(blkid_probe pr) ms = blkid_probe_get_sb(pr, mag, struct msdos_super_block);if (!ms) -return 0 ; +return errno ?-1 :0 ; vs = blkid_probe_get_sb(pr, mag, struct vfat_super_block);if (!vs) -return 0 ; +return errno ?-1 :0 ;return fat_valid_superblock (mag, ms, vs,NULL ,NULL ); }
@@ -283,10 +283,12 @@ static int probe_vfat(blkid_probe pr, const struct blkid_idmag *mag) ms = blkid_probe_get_sb(pr, mag, struct msdos_super_block);if (!ms) -return 0 ; +return errno ?-1 :1 ; + vs = blkid_probe_get_sb(pr, mag, struct vfat_super_block);if (!vs) -return 0 ; +return errno ?-1 :1 ; +if (!fat_valid_superblock (mag, ms, vs, &cluster_count, &fat_size))return 1 ;
@@ -376,16 +378,16 @@ static int probe_vfat(blkid_probe pr, const struct blkid_idmag *mag) (blkid_loff_t ) fsinfo_sect * sector_size, sizeof(struct fat32_fsinfo));if (buf ==NULL ) -return -1 ; +return errno ?-1 :1 ; fsinfo = (struct fat32_fsinfo *) buf;if (memcmp (fsinfo->signature1,"\x52\x52\x61\x41" ,4 ) !=0 &&memcmp (fsinfo->signature1,"\x52\x52\x64\x41" ,4 ) !=0 &&memcmp (fsinfo->signature1,"\x00\x00\x00\x00" ,4 ) !=0 ) -return -1 ; +return 1 ;if (memcmp (fsinfo->signature2,"\x72\x72\x41\x61" ,4 ) !=0 &&memcmp (fsinfo->signature2,"\x00\x00\x00\x00" ,4 ) !=0 ) -return -1 ; +return 1 ; } }
libblkid/src/superblocks/via_raid.c +3 -3
@@ -63,7 +63,7 @@ static int probe_viaraid(blkid_probe pr, off, sizeof(struct via_metadata));if (!v) -return -1 ; +return errno ?-1 :1 ;if (le16_to_cpu (v->signature) !=VIA_SIGNATURE )return 1 ;
@@ -73,11 +73,11 @@ static int probe_viaraid(blkid_probe pr,return 1 ;if (blkid_probe_sprintf_version (pr,"%u" , v->version_number) !=0 ) -return -1 ; +return 1 ;if (blkid_probe_set_magic (pr, off,sizeof (v->signature), (unsigned char *) &v->signature)) -return -1 ; +return 1 ;return 0 ; }
libblkid/src/superblocks/vmfs.c +2 -2
@@ -28,7 +28,7 @@ static int probe_vmfs_fs(blkid_probe pr, const struct blkid_idmag *mag) header = blkid_probe_get_sb(pr, mag, struct vmfs_fs_info);if (header ==NULL ) -return -1 ; +return errno ?-1 :1 ;blkid_probe_sprintf_uuid (pr, (unsigned char *) header->uuid,16 , "%02x%02x%02x%02x-%02x%02x%02x%02x-"
@@ -53,7 +53,7 @@ static int probe_vmfs_volume(blkid_probe pr, const struct blkid_idmag *mag) header = blkid_probe_get_sb(pr, mag, struct vmfs_volume_info);if (header ==NULL ) -return -1 ; +return errno ?-1 :1 ;blkid_probe_sprintf_value (pr,"UUID_SUB" , "%02x%02x%02x%02x-%02x%02x%02x%02x-"
libblkid/src/superblocks/vxfs.c +1 -1
@@ -20,7 +20,7 @@ static int probe_vxfs(blkid_probe pr, const struct blkid_idmag *mag) vxs = blkid_probe_get_sb(pr, mag, struct vxfs_super_block);if (!vxs) -return -1 ; +return errno ?-1 :1 ;blkid_probe_sprintf_version (pr,"%u" , (unsigned int ) vxs->vs_version);return 0 ;
libblkid/src/superblocks/xfs.c +3 -3
@@ -164,7 +164,7 @@ static int probe_xfs(blkid_probe pr, const struct blkid_idmag *mag) xs = blkid_probe_get_sb(pr, mag, struct xfs_super_block);if (!xs) -return -1 ; +return errno ?-1 :1 ;if (!xfs_verify_sb (xs))return 1 ;
@@ -249,7 +249,7 @@ static int probe_xfs_log(blkid_probe pr, const struct blkid_idmag *mag) buf =blkid_probe_get_buffer (pr,0 ,256 *1024 );if (!buf) -return -1 ; +return errno ?-1 :1 ;if (memcmp (buf,"XFSB" ,4 ) ==0 )return 1 ;/* this is regular XFS, ignore */
@@ -264,7 +264,7 @@ static int probe_xfs_log(blkid_probe pr, const struct blkid_idmag *mag) } } -return -1 ; +return 1 ; } const struct blkid_idinfo xfs_log_idinfo =
libblkid/src/superblocks/zfs.c +3 -3
@@ -185,7 +185,7 @@ static int probe_zfs(blkid_probe pr,blkid_probe_get_buffer (pr, offset,sizeof (struct zfs_uberblock ));if (ub ==NULL ) -return -1 ; +return errno ?-1 :1 ;if (ub->ub_magic ==UBERBLOCK_MAGIC ) { ub_offset = offset;
@@ -202,7 +202,7 @@ static int probe_zfs(blkid_probe pr, }if (found <4 ) -return -1 ; +return 1 ;/* If we found the 4th uberblock, then we will have exited from the * scanning loop immediately, and ub will be a valid uberblock. */
@@ -214,7 +214,7 @@ static int probe_zfs(blkid_probe pr,if (blkid_probe_set_magic (pr, ub_offset,sizeof (ub->ub_magic), (unsigned char *) &ub->ub_magic)) -return -1 ; +return 1 ;return 0 ; }
Signature · 1 line
1.7.12.4
Karel Zak
maintainerRe: [PATCH 2/2] blkid: convert superblocks to new calling convention
Quoted 4 lines · Hannes Reinecke
libblkid/src/partitions/bsd.c +0
-0@@ -42,14 +42,18 @@ static int probe_bsd_pt(blkid_probe pr, const struct blkid_idmag *mag)return 0 ;
libblkid/src/partitions/bsd.c static int probe_bsd_pt(blkid_probe pr, const struct blkid_idmag *mag) · line 50
Quoted 10 lines
libblkid/src/partitions/bsd.c +6
-2data =blkid_probe_get_sector (pr,BLKID_MAG_SECTOR (mag)); -if (!data) - goto nothing; +if (!data) { +if (errno) + goto err; +else + goto nothing; + }
It would be nice to return the error code (-errno) from the function.
Maybe you can use something like:
int rc = 1; /* default is nothing */
data = blkid_probe_get_sector(pr, BLKID_MAG_SECTOR(mag));
if (!data) {
rc = error ? -errno : 1;
goto done;
}
...
rc = 0; /* success, all probing stuff pass */
done:
return rc;to reduce number of the code lines and number of goto labels and to return the proper return code.
libblkid/src/partitions/bsd.c static int probe_bsd_pt(blkid_probe pr, const struct blkid_idmag *mag) · line 56
Quoted 4 lines
libblkid/src/partitions/bsd.c +1
-1ls =blkid_probe_get_partlist (pr);if (!ls) - goto err; + goto nothing;
hmm.. it usually means malloc() error, I have doubts we want to ignore such errors, it would be probably better to return -ENOMEM in this case.
if (!ls) {
rc = -ENOMEM;
goto done;
}If you do the cleanup then do it for all errors, not for I/O only ;-)
libblkid/src/partitions/bsd.c static int probe_bsd_pt(blkid_probe pr, const struct blkid_idmag *mag) · line 59
Quoted 6 lines
libblkid/src/partitions/bsd.c +6
-0+if (!data) { +if (errno) + goto err; +else + goto leave;/* malformed partition? */ + }
BTW, "else" after "goto" is probably unnecessary, just
if (foo)
goto y;
goto x;Karel
Signature · 2 lines
Karel Zak <[email protected]> http://karelzak.blogspot.com
Re: [PATCH 2/2] blkid: convert superblocks to new calling convention
Quoted 48 lines · Karel Zak
Quoted 4 lines · Hannes Reinecke
libblkid/src/partitions/bsd.c +0
-0@@ -42,14 +42,18 @@ static int probe_bsd_pt(blkid_probe pr, const struct blkid_idmag *mag)return 0 ;libblkid/src/partitions/bsd.c static int probe_bsd_pt(blkid_probe pr, const struct blkid_idmag *mag) · line 50
Quoted 10 lines
libblkid/src/partitions/bsd.c +6
-2data =blkid_probe_get_sector (pr,BLKID_MAG_SECTOR (mag)); -if (!data) - goto nothing; +if (!data) { +if (errno) + goto err; +else + goto nothing; + }It would be nice to return the error code (-errno) from the function.
Maybe you can use something like:
int rc = 1; /* default is nothing */ data = blkid_probe_get_sector(pr, BLKID_MAG_SECTOR(mag)); if (!data) { rc = error ? -errno : 1; goto done; } ... rc = 0; /* success, all probing stuff pass */ done: return rc;to reduce number of the code lines and number of goto labels and to return the proper return code.
libblkid/src/partitions/bsd.c static int probe_bsd_pt(blkid_probe pr, const struct blkid_idmag *mag) · line 56
Quoted 4 lines
libblkid/src/partitions/bsd.c +1
-1ls =blkid_probe_get_partlist (pr);if (!ls) - goto err; + goto nothing;hmm.. it usually means
malloc()error, I have doubts we want to ignore such errors, it would be probably better to return-ENOMEMin this case.
Quoted 7 lines
if (!ls) { rc = -ENOMEM; goto done; }If you do the cleanup then do it for all errors, not for I/O only ;-)
Errm.
Before I attempt this the codebase needs some in-depth cleanup. Main problem here is the inconsistent usage of -1, 0, and 1. The ->probefunc functions use 0 to signal 'not found',
partitions_probe uses the inverse, namely '0' signals found.
And so on and so forth.
Plus there are even some vestiges of an attempted error code handling; BLKID_ERR_* are used occasionally.
It would be good if one could agree on a common strategy here, and audit the code base to adhere to this.
Once that is done we can work on returning correct error codes.
But without that prior step it's virtually impossible.
I would vote for reversing the return values of 'partitions_probe', and auditing the code further up. Hope is that this will be less coding. Alternatively we could inverse the probefunc() callbacks, seeing that this patch touches them anyway.
What do you prefer?
Cheers,
Hannes
Quoted 15 lines
libblkid/src/partitions/bsd.c static int probe_bsd_pt(blkid_probe pr, const struct blkid_idmag *mag) · line 59
Quoted 6 lines
libblkid/src/partitions/bsd.c +6
-0+if (!data) { +if (errno) + goto err; +else + goto leave;/* malformed partition? */ + }BTW, "else" after "goto" is probably unnecessary, just if (foo) goto y; goto x; Karel
Karel Zak
maintainerRe: [PATCH 2/2] blkid: convert superblocks to new calling convention
Quoted 3 lines · Hannes Reinecke
Before I attempt this the codebase needs some in-depth cleanup. Main problem here is the inconsistent usage of -1, 0, and 1. The ->probefunc functions use 0 to signal 'not found',
I see that ->probefunc functions (FS or partition specific functions) use <0 = errors, 1 = not found and 0 = success.
Quoted 8 lines
partitions_probeuses the inverse, namely '0' signals found.And so on and so forth.
Plus there are even some vestiges of an attempted error code handling; BLKID_ERR_* are used occasionally.
It would be good if one could agree on a common strategy here,
The library has too two parts,
1/ original high-level (based on blkid_cache)
2/ low-level (based on blkid_probe, probe.c, partitions/ and
superblocks/)
My suggestion is to care about the low-level part for now.
The low-level part has three layers:
a) API (blkid_do_probe(), blkid_do_safeprobe(), ...)
now:
1 nothing, 0 success, <0 error, -2 ambivalent result
suggestion:
1 nothing, 0 success, -1 error, -2 ambivalent result
+ modify errno only if we return -1 and original errno is still 0 (it means that error has been generated by our library rather rather than a syscall).
Note that this is part of API, so we have to very careful.
b) chain driver (struct blkid_chaindrv, superblock.c and partitions.c)
now:
1 nothing, 0 success, <0 error, -2 ambivalent
my suggestion:
2 ambivalent, 1 nothing, 0 success, <0 error
In a) and b) is small collision between "ambivalent" and "error" return codes. That's mistake that should be fixed.
c) FS/partition specific probing functions:
now:
..mess...
my suggestion:
0 success, <0 error, 1 nothing
where for b) and c) we can return real error codes (e.g. -errno) rather than too generic -1. My suggestion is not to modify errno there. If we want to touch errno then in the top-level library functions (layer a) only. In the b) and c) We need things like
return -EINVAL;
without care about errno.
Quoted 2 lines
and audit the code base to adhere to this.
Once that is done we can work on returning correct error codes.
I think we don't need two iterations.
Quoted 1 line
What do you prefer?
0) make a decision about the return codes
1) add to the code (blkidP.h ?) hint about the codes
2) clean up the code
- start from the layer c) then b) and a)
- from the beginning use real error codes rather than the generic -1, if necessary use -EINVAL, -ENOMEM, etc.
- don't rely on errno to return error codes from probing functions.
(BTW, I'm on #util-linux on freenode IRC if you want to talk about it
more. Maybe I can help you and cleanup some part of the library too, it's my mess ;-))
Karel
Signature · 2 lines
Karel Zak <[email protected]> http://karelzak.blogspot.com