code: func (d *Driver) Cleanup() error {
  	title := "lcowdriver: cleanup"
  
  	items, err := ioutil.ReadDir(d.dataRoot)
  	if err != nil {
  		if os.IsNotExist(err) {
  			return nil
  		}
  		return err
  	}
  
  	// Note we don't return an error below - it's possible the files
  	// are locked. However, next time around after the daemon exits,
  	// we likely will be able to cleanup successfully. Instead we log
  	// warnings if there are errors.
  	for _, item := range items {
  		if item.IsDir() && strings.HasSuffix(item.Name(), "-removing") {
  			if err := os.RemoveAll(filepath.Join(d.dataRoot, item.Name())); err != nil {
  				logrus.Warnf("%s failed to cleanup %s: %s", title, item.Name(), err)
  			} else {
  				logrus.Infof("%s cleaned up %s", title, item.Name())
  			}
  		}
  	}
  
  	// Cleanup any service VMs we have running, along with their scratch spaces.
  	// We don't take the lock for this as it's taken in terminateServiceVm.
  	for k, v := range d.serviceVms.svms {
  		logrus.Debugf("%s svm entry: %s: %+v", title, k, v)
  		d.terminateServiceVM(k, "cleanup", true)
  	}
  
  	return nil
  }
docs: // Cleanup ensures the information the driver stores is properly removed.
  // We use this opportunity to cleanup any -removing folders which may be
  // still left if the daemon was killed while it was removing a layer.