summaryrefslogtreecommitdiffstats
path: root/core/modules/vmware/patches/vmblock__3.11-9.9__1.0-11.0.patch
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/vmware/patches/vmblock__3.11-9.9__1.0-11.0.patch')
-rw-r--r--core/modules/vmware/patches/vmblock__3.11-9.9__1.0-11.0.patch123
1 files changed, 123 insertions, 0 deletions
diff --git a/core/modules/vmware/patches/vmblock__3.11-9.9__1.0-11.0.patch b/core/modules/vmware/patches/vmblock__3.11-9.9__1.0-11.0.patch
new file mode 100644
index 00000000..dedb2646
--- /dev/null
+++ b/core/modules/vmware/patches/vmblock__3.11-9.9__1.0-11.0.patch
@@ -0,0 +1,123 @@
+--- a/linux/control.c 2013-10-18 19:56:11.000000000 +0200
++++ b/linux/control.c 2014-02-14 16:20:18.667236035 +0100
+@@ -208,17 +208,18 @@
+ VMBlockSetProcEntryOwner(controlProcMountpoint);
+
+ /* Create /proc/fs/vmblock/dev */
+- controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
++ /* controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
+ VMBLOCK_CONTROL_MODE,
+- controlProcDirEntry);
+- if (!controlProcEntry) {
++ controlProcDirEntry);*/
++ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME, VMBLOCK_CONTROL_MODE, controlProcDirEntry, &ControlFileOps);
++ if (controlProcEntry == NULL) {
+ Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n");
+ remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry);
+ remove_proc_entry(VMBLOCK_CONTROL_PROC_DIRNAME, NULL);
+ return -EINVAL;
+ }
+
+- controlProcEntry->proc_fops = &ControlFileOps;
++ /*controlProcEntry->proc_fops = &ControlFileOps;*/
+ return 0;
+ }
+
+@@ -293,7 +294,7 @@
+
+ retval = i < 0 ? -EINVAL : blockOp(name, blocker);
+
+- putname(name);
++ __putname(name);
+
+ return retval;
+ }
+--- a/linux/file.c 2013-10-18 19:56:11.000000000 +0200
++++ b/linux/file.c 2014-02-14 16:20:21.455236098 +0100
+@@ -38,46 +38,6 @@
+ typedef ino_t inode_num_t;
+ #endif
+
+-/* Specifically for our filldir_t callback */
+-typedef struct FilldirInfo {
+- filldir_t filldir;
+- void *dirent;
+-} FilldirInfo;
+-
+-
+-/*
+- *----------------------------------------------------------------------------
+- *
+- * Filldir --
+- *
+- * Callback function for readdir that we use in place of the one provided.
+- * This allows us to specify that each dentry is a symlink, but pass through
+- * everything else to the original filldir function.
+- *
+- * Results:
+- * Original filldir's return value.
+- *
+- * Side effects:
+- * Directory information gets copied to user's buffer.
+- *
+- *----------------------------------------------------------------------------
+- */
+-
+-static int
+-Filldir(void *buf, // IN: Dirent buffer passed from FileOpReaddir
+- const char *name, // IN: Dirent name
+- int namelen, // IN: len of dirent's name
+- loff_t offset, // IN: Offset
+- inode_num_t ino, // IN: Inode number of dirent
+- unsigned int d_type) // IN: Type of file
+-{
+- FilldirInfo *info = buf;
+-
+- /* Specify DT_LNK regardless */
+- return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK);
+-}
+-
+-
+ /* File operations */
+
+ /*
+@@ -166,11 +126,10 @@
+
+ static int
+ FileOpReaddir(struct file *file, // IN
+- void *dirent, // IN
+- filldir_t filldir) // IN
++ struct dir_context *ctx) // IN
+ {
+ int ret;
+- FilldirInfo info;
++
+ struct file *actualFile;
+
+ if (!file) {
+@@ -184,12 +143,10 @@
+ return -EINVAL;
+ }
+
+- info.filldir = filldir;
+- info.dirent = dirent;
+-
+- actualFile->f_pos = file->f_pos;
+- ret = vfs_readdir(actualFile, Filldir, &info);
+- file->f_pos = actualFile->f_pos;
++ /* Ricky Wong Yung Fei:
++ * Manipulation of pos is now handled internally by iterate_dir().
++ */
++ ret = iterate_dir(actualFile, ctx);
+
+ return ret;
+ }
+@@ -237,7 +194,7 @@
+
+
+ struct file_operations RootFileOps = {
+- .readdir = FileOpReaddir,
++ .iterate = FileOpReaddir,
+ .open = FileOpOpen,
+ .release = FileOpRelease,
+ };