Also pass device_path into GParted_Core::is_busy() (#183)

Will use this extra parameter when determining if a device or partition
containing bcache is busy or not.

Closes #183 - Basic support for bcache
This commit is contained in:
Mike Fleetwood 2022-01-07 08:53:52 +00:00 committed by Curtis Gedak
parent 99d683221d
commit f1920e306b
2 changed files with 15 additions and 14 deletions

View File

@ -99,7 +99,7 @@ private:
void read_uuid( Partition & partition ) ;
void set_mountpoints( Partition & partition );
bool set_mountpoints_helper( Partition & partition, const Glib::ustring & path );
bool is_busy( FSType fstype, const Glib::ustring & path );
bool is_busy(const Glib::ustring& device_path, FSType fstype, const Glib::ustring& partition_path);
void set_used_sectors( Partition & partition, PedDisk* lp_disk );
void mounted_fs_set_used_sectors(Partition& partition);
#ifdef HAVE_LIBPARTED_FS_RESIZE

View File

@ -860,16 +860,16 @@ void GParted_Core::set_device_partitions( Device & device, PedDevice* lp_device,
{
//Try device_name + partition_number
Glib::ustring dmraid_path = device .get_path() + Utils::num_to_str( lp_partition ->num ) ;
partition_is_busy = is_busy(fstype, dmraid_path);
partition_is_busy = is_busy(device.get_path(), fstype, dmraid_path);
//Try device_name + p + partition_number
dmraid_path = device .get_path() + "p" + Utils::num_to_str( lp_partition ->num ) ;
partition_is_busy |= is_busy(fstype, dmraid_path);
partition_is_busy |= is_busy(device.get_path(), fstype, dmraid_path);
}
else
#endif
{
partition_is_busy = is_busy(fstype, partition_path);
partition_is_busy = is_busy(device.get_path(), fstype, partition_path);
}
if (fstype == FS_LUKS)
@ -980,7 +980,7 @@ void GParted_Core::set_device_one_partition( Device & device, PedDevice * lp_dev
device.partitions.clear();
Glib::ustring path = lp_device->path;
bool partition_is_busy = is_busy( fstype, path );
bool partition_is_busy = is_busy(device.get_path(), fstype, path);
Partition * partition_temp = NULL;
if ( fstype == FS_LUKS )
@ -1021,7 +1021,7 @@ void GParted_Core::set_luks_partition( PartitionLUKS & partition )
Glib::ustring mapping_path = DEV_MAPPER_PATH + mapping.name;
std::vector<Glib::ustring> detect_messages;
FSType fstype = detect_filesystem_in_encryption_mapping(mapping_path, detect_messages);
bool fs_busy = is_busy( fstype, mapping_path );
bool fs_busy = is_busy(mapping_path, fstype, mapping_path);
partition.set_luks( mapping_path,
fstype,
@ -1556,8 +1556,9 @@ bool GParted_Core::set_mountpoints_helper( Partition & partition, const Glib::us
return false;
}
// Report whether the partition is busy (mounted/active)
bool GParted_Core::is_busy( FSType fstype, const Glib::ustring & path )
bool GParted_Core::is_busy(const Glib::ustring& device_path, FSType fstype, const Glib::ustring& partition_path)
{
FileSystem * p_filesystem = NULL ;
bool busy = false ;
@ -1568,14 +1569,14 @@ bool GParted_Core::is_busy( FSType fstype, const Glib::ustring & path )
{
case FS::GPARTED:
//Search GParted internal mounted partitions map
busy = Mount_Info::is_dev_mounted( path );
busy = Mount_Info::is_dev_mounted(partition_path);
break ;
case FS::EXTERNAL:
//Call file system specific method
p_filesystem = get_filesystem_object( fstype ) ;
if ( p_filesystem )
busy = p_filesystem -> is_busy( path ) ;
busy = p_filesystem -> is_busy(partition_path) ;
break;
default:
@ -1588,12 +1589,12 @@ bool GParted_Core::is_busy( FSType fstype, const Glib::ustring & path )
//Still search GParted internal mounted partitions map in case an
// unknown file system is mounted
busy = Mount_Info::is_dev_mounted( path );
busy = Mount_Info::is_dev_mounted(partition_path);
// Custom checks for recognised but other not-supported file system types.
busy |= (fstype == FS_LINUX_SWRAID && SWRaid_Info::is_member_active(path));
busy |= (fstype == FS_ATARAID && (SWRaid_Info::is_member_active(path) ||
dmraid.is_member_active(path) ));
busy |= (fstype == FS_LINUX_SWRAID && SWRaid_Info::is_member_active(partition_path));
busy |= (fstype == FS_ATARAID && (SWRaid_Info::is_member_active(partition_path) ||
dmraid.is_member_active(partition_path) ));
}
return busy ;