From 48372f7b55a60cf5bc3e91bf97e02229e95cc47b Mon Sep 17 00:00:00 2001
From: David Zeuthen <davidz@redhat.com>
Date: Thu, 16 Apr 2009 13:04:33 -0400
Subject: [PATCH] properly detect devices with vfat on the whole disk
See https://bugzilla.redhat.com/show_bug.cgi?id=495876
---
src/95-devkit-disks.rules | 3 ---
src/devkit-disks-device.c | 16 ++++++++++++++--
2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/src/95-devkit-disks.rules b/src/95-devkit-disks.rules
index b29e5d0..fb8b745 100644
--- a/src/95-devkit-disks.rules
+++ b/src/95-devkit-disks.rules
@@ -19,9 +19,6 @@ KERNEL=="sr*", ENV{ID_CDROM_MEDIA_TRACK_COUNT}!="?*", GOTO="probe_parttable_end"
#
IMPORT{program}="devkit-disks-part-id $tempnode"
-# clear all ID_FS_USAGE, TYPE if we're a partition table
-ENV{DKD_PART_ID_PARTITION_TABLE_SCHEME}!="", ENV{ID_FS_USAGE}="", ENV{ID_FS_TYPE}=""
-
LABEL="probe_parttable_end"
##############################################################################################################
diff --git a/src/devkit-disks-device.c b/src/devkit-disks-device.c
index 633d716..968ad0d 100644
--- a/src/devkit-disks-device.c
+++ b/src/devkit-disks-device.c
@@ -1691,8 +1691,20 @@ update_info_partition_table (DevkitDisksDevice *device)
if (!device->priv->device_is_partition &&
devkit_device_has_property (device->priv->d, "DKD_PARTITION_TABLE")) {
- devkit_disks_device_set_device_is_partition_table (device, TRUE);
- devkit_disks_device_set_partition_table_scheme (device, devkit_device_get_property (device->priv->d, "DKD_PARTITION_TABLE_SCHEME"));
+ /* Some times we think that vfat on the main block device looks like a Master Boot Record
+ * partition table (the on-disk formats are extremely similar). So if we already have
+ * detected a file system on the main block device and don't have any partitions, then
+ * avoid tagging the device as a partition table.
+ *
+ * See e.g. https://bugzilla.redhat.com/show_bug.cgi?id=495876.
+ */
+ if (device->priv->partition_table_count == 0 &&
+ g_strcmp0 (device->priv->id_usage, "filesystem") == 0) {
+ devkit_disks_device_set_device_is_partition_table (device, FALSE);
+ } else {
+ devkit_disks_device_set_device_is_partition_table (device, TRUE);
+ devkit_disks_device_set_partition_table_scheme (device, devkit_device_get_property (device->priv->d, "DKD_PARTITION_TABLE_SCHEME"));
+ }
} else {
devkit_disks_device_set_partition_table_scheme (device, NULL);
}
--
1.6.2.2