diff --git a/open-vm-tools-KMP.changes b/open-vm-tools-KMP.changes index 71a088f..9703405 100644 --- a/open-vm-tools-KMP.changes +++ b/open-vm-tools-KMP.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Feb 19 13:35:44 UTC 2015 - dimstar@opensuse.org + +- Add open-vm-tools-linux-3.19.0.patch: Fix building of vmhgfs with + Kernel 3.19.0+. + ------------------------------------------------------------------- Mon Jan 5 10:07:50 UTC 2015 - dimstar@opensuse.org diff --git a/open-vm-tools-KMP.spec b/open-vm-tools-KMP.spec index d4cac1b..a90650a 100644 --- a/open-vm-tools-KMP.spec +++ b/open-vm-tools-KMP.spec @@ -1,7 +1,7 @@ # # spec file for package open-vm-tools-KMP # -# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # Copyright (c) 2010 Dominique Leuenberger, Amsterdam, Netherlands. # # All modifications and additions to the file contributed by third parties @@ -80,6 +80,7 @@ Patch8: 0008-Fix-segfault-in-vmhgfs.patch Patch10: open-vm-tools-linux-3.17.patch Patch11: open-vm-tools-linux-3.17.7.patch Patch12: open-vm-tools-linux-3.18.0.patch +Patch13: open-vm-tools-linux-3.19.0.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: gcc-c++ # don't use pkgconfig(gtk+-2.0) so we can build on SLE @@ -234,6 +235,7 @@ sed -i -e "s/\r//" README %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 %build %if ! %{KMP} diff --git a/open-vm-tools-linux-3.19.0.patch b/open-vm-tools-linux-3.19.0.patch new file mode 100644 index 0000000..585baec --- /dev/null +++ b/open-vm-tools-linux-3.19.0.patch @@ -0,0 +1,379 @@ +Index: open-vm-tools-9.4.6-1770165/modules/linux/vmhgfs/dir.c +=================================================================== +--- open-vm-tools-9.4.6-1770165.orig/modules/linux/vmhgfs/dir.c ++++ open-vm-tools-9.4.6-1770165/modules/linux/vmhgfs/dir.c +@@ -414,7 +414,7 @@ HgfsPackDirOpenRequest(struct file *file + + /* Build full name to send to server. */ + if (HgfsBuildPath(name, req->bufferSize - (requestSize - 1), +- file->f_dentry) < 0) { ++ file->f_path.dentry) < 0) { + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsPackDirOpenRequest: build path failed\n")); + return -EINVAL; + } +@@ -560,8 +560,8 @@ HgfsPrivateDirRelease(struct file *file, + int result = 0; + + ASSERT(file); +- ASSERT(file->f_dentry); +- ASSERT(file->f_dentry->d_sb); ++ ASSERT(file->f_path.dentry); ++ ASSERT(file->f_path.dentry->d_sb); + + LOG(6, (KERN_DEBUG "VMware hgfs: HgfsPrivateDirRelease: close fh %u\n", handle)); + +@@ -704,7 +704,7 @@ HgfsDirLlseek(struct file *file, + loff_t offset, + int origin) + { +- struct dentry *dentry = file->f_dentry; ++ struct dentry *dentry = file->f_path.dentry; + struct inode *inode = dentry->d_inode; + compat_mutex_t *mtx; + +@@ -853,7 +853,7 @@ HgfsReaddirRefreshEntries(struct file *f + } + + LOG(6, (KERN_DEBUG "VMware hgfs: %s: error: stale handle (%s) return %d)\n", +- __func__, file->f_dentry->d_name.name, result)); ++ __func__, file->f_path.dentry->d_name.name, result)); + return result; + } + +@@ -988,9 +988,9 @@ HgfsReaddirNextEntry(struct file *file, + char *fileName = NULL; + int result; + +- ASSERT(file->f_dentry->d_inode->i_sb); ++ ASSERT(file->f_path.dentry->d_inode->i_sb); + +- si = HGFS_SB_TO_COMMON(file->f_dentry->d_inode->i_sb); ++ si = HGFS_SB_TO_COMMON(file->f_path.dentry->d_inode->i_sb); + *entryIgnore = FALSE; + + /* +@@ -1079,18 +1079,18 @@ HgfsReaddirNextEntry(struct file *file, + */ + if (!strncmp(entryName, ".", sizeof ".")) { + if (!dotAndDotDotIgnore) { +- *entryIno = file->f_dentry->d_inode->i_ino; ++ *entryIno = file->f_path.dentry->d_inode->i_ino; + } else { + *entryIgnore = TRUE; + } + } else if (!strncmp(entryName, "..", sizeof "..")) { + if (!dotAndDotDotIgnore) { +- *entryIno = compat_parent_ino(file->f_dentry); ++ *entryIno = compat_parent_ino(file->f_path.dentry); + } else { + *entryIgnore = TRUE; + } + } else { +- *entryIno = HgfsGetFileInode(&entryAttrs, file->f_dentry->d_inode->i_sb); ++ *entryIno = HgfsGetFileInode(&entryAttrs, file->f_path.dentry->d_inode->i_sb); + } + + if (*entryIgnore) { +@@ -1170,16 +1170,16 @@ HgfsDoReaddir(struct file *file, + ASSERT(filldirCtx); + + if (!file || +- !(file->f_dentry) || +- !(file->f_dentry->d_inode)) { ++ !(file->f_path.dentry) || ++ !(file->f_path.dentry->d_inode)) { + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsReaddir: null input\n")); + return -EFAULT; + } + + LOG(4, (KERN_DEBUG "VMware hgfs: %s(%s, inum %lu, pos %Lu)\n", + __func__, +- file->f_dentry->d_name.name, +- file->f_dentry->d_inode->i_ino, ++ file->f_path.dentry->d_name.name, ++ file->f_path.dentry->d_inode->i_ino, + *currentPos)); + + /* +@@ -1294,7 +1294,7 @@ HgfsReaddir(struct file *file, / + /* If either dot and dotdot are filled in for us we can exit. */ + if (!dir_emit_dots(file, ctx)) { + LOG(6, (KERN_DEBUG "VMware hgfs: %s: dir_emit_dots(%s, @ %Lu)\n", +- __func__, file->f_dentry->d_name.name, ctx->pos)); ++ __func__, file->f_path.dentry->d_name.name, ctx->pos)); + return 0; + } + +@@ -1464,8 +1464,8 @@ HgfsDirRelease(struct inode *inode, // + + ASSERT(inode); + ASSERT(file); +- ASSERT(file->f_dentry); +- ASSERT(file->f_dentry->d_sb); ++ ASSERT(file->f_path.dentry); ++ ASSERT(file->f_path.dentry->d_sb); + + handle = FILE_GET_FI_P(file)->handle; + +Index: open-vm-tools-9.4.6-1770165/modules/linux/vmhgfs/file.c +=================================================================== +--- open-vm-tools-9.4.6-1770165.orig/modules/linux/vmhgfs/file.c ++++ open-vm-tools-9.4.6-1770165/modules/linux/vmhgfs/file.c +@@ -362,7 +362,7 @@ HgfsPackOpenRequest(struct inode *inode, + /* Build full name to send to server. */ + if (HgfsBuildPath(name, + req->bufferSize - (requestSize - 1), +- file->f_dentry) < 0) { ++ file->f_path.dentry) < 0) { + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsPackOpenRequest: build path " + "failed\n")); + return -EINVAL; +@@ -589,8 +589,8 @@ HgfsOpen(struct inode *inode, // IN: In + ASSERT(inode); + ASSERT(inode->i_sb); + ASSERT(file); +- ASSERT(file->f_dentry); +- ASSERT(file->f_dentry->d_inode); ++ ASSERT(file->f_path.dentry); ++ ASSERT(file->f_path.dentry->d_inode); + + iinfo = INODE_GET_II_P(inode); + +@@ -667,7 +667,7 @@ HgfsOpen(struct inode *inode, // IN: In + * This is not the root of our file system so there should always + * be a parent. + */ +- ASSERT(file->f_dentry->d_parent); ++ ASSERT(file->f_path.dentry->d_parent); + + /* + * Here we obtain a reference on the parent to make sure it doesn't +@@ -682,10 +682,10 @@ HgfsOpen(struct inode *inode, // IN: In + * We could do this if we were willing to give up support for + * O_EXCL on 2.4 kernels. + */ +- dparent = dget(file->f_dentry->d_parent); ++ dparent = dget(file->f_path.dentry->d_parent); + iparent = dparent->d_inode; + +- HgfsSetUidGid(iparent, file->f_dentry, ++ HgfsSetUidGid(iparent, file->f_path.dentry, + current_fsuid(), current_fsgid()); + + dput(dparent); +@@ -745,7 +745,7 @@ out: + * forcing a revalidate on one will not force it on any others. + */ + if (result != 0 && iinfo->createdAndUnopened == TRUE) { +- HgfsDentryAgeForce(file->f_dentry); ++ HgfsDentryAgeForce(file->f_path.dentry); + } + return result; + } +@@ -781,12 +781,12 @@ HgfsAioRead(struct kiocb *iocb, // + + ASSERT(iocb); + ASSERT(iocb->ki_filp); +- ASSERT(iocb->ki_filp->f_dentry); ++ ASSERT(iocb->ki_filp->f_path.dentry); + ASSERT(iov); + + LOG(6, (KERN_DEBUG "VMware hgfs: HgfsAioRead: was called\n")); + +- result = HgfsRevalidate(iocb->ki_filp->f_dentry); ++ result = HgfsRevalidate(iocb->ki_filp->f_path.dentry); + if (result) { + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsAioRead: invalid dentry\n")); + goto out; +@@ -832,10 +832,10 @@ HgfsAioWrite(struct kiocb *iocb, // + + ASSERT(iocb); + ASSERT(iocb->ki_filp); +- ASSERT(iocb->ki_filp->f_dentry); ++ ASSERT(iocb->ki_filp->f_path.dentry); + ASSERT(iov); + +- writeDentry = iocb->ki_filp->f_dentry; ++ writeDentry = iocb->ki_filp->f_path.dentry; + iinfo = INODE_GET_II_P(writeDentry->d_inode); + + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsAioWrite(%s/%s, %lu@%Ld)\n", +@@ -915,14 +915,14 @@ HgfsRead(struct file *file, // IN: Fil + int result; + + ASSERT(file); +- ASSERT(file->f_dentry); ++ ASSERT(file->f_path.dentry); + ASSERT(buf); + ASSERT(offset); + + LOG(6, (KERN_DEBUG "VMware hgfs: HgfsRead: read %Zu bytes from fh %u " + "at offset %Lu\n", count, FILE_GET_FI_P(file)->handle, *offset)); + +- result = HgfsRevalidate(file->f_dentry); ++ result = HgfsRevalidate(file->f_path.dentry); + if (result) { + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsRead: invalid dentry\n")); + goto out; +@@ -968,15 +968,15 @@ HgfsWrite(struct file *file, // IN: + int result; + + ASSERT(file); +- ASSERT(file->f_dentry); +- ASSERT(file->f_dentry->d_inode); ++ ASSERT(file->f_path.dentry); ++ ASSERT(file->f_path.dentry->d_inode); + ASSERT(buf); + ASSERT(offset); + + LOG(6, (KERN_DEBUG "VMware hgfs: HgfsWrite: write %Zu bytes to fh %u " + "at offset %Lu\n", count, FILE_GET_FI_P(file)->handle, *offset)); + +- result = HgfsRevalidate(file->f_dentry); ++ result = HgfsRevalidate(file->f_path.dentry); + if (result) { + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsWrite: invalid dentry\n")); + goto out; +@@ -1020,12 +1020,12 @@ HgfsSeek(struct file *file, // IN: Fil + loff_t result = -1; + + ASSERT(file); +- ASSERT(file->f_dentry); ++ ASSERT(file->f_path.dentry); + + LOG(6, (KERN_DEBUG "VMware hgfs: HgfsSeek: seek to %Lu bytes from fh %u " + "from position %d\n", offset, FILE_GET_FI_P(file)->handle, origin)); + +- result = (loff_t) HgfsRevalidate(file->f_dentry); ++ result = (loff_t) HgfsRevalidate(file->f_path.dentry); + if (result) { + LOG(6, (KERN_DEBUG "VMware hgfs: HgfsSeek: invalid dentry\n")); + goto out; +@@ -1108,8 +1108,8 @@ HgfsFlush(struct file *file + int ret = 0; + + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsFlush(%s/%s)\n", +- file->f_dentry->d_parent->d_name.name, +- file->f_dentry->d_name.name)); ++ file->f_path.dentry->d_parent->d_name.name, ++ file->f_path.dentry->d_name.name)); + + if ((file->f_mode & FMODE_WRITE) == 0) { + goto exit; +@@ -1121,7 +1121,7 @@ HgfsFlush(struct file *file + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36) + ret = vfs_fsync(file, 0); + #else +- ret = HgfsDoFsync(file->f_dentry->d_inode); ++ ret = HgfsDoFsync(file->f_path.dentry->d_inode); + #endif + + exit: +@@ -1177,13 +1177,13 @@ HgfsFsync(struct file *file, // IN: Fil + #endif + + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsFsync(%s/%s, %lld, %lld, %d)\n", +- file->f_dentry->d_parent->d_name.name, +- file->f_dentry->d_name.name, ++ file->f_path.dentry->d_parent->d_name.name, ++ file->f_path.dentry->d_name.name, + startRange, endRange, + datasync)); + + /* Flush writes to the server and return any errors */ +- inode = file->f_dentry->d_inode; ++ inode = file->f_path.dentry->d_inode; + #if defined VMW_FSYNC_31 + ret = filemap_write_and_wait_range(inode->i_mapping, startRange, endRange); + #else +@@ -1223,11 +1223,11 @@ HgfsMmap(struct file *file, // IN: File + + ASSERT(file); + ASSERT(vma); +- ASSERT(file->f_dentry); ++ ASSERT(file->f_path.dentry); + + LOG(6, (KERN_DEBUG "VMware hgfs: HgfsMmap: was called\n")); + +- result = HgfsRevalidate(file->f_dentry); ++ result = HgfsRevalidate(file->f_path.dentry); + if (result) { + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsMmap: invalid dentry\n")); + goto out; +@@ -1268,8 +1268,8 @@ HgfsRelease(struct inode *inode, // IN: + + ASSERT(inode); + ASSERT(file); +- ASSERT(file->f_dentry); +- ASSERT(file->f_dentry->d_sb); ++ ASSERT(file->f_path.dentry); ++ ASSERT(file->f_path.dentry->d_sb); + + handle = FILE_GET_FI_P(file)->handle; + LOG(6, (KERN_DEBUG "VMware hgfs: HgfsRelease: close fh %u\n", handle)); +@@ -1398,14 +1398,14 @@ HgfsSendfile(struct file *file, // IN + ssize_t result; + + ASSERT(file); +- ASSERT(file->f_dentry); ++ ASSERT(file->f_path.dentry); + ASSERT(target); + ASSERT(offset); + ASSERT(actor); + + LOG(6, (KERN_DEBUG "VMware hgfs: HgfsSendfile: was called\n")); + +- result = HgfsRevalidate(file->f_dentry); ++ result = HgfsRevalidate(file->f_path.dentry); + if (result) { + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsSendfile: invalid dentry\n")); + goto out; +@@ -1452,11 +1452,11 @@ HgfsSpliceRead(struct file *file, + ssize_t result; + + ASSERT(file); +- ASSERT(file->f_dentry); ++ ASSERT(file->f_path.dentry); + + LOG(6, (KERN_DEBUG "VMware hgfs: HgfsSpliceRead: was called\n")); + +- result = HgfsRevalidate(file->f_dentry); ++ result = HgfsRevalidate(file->f_path.dentry); + if (result) { + LOG(4, (KERN_DEBUG "VMware hgfs: HgfsSpliceRead: invalid dentry\n")); + goto out; +Index: open-vm-tools-9.4.6-1770165/modules/linux/vmhgfs/fsutil.c +=================================================================== +--- open-vm-tools-9.4.6-1770165.orig/modules/linux/vmhgfs/fsutil.c ++++ open-vm-tools-9.4.6-1770165/modules/linux/vmhgfs/fsutil.c +@@ -1936,7 +1936,7 @@ HgfsCreateFileInfo(struct file *file, / + + ASSERT(file); + +- inodeInfo = INODE_GET_II_P(file->f_dentry->d_inode); ++ inodeInfo = INODE_GET_II_P(file->f_path.dentry->d_inode); + ASSERT(inodeInfo); + + /* Get the mode of the opened file. */ +Index: open-vm-tools-9.4.6-1770165/modules/linux/vmhgfs/tcp.c +=================================================================== +--- open-vm-tools-9.4.6-1770165.orig/modules/linux/vmhgfs/tcp.c ++++ open-vm-tools-9.4.6-1770165/modules/linux/vmhgfs/tcp.c +@@ -250,7 +250,7 @@ HgfsSocketRecvMsg(struct socket *socket, + size_t bufferLen) // IN: Buffer length + { + struct iovec iov; +- struct msghdr msg; ++ struct user_msghdr msg; + int ret; + int flags = MSG_DONTWAIT | MSG_NOSIGNAL; + mm_segment_t oldfs = get_fs(); +@@ -765,7 +765,7 @@ HgfsSocketSendMsg(struct socket *socket, + size_t bufferLen) // IN: Buffer length + { + struct iovec iov; +- struct msghdr msg; ++ struct user_msghdr msg; + int ret = 0; + int i = 0; + mm_segment_t oldfs = get_fs(); diff --git a/open-vm-tools.changes b/open-vm-tools.changes index 71a088f..9703405 100644 --- a/open-vm-tools.changes +++ b/open-vm-tools.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Feb 19 13:35:44 UTC 2015 - dimstar@opensuse.org + +- Add open-vm-tools-linux-3.19.0.patch: Fix building of vmhgfs with + Kernel 3.19.0+. + ------------------------------------------------------------------- Mon Jan 5 10:07:50 UTC 2015 - dimstar@opensuse.org diff --git a/open-vm-tools.spec b/open-vm-tools.spec index e05e9cd..f7659f6 100644 --- a/open-vm-tools.spec +++ b/open-vm-tools.spec @@ -1,7 +1,7 @@ # # spec file for package open-vm-tools # -# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # Copyright (c) 2010 Dominique Leuenberger, Amsterdam, Netherlands. # # All modifications and additions to the file contributed by third parties @@ -80,6 +80,7 @@ Patch8: 0008-Fix-segfault-in-vmhgfs.patch Patch10: open-vm-tools-linux-3.17.patch Patch11: open-vm-tools-linux-3.17.7.patch Patch12: open-vm-tools-linux-3.18.0.patch +Patch13: open-vm-tools-linux-3.19.0.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: gcc-c++ # don't use pkgconfig(gtk+-2.0) so we can build on SLE @@ -234,6 +235,9 @@ sed -i -e "s/\r//" README %patch10 -p1 %patch11 -p1 %patch12 -p1 +if [ rpm -q kernel-syms --qf %{version}\n | awk -F. '{print $2}' -ge 19 ]; then +%patch13 -p1 +fi %build %if ! %{KMP}