code: func (cephfsVolume *cephfsMounter) SetUpAt(dir string, fsGroup *int64) error {
  	notMnt, err := cephfsVolume.mounter.IsLikelyNotMountPoint(dir)
  	klog.V(4).Infof("CephFS mount set up: %s %v %v", dir, !notMnt, err)
  	if err != nil && !os.IsNotExist(err) {
  		return err
  	}
  	if !notMnt {
  		return nil
  	}
  
  	if err := os.MkdirAll(dir, 0750); err != nil {
  		return err
  	}
  
  	// check whether it belongs to fuse, if not, default to use kernel mount.
  	if cephfsVolume.checkFuseMount() {
  		klog.V(4).Info("CephFS fuse mount.")
  		err = cephfsVolume.execFuseMount(dir)
  		// cleanup no matter if fuse mount fail.
  		keyringPath := cephfsVolume.GetKeyringPath()
  		_, StatErr := os.Stat(keyringPath)
  		if !os.IsNotExist(StatErr) {
  			os.RemoveAll(keyringPath)
  		}
  		if err == nil {
  			// cephfs fuse mount succeeded.
  			return nil
  		}
  		// if cephfs fuse mount failed, fallback to kernel mount.
  		klog.V(2).Infof("CephFS fuse mount failed: %v, fallback to kernel mount.", err)
  
  	}
  	klog.V(4).Info("CephFS kernel mount.")
  
  	err = cephfsVolume.execMount(dir)
  	if err != nil {
  		// cleanup upon failure.
  		mount.CleanupMountPoint(dir, cephfsVolume.mounter, false)
  		return err
  	}
  	return nil
  }
docs: // SetUpAt attaches the disk and bind mounts to the volume path.