浏览代码

devmapper: Call UdevWait() even in failure path

Currently we set up a cookie and upon failure not call UdevWait(). This
does not cleanup the cookie and associated semaphore and system will
soon max out on total number of semaphores.

To avoid this, call UdevWait() even in failure path which in turn will
cleanup associated semaphore.

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Vincent Batts <vbatts@redhat.com>
Vivek Goyal 10 年之前
父节点
当前提交
edc6df256d
共有 1 个文件被更改,包括 4 次插入6 次删除
  1. 4 6
      pkg/devicemapper/devmapper.go

+ 4 - 6
pkg/devicemapper/devmapper.go

@@ -373,13 +373,12 @@ func CreatePool(poolName string, dataFile, metadataFile *os.File, poolBlockSize
 	if err := task.SetCookie(&cookie, 0); err != nil {
 	if err := task.SetCookie(&cookie, 0); err != nil {
 		return fmt.Errorf("Can't set cookie %s", err)
 		return fmt.Errorf("Can't set cookie %s", err)
 	}
 	}
+	defer UdevWait(cookie)
 
 
 	if err := task.Run(); err != nil {
 	if err := task.Run(); err != nil {
 		return fmt.Errorf("Error running DeviceCreate (CreatePool) %s", err)
 		return fmt.Errorf("Error running DeviceCreate (CreatePool) %s", err)
 	}
 	}
 
 
-	UdevWait(cookie)
-
 	return nil
 	return nil
 }
 }
 
 
@@ -516,13 +515,12 @@ func ResumeDevice(name string) error {
 	if err := task.SetCookie(&cookie, 0); err != nil {
 	if err := task.SetCookie(&cookie, 0); err != nil {
 		return fmt.Errorf("Can't set cookie %s", err)
 		return fmt.Errorf("Can't set cookie %s", err)
 	}
 	}
+	defer UdevWait(cookie)
 
 
 	if err := task.Run(); err != nil {
 	if err := task.Run(); err != nil {
 		return fmt.Errorf("Error running DeviceResume %s", err)
 		return fmt.Errorf("Error running DeviceResume %s", err)
 	}
 	}
 
 
-	UdevWait(cookie)
-
 	return nil
 	return nil
 }
 }
 
 
@@ -596,12 +594,12 @@ func ActivateDevice(poolName string, name string, deviceId int, size uint64) err
 		return fmt.Errorf("Can't set cookie %s", err)
 		return fmt.Errorf("Can't set cookie %s", err)
 	}
 	}
 
 
+	defer UdevWait(cookie)
+
 	if err := task.Run(); err != nil {
 	if err := task.Run(); err != nil {
 		return fmt.Errorf("Error running DeviceCreate (ActivateDevice) %s", err)
 		return fmt.Errorf("Error running DeviceCreate (ActivateDevice) %s", err)
 	}
 	}
 
 
-	UdevWait(cookie)
-
 	return nil
 	return nil
 }
 }