Skip to content

Commit be46c45

Browse files
author
wangdk
committed
bug:umount device failed.when device is busy
1 parent eeb804f commit be46c45

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

driver.go

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func NewLvmPersistDriver() *LvmPersistDriver {
4343

4444
logFile, err := os.OpenFile("/var/log/docker-volume-plugins.log", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666)
4545
if err != nil {
46-
fmt.Println(err)
46+
log.Error(err)
4747
}
4848
backend2 := logging.NewLogBackend(logFile, "", 0)
4949

@@ -140,13 +140,20 @@ func (driver *LvmPersistDriver) Create(req volume.Request) volume.Response {
140140
}
141141
//3.persist mount lv to mountPoint
142142
mountPoint := LvmVolumeDir + req.Name
143-
err = syscall.Mkdir(mountPoint, 0750)
143+
cmdArgs = []string{"-p", mountPoint}
144+
cmd = exec.Command("mkdir", cmdArgs...)
145+
_, err = cmd.CombinedOutput()
146+
if err != nil {
147+
log.Error("mkdir local mountpoint failed", err)
148+
return volume.Response{Err: "mkdir mountpoint failedss"}
149+
}
150+
err = syscall.Chmod(mountPoint, 0750)
144151
if err != nil {
145-
log.Error("mkdir mountpoint failed", err)
152+
log.Error("chmod mountpoint failed", err)
146153
return volume.Response{Err: "mkdir mountpoint failedss"}
147154
}
148155
cmdArgs = []string{lvdiskname, mountPoint}
149-
fmt.Println(cmdArgs)
156+
log.Info(cmdArgs)
150157
cmd = exec.Command("mount", cmdArgs...)
151158
if _, err = cmd.CombinedOutput(); err != nil {
152159
log.Error("mount lv failed", err)
@@ -196,26 +203,28 @@ func (driver *LvmPersistDriver) Remove(req volume.Request) volume.Response {
196203
return volume.Response{Err: "remove volume failed"}
197204
}
198205
//1 umount
199-
err := syscall.Unmount(driver.Mounts[req.Name], 0)
200-
if err != nil {
201-
log.Error("unmount lv failed", err)
202-
return volume.Response{Err: "unmount lv failed"}
206+
cmdArgs := []string{"-l",driver.Mounts[req.Name]}
207+
cmd := exec.Command("umount", cmdArgs...)
208+
if _, err := cmd.CombinedOutput(); err != nil {
209+
log.Error("umount lv failed", err)
210+
//return volume.Response{Err: fmt.Sprintf("volum umount failed")}
203211
}
212+
204213
//2 update fstab
205214
content := deviceName + " " + driver.Mounts[req.Name] + " xfs defaults 0 1"
206215
updateFstab(content, true)
207216
//3. remove from vg $lvdiskname -f
208-
cmdArgs := []string{deviceName, "-f"}
209-
cmd := exec.Command("lvremove", cmdArgs...)
210-
if _, err := cmd.CombinedOutput(); err != nil {
217+
cmdArgs = []string{deviceName, "-f"}
218+
cmd = exec.Command("lvremove", cmdArgs...)
219+
if _, err:= cmd.CombinedOutput(); err != nil {
211220
log.Error("remove lv failed", err)
212-
return volume.Response{Err: "remove lv failed"}
221+
//return volume.Response{Err: "remove lv failed"}
213222
}
214223
//remove local dir
215-
err = os.RemoveAll(driver.Mounts[req.Name])
224+
err := os.RemoveAll(driver.Mounts[req.Name])
216225
if err != nil {
217226
log.Error("remove voulme info failed", err)
218-
return volume.Response{Err: "remove local dir failed"}
227+
//return volume.Response{Err: "remove local dir failed"}
219228
}
220229
//1.remove from cache
221230
delete(driver.Volumes, req.Name)
@@ -354,7 +363,7 @@ func removeLineFrom(line string) {
354363
found := false
355364
for i, value := range lines {
356365
if strings.Contains(value, line) {
357-
fmt.Println("found")
366+
358367
lineIndex = i
359368
found = true
360369
break

0 commit comments

Comments
 (0)