Index: /trunk/src/VBox/Additions/linux/sharedfolders/lnkops.c
===================================================================
--- /trunk/src/VBox/Additions/linux/sharedfolders/lnkops.c	(revision 59405)
+++ /trunk/src/VBox/Additions/linux/sharedfolders/lnkops.c	(revision 59406)
@@ -21,9 +21,10 @@
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
 
-# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
+# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0)
+#  if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
 static const char *sf_follow_link(struct dentry *dentry, void **cookie)
-# else
+#  else
 static void *sf_follow_link(struct dentry *dentry, struct nameidata *nd)
-# endif
+#  endif
 {
     struct inode *inode = dentry->d_inode;
@@ -45,13 +46,13 @@
         }
     }
-# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
+#  if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
     return error ? ERR_PTR(error) : (*cookie = path);
-# else
+#  else
     nd_set_link(nd, error ? ERR_PTR(error) : path);
     return NULL;
-# endif
+#  endif
 }
 
-# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
+#  if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
 static void sf_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
 {
@@ -60,16 +61,45 @@
         free_page((unsigned long)page);
 }
-#endif
+#  endif
+
+# else /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) */
+static const char *sf_get_link(struct dentry *dentry, struct inode *inode,
+                               struct delayed_call *done)
+{
+    struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb);
+    struct sf_inode_info *sf_i = GET_INODE_INFO(inode);
+    char *path;
+    int rc;
+
+    if (!dentry)
+        return ERR_PTR(-ECHILD);
+    path = kzalloc(PAGE_SIZE, GFP_KERNEL);
+    if (!path)
+        return ERR_PTR(-ENOMEM);
+    rc = VbglR0SfReadLink(&client_handle, &sf_g->map, sf_i->path, PATH_MAX, path);
+    if (RT_FAILURE(rc))
+    {
+        LogFunc(("VbglR0SfReadLink failed, caller=%s, rc=%Rrc\n", __func__, rc));
+        kfree(path);
+        return ERR_PTR(-EPROTO);
+    }
+    set_delayed_call(done, kfree_link, path);
+    return path;
+}
+# endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) */
 
 struct inode_operations sf_lnk_iops =
 {
     .readlink       = generic_readlink,
+# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0)
+    .get_link       = sf_get_link
+# elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
     .follow_link    = sf_follow_link,
-# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
     .put_link       = free_page_put_link,
 # else
+    .follow_link    = sf_follow_link,
     .put_link       = sf_put_link
 # endif
 };
 
-#endif
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) */
