| ... | ... |
@@ -272,39 +272,6 @@ func (a *Driver) createDirsFor(id string) error {
|
| 272 | 272 |
return nil |
| 273 | 273 |
} |
| 274 | 274 |
|
| 275 |
-// Helper function to debug EBUSY errors on remove. |
|
| 276 |
-func debugEBusy(mountPath string) (out []string, err error) {
|
|
| 277 |
- // lsof is not part of GNU coreutils. This is a best effort |
|
| 278 |
- // attempt to detect offending processes. |
|
| 279 |
- c := exec.Command("lsof")
|
|
| 280 |
- |
|
| 281 |
- r, err := c.StdoutPipe() |
|
| 282 |
- if err != nil {
|
|
| 283 |
- return nil, fmt.Errorf("Assigning pipes failed with %v", err)
|
|
| 284 |
- } |
|
| 285 |
- |
|
| 286 |
- if err := c.Start(); err != nil {
|
|
| 287 |
- return nil, fmt.Errorf("Starting %s failed with %v", c.Path, err)
|
|
| 288 |
- } |
|
| 289 |
- |
|
| 290 |
- defer func() {
|
|
| 291 |
- waiterr := c.Wait() |
|
| 292 |
- if waiterr != nil && err == nil {
|
|
| 293 |
- err = fmt.Errorf("Waiting for %s failed with %v", c.Path, waiterr)
|
|
| 294 |
- } |
|
| 295 |
- }() |
|
| 296 |
- |
|
| 297 |
- sc := bufio.NewScanner(r) |
|
| 298 |
- for sc.Scan() {
|
|
| 299 |
- entry := sc.Text() |
|
| 300 |
- if strings.Contains(entry, mountPath) {
|
|
| 301 |
- out = append(out, entry, "\n") |
|
| 302 |
- } |
|
| 303 |
- } |
|
| 304 |
- |
|
| 305 |
- return out, nil |
|
| 306 |
-} |
|
| 307 |
- |
|
| 308 | 275 |
// Remove will unmount and remove the given id. |
| 309 | 276 |
func (a *Driver) Remove(id string) error {
|
| 310 | 277 |
a.locker.Lock(id) |
| ... | ... |
@@ -331,10 +298,6 @@ func (a *Driver) Remove(id string) error {
|
| 331 | 331 |
return fmt.Errorf("aufs: unmount error: %s: %v", mountpoint, err)
|
| 332 | 332 |
} |
| 333 | 333 |
if retries >= 5 {
|
| 334 |
- out, debugErr := debugEBusy(mountpoint) |
|
| 335 |
- if debugErr == nil {
|
|
| 336 |
- logrus.Warnf("debugEBusy returned %v", out)
|
|
| 337 |
- } |
|
| 338 | 334 |
return fmt.Errorf("aufs: unmount error after retries: %s: %v", mountpoint, err)
|
| 339 | 335 |
} |
| 340 | 336 |
// If unmount returns EBUSY, it could be a transient error. Sleep and retry. |
| ... | ... |
@@ -353,10 +316,6 @@ func (a *Driver) Remove(id string) error {
|
| 353 | 353 |
if err := os.Rename(mountpoint, tmpMntPath); err != nil && !os.IsNotExist(err) {
|
| 354 | 354 |
if err == syscall.EBUSY {
|
| 355 | 355 |
logrus.Warn("os.Rename err due to EBUSY")
|
| 356 |
- out, debugErr := debugEBusy(mountpoint) |
|
| 357 |
- if debugErr == nil {
|
|
| 358 |
- logrus.Warnf("debugEBusy returned %v", out)
|
|
| 359 |
- } |
|
| 360 | 356 |
} |
| 361 | 357 |
return err |
| 362 | 358 |
} |