mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
devmapper: construct used device ID map from device Hash map
Currently during startup we walk through all the device files and read their device ID and mark in a bitmap that device id is used. We are anyway going through all device files. So we can as well load all that data into device hash map. This will save us little time when container is actually launched later. Also this will help with later patches where cleanup deferred device wants to go through all the devices and see which have been marked for deletion and delete these. So re-organize the code a bit. Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
This commit is contained in:
parent
c1c3475c6a
commit
6b8b4feaa1
1 changed files with 21 additions and 10 deletions
|
@ -375,6 +375,18 @@ func (devices *DeviceSet) lookupDeviceWithLock(hash string) (*devInfo, error) {
|
|||
return info, err
|
||||
}
|
||||
|
||||
// This function relies on that device hash map has been loaded in advance.
|
||||
// Should be called with devices.Lock() held.
|
||||
func (devices *DeviceSet) constructDeviceIDMap() {
|
||||
logrus.Debugf("[deviceset] constructDeviceIDMap()")
|
||||
defer logrus.Debugf("[deviceset] constructDeviceIDMap() END")
|
||||
|
||||
for _, info := range devices.Devices {
|
||||
devices.markDeviceIDUsed(info.DeviceID)
|
||||
logrus.Debugf("Added deviceId=%d to DeviceIdMap", info.DeviceID)
|
||||
}
|
||||
}
|
||||
|
||||
func (devices *DeviceSet) deviceFileWalkFunction(path string, finfo os.FileInfo) error {
|
||||
|
||||
// Skip some of the meta files which are not device files.
|
||||
|
@ -405,19 +417,16 @@ func (devices *DeviceSet) deviceFileWalkFunction(path string, finfo os.FileInfo)
|
|||
hash = ""
|
||||
}
|
||||
|
||||
dinfo := devices.loadMetadata(hash)
|
||||
if dinfo == nil {
|
||||
return fmt.Errorf("Error loading device metadata file %s", hash)
|
||||
if _, err := devices.lookupDevice(hash); err != nil {
|
||||
return fmt.Errorf("Error looking up device %s:%v", hash, err)
|
||||
}
|
||||
|
||||
devices.markDeviceIDUsed(dinfo.DeviceID)
|
||||
logrus.Debugf("Added deviceID=%d to DeviceIDMap", dinfo.DeviceID)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (devices *DeviceSet) constructDeviceIDMap() error {
|
||||
logrus.Debugf("[deviceset] constructDeviceIDMap()")
|
||||
defer logrus.Debugf("[deviceset] constructDeviceIDMap() END")
|
||||
func (devices *DeviceSet) loadDeviceFilesOnStart() error {
|
||||
logrus.Debugf("[deviceset] loadDeviceFilesOnStart()")
|
||||
defer logrus.Debugf("[deviceset] loadDeviceFilesOnStart() END")
|
||||
|
||||
var scan = func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
|
@ -568,10 +577,12 @@ func (devices *DeviceSet) initMetaData() error {
|
|||
|
||||
devices.TransactionID = transactionID
|
||||
|
||||
if err := devices.constructDeviceIDMap(); err != nil {
|
||||
return err
|
||||
if err := devices.loadDeviceFilesOnStart(); err != nil {
|
||||
return fmt.Errorf("devmapper: Failed to load device files:%v", err)
|
||||
}
|
||||
|
||||
devices.constructDeviceIDMap()
|
||||
|
||||
if err := devices.processPendingTransaction(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue