diff --git a/lib/private/Files/Mount/MountPoint.php b/lib/private/Files/Mount/MountPoint.php
index bff1f2e3f0c4655aaa708fa59ed4c37037ad0ed0..26150de2bd18df87d45f34ebc325269381fffbe1 100644
--- a/lib/private/Files/Mount/MountPoint.php
+++ b/lib/private/Files/Mount/MountPoint.php
@@ -152,7 +152,7 @@ class MountPoint implements IMountPoint {
 					// the root storage could not be initialized, show the user!
 					throw new \Exception('The root storage could not be initialized. Please contact your local administrator.', $exception->getCode(), $exception);
 				} else {
-					\OCP\Util::writeLog('core', $exception->getMessage(), \OCP\Util::ERROR);
+					\OC::$server->getLogger()->logException($exception, ['level' => \OCP\Util::ERROR]);
 				}
 				return;
 			}
diff --git a/lib/private/Files/Storage/Home.php b/lib/private/Files/Storage/Home.php
index 57b3234932406715d3b5ed043336476852b05746..d2a979c30206dd2f0ef8b21754680aeebb043c17 100644
--- a/lib/private/Files/Storage/Home.php
+++ b/lib/private/Files/Storage/Home.php
@@ -25,6 +25,7 @@
  */
 
 namespace OC\Files\Storage;
+
 use OC\Files\Cache\HomePropagator;
 
 /**
@@ -43,6 +44,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage {
 
 	/**
 	 * Construct a Home storage instance
+	 *
 	 * @param array $arguments array with "user" containing the
 	 * storage owner
 	 */
@@ -51,7 +53,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage {
 		$datadir = $this->user->getHome();
 		$this->id = 'home::' . $this->user->getUID();
 
-		parent::__construct(array('datadir' => $datadir));
+		parent::__construct(['datadir' => $datadir]);
 	}
 
 	public function getId() {
@@ -90,6 +92,7 @@ class Home extends Local implements \OCP\Files\IHomeStorage {
 
 	/**
 	 * Returns the owner of this home storage
+	 *
 	 * @return \OC\User\User owner of this home storage
 	 */
 	public function getUser() {
diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php
index ba9b15ce931e3fea13f890d51b48169db4edaada..a0e20f4cba139729c6dee60b17a59362bd59abe4 100644
--- a/lib/private/Files/Storage/Local.php
+++ b/lib/private/Files/Storage/Local.php
@@ -59,12 +59,13 @@ class Local extends \OC\Files\Storage\Common {
 		if (!isset($arguments['datadir']) || !is_string($arguments['datadir'])) {
 			throw new \InvalidArgumentException('No data directory set for local storage');
 		}
-		$this->datadir = $arguments['datadir'];
+		$this->datadir = str_replace('//', '/', $arguments['datadir']);
 		// some crazy code uses a local storage on root...
 		if ($this->datadir === '/') {
 			$this->realDataDir = $this->datadir;
 		} else {
-			$this->realDataDir = rtrim(realpath($this->datadir), '/') . '/';
+			$realPath = realpath($this->datadir) ?: $this->datadir;
+			$this->realDataDir = rtrim($realPath, '/') . '/';
 		}
 		if (substr($this->datadir, -1) !== '/') {
 			$this->datadir .= '/';
@@ -361,14 +362,18 @@ class Local extends \OC\Files\Storage\Common {
 	 */
 	public function getSourcePath($path) {
 		$fullPath = $this->datadir . $path;
-		if ($this->allowSymlinks || $path === '') {
+		$currentPath = $path;
+		if ($this->allowSymlinks || $currentPath === '') {
 			return $fullPath;
 		}
 		$pathToResolve = $fullPath;
 		$realPath = realpath($pathToResolve);
 		while ($realPath === false) { // for non existing files check the parent directory
-			$pathToResolve = dirname($pathToResolve);
-			$realPath = realpath($pathToResolve);
+			$currentPath = dirname($currentPath);
+			if ($currentPath === '' || $currentPath === '.') {
+				return $fullPath;
+			}
+			$realPath = realpath($this->datadir . $currentPath);
 		}
 		if ($realPath) {
 			$realPath = $realPath . '/';