|
@@ -38,7 +38,6 @@ type MetaData struct {
|
|
type DeviceSet struct {
|
|
type DeviceSet struct {
|
|
MetaData
|
|
MetaData
|
|
sync.Mutex
|
|
sync.Mutex
|
|
- initialized bool
|
|
|
|
root string
|
|
root string
|
|
devicePrefix string
|
|
devicePrefix string
|
|
TransactionId uint64
|
|
TransactionId uint64
|
|
@@ -450,11 +449,6 @@ func (devices *DeviceSet) AddDevice(hash, baseHash string) error {
|
|
devices.Lock()
|
|
devices.Lock()
|
|
defer devices.Unlock()
|
|
defer devices.Unlock()
|
|
|
|
|
|
- if err := devices.ensureInit(); err != nil {
|
|
|
|
- utils.Debugf("Error init: %s\n", err)
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if devices.Devices[hash] != nil {
|
|
if devices.Devices[hash] != nil {
|
|
return fmt.Errorf("hash %s already exists", hash)
|
|
return fmt.Errorf("hash %s already exists", hash)
|
|
}
|
|
}
|
|
@@ -522,11 +516,6 @@ func (devices *DeviceSet) RemoveDevice(hash string) error {
|
|
devices.Lock()
|
|
devices.Lock()
|
|
defer devices.Unlock()
|
|
defer devices.Unlock()
|
|
|
|
|
|
- if err := devices.ensureInit(); err != nil {
|
|
|
|
- utils.Debugf("\n--->Err: %s\n", err)
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
return devices.removeDevice(hash)
|
|
return devices.removeDevice(hash)
|
|
}
|
|
}
|
|
|
|
|
|
@@ -635,10 +624,6 @@ func (devices *DeviceSet) Shutdown() error {
|
|
utils.Debugf("[devmapper] Shutting down DeviceSet: %s", devices.root)
|
|
utils.Debugf("[devmapper] Shutting down DeviceSet: %s", devices.root)
|
|
defer devices.Unlock()
|
|
defer devices.Unlock()
|
|
|
|
|
|
- if !devices.initialized {
|
|
|
|
- return nil
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
for path, count := range devices.activeMounts {
|
|
for path, count := range devices.activeMounts {
|
|
for i := count; i > 0; i-- {
|
|
for i := count; i > 0; i-- {
|
|
if err := syscall.Unmount(path, 0); err != nil {
|
|
if err := syscall.Unmount(path, 0); err != nil {
|
|
@@ -671,10 +656,6 @@ func (devices *DeviceSet) MountDevice(hash, path string, readOnly bool) error {
|
|
devices.Lock()
|
|
devices.Lock()
|
|
defer devices.Unlock()
|
|
defer devices.Unlock()
|
|
|
|
|
|
- if err := devices.ensureInit(); err != nil {
|
|
|
|
- return fmt.Errorf("Error initializing devmapper: %s", err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if err := devices.activateDeviceIfNeeded(hash); err != nil {
|
|
if err := devices.activateDeviceIfNeeded(hash); err != nil {
|
|
return fmt.Errorf("Error activating devmapper device for '%s': %s", hash, err)
|
|
return fmt.Errorf("Error activating devmapper device for '%s': %s", hash, err)
|
|
}
|
|
}
|
|
@@ -736,9 +717,6 @@ func (devices *DeviceSet) HasDevice(hash string) bool {
|
|
devices.Lock()
|
|
devices.Lock()
|
|
defer devices.Unlock()
|
|
defer devices.Unlock()
|
|
|
|
|
|
- if err := devices.ensureInit(); err != nil {
|
|
|
|
- return false
|
|
|
|
- }
|
|
|
|
return devices.Devices[hash] != nil
|
|
return devices.Devices[hash] != nil
|
|
}
|
|
}
|
|
|
|
|
|
@@ -746,10 +724,6 @@ func (devices *DeviceSet) HasInitializedDevice(hash string) bool {
|
|
devices.Lock()
|
|
devices.Lock()
|
|
defer devices.Unlock()
|
|
defer devices.Unlock()
|
|
|
|
|
|
- if err := devices.ensureInit(); err != nil {
|
|
|
|
- return false
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
info := devices.Devices[hash]
|
|
info := devices.Devices[hash]
|
|
return info != nil && info.Initialized
|
|
return info != nil && info.Initialized
|
|
}
|
|
}
|
|
@@ -758,10 +732,6 @@ func (devices *DeviceSet) HasActivatedDevice(hash string) bool {
|
|
devices.Lock()
|
|
devices.Lock()
|
|
defer devices.Unlock()
|
|
defer devices.Unlock()
|
|
|
|
|
|
- if err := devices.ensureInit(); err != nil {
|
|
|
|
- return false
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
info := devices.Devices[hash]
|
|
info := devices.Devices[hash]
|
|
if info == nil {
|
|
if info == nil {
|
|
return false
|
|
return false
|
|
@@ -774,11 +744,6 @@ func (devices *DeviceSet) SetInitialized(hash string) error {
|
|
devices.Lock()
|
|
devices.Lock()
|
|
defer devices.Unlock()
|
|
defer devices.Unlock()
|
|
|
|
|
|
- if err := devices.ensureInit(); err != nil {
|
|
|
|
- utils.Debugf("\n--->Err: %s\n", err)
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
info := devices.Devices[hash]
|
|
info := devices.Devices[hash]
|
|
if info == nil {
|
|
if info == nil {
|
|
return fmt.Errorf("Unknown device %s", hash)
|
|
return fmt.Errorf("Unknown device %s", hash)
|
|
@@ -800,10 +765,6 @@ func (devices *DeviceSet) Status() *Status {
|
|
|
|
|
|
status := &Status{}
|
|
status := &Status{}
|
|
|
|
|
|
- if err := devices.ensureInit(); err != nil {
|
|
|
|
- return status
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
status.PoolName = devices.getPoolName()
|
|
status.PoolName = devices.getPoolName()
|
|
status.DataLoopback = path.Join(devices.loopbackDir(), "data")
|
|
status.DataLoopback = path.Join(devices.loopbackDir(), "data")
|
|
status.MetadataLoopback = path.Join(devices.loopbackDir(), "metadata")
|
|
status.MetadataLoopback = path.Join(devices.loopbackDir(), "metadata")
|
|
@@ -827,24 +788,18 @@ func (devices *DeviceSet) Status() *Status {
|
|
return status
|
|
return status
|
|
}
|
|
}
|
|
|
|
|
|
-func (devices *DeviceSet) ensureInit() error {
|
|
|
|
- if !devices.initialized {
|
|
|
|
- devices.initialized = true
|
|
|
|
- if err := devices.initDevmapper(); err != nil {
|
|
|
|
- utils.Debugf("\n--->Err: %s\n", err)
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return nil
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func NewDeviceSet(root string) *DeviceSet {
|
|
|
|
|
|
+func NewDeviceSet(root string) (*DeviceSet, error) {
|
|
SetDevDir("/dev")
|
|
SetDevDir("/dev")
|
|
|
|
|
|
- return &DeviceSet{
|
|
|
|
- initialized: false,
|
|
|
|
|
|
+ devices := &DeviceSet{
|
|
root: root,
|
|
root: root,
|
|
MetaData: MetaData{Devices: make(map[string]*DevInfo)},
|
|
MetaData: MetaData{Devices: make(map[string]*DevInfo)},
|
|
activeMounts: make(map[string]int),
|
|
activeMounts: make(map[string]int),
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if err := devices.initDevmapper(); err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return devices, nil
|
|
}
|
|
}
|