summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Volkov <pva@gentoo.org>2009-09-22 23:54:18 +0000
committerPeter Volkov <pva@gentoo.org>2009-09-22 23:54:18 +0000
commit76907e32d6e4e2a194dee6e6a9098a65a6d5dcc2 (patch)
tree5aa16334dd562c04832a399886969a01ae588eda /sys-kernel
parentold (diff)
downloadgentoo-2-76907e32d6e4e2a194dee6e6a9098a65a6d5dcc2.tar.gz
gentoo-2-76907e32d6e4e2a194dee6e6a9098a65a6d5dcc2.tar.bz2
gentoo-2-76907e32d6e4e2a194dee6e6a9098a65a6d5dcc2.zip
Put back RHEL5 based kernel as users still use it, bug #279260 (starting with comment 45) and bug #285998. Thanks Jeff Mitchell as this's all his work.
(Portage version: 2.1.6.13/cvs/Linux x86_64)
Diffstat (limited to 'sys-kernel')
-rw-r--r--sys-kernel/openvz-sources/ChangeLog13
-rw-r--r--sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-bridgemac.patch15
-rw-r--r--sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-cifs-buildfix.patch667
-rw-r--r--sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-syscall.patch26
-rw-r--r--sys-kernel/openvz-sources/openvz-sources-2.6.18.028.064.7.ebuild45
5 files changed, 765 insertions, 1 deletions
diff --git a/sys-kernel/openvz-sources/ChangeLog b/sys-kernel/openvz-sources/ChangeLog
index a54afb159779..a53114445cdd 100644
--- a/sys-kernel/openvz-sources/ChangeLog
+++ b/sys-kernel/openvz-sources/ChangeLog
@@ -1,6 +1,17 @@
# ChangeLog for sys-kernel/openvz-sources
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-kernel/openvz-sources/ChangeLog,v 1.115 2009/09/22 19:30:19 pva Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-kernel/openvz-sources/ChangeLog,v 1.116 2009/09/22 23:54:18 pva Exp $
+
+*openvz-sources-2.6.18.028.064.7 (22 Sep 2009)
+
+ 22 Sep 2009; Peter Volkov <pva@gentoo.org>
+ +openvz-sources-2.6.18.028.064.7.ebuild,
+ +files/openvz-sources-2.6.18.028.064.7-bridgemac.patch,
+ +files/openvz-sources-2.6.18.028.064.7-cifs-buildfix.patch,
+ +files/openvz-sources-2.6.18.028.064.7-syscall.patch:
+ Put back RHEL5 based kernel as users still use it, bug #279260 (starting
+ with comment 45) and bug #285998. Thanks Jeff Mitchell as this's all his
+ work.
22 Sep 2009; Peter Volkov <pva@gentoo.org>
-openvz-sources-2.6.18.028.056.1.ebuild,
diff --git a/sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-bridgemac.patch b/sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-bridgemac.patch
new file mode 100644
index 000000000000..b092c15a2952
--- /dev/null
+++ b/sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-bridgemac.patch
@@ -0,0 +1,15 @@
+diff -urN linux/net/bridge/br_stp_if.c drobtmp/net/bridge/br_stp_if.c
+--- linux/net/bridge/br_stp_if.c 2009-06-20 01:46:25.000000000 -0600
++++ drobtmp/net/bridge/br_stp_if.c 2009-06-27 16:47:57.000000000 -0600
+@@ -163,10 +163,7 @@
+ struct net_bridge_port *p;
+
+ list_for_each_entry(p, &br->port_list, list) {
+- if (addr == br_mac_zero ||
+- memcmp(p->dev->dev_addr, addr, ETH_ALEN) < 0)
+- addr = p->dev->dev_addr;
+-
++ addr = p->dev->dev_addr;
+ }
+
+ if (compare_ether_addr(br->bridge_id.addr, addr))
diff --git a/sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-cifs-buildfix.patch b/sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-cifs-buildfix.patch
new file mode 100644
index 000000000000..6352937ba797
--- /dev/null
+++ b/sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-cifs-buildfix.patch
@@ -0,0 +1,667 @@
+028stab062.3 -- buildfix
+
+The number of issues during move up to 028stab062.3
+
+1) There is no f_path.dentry in file struct. Use f_dentry former.
+2) IOMMU_HELPER depends on a widen number of vars.
+3) PDAudioCF sound card is plainly broken. Mark it that.
+4) Xen PV-ON-HVM is broken as well if base Xen support is not
+ enabled. Don't turn on XEN_PV_ON_HVM config option without
+ Xen support in general.
+5) ACPI_PROCESSOR config should be built in. Not module.
+6) There is no zero_user_page but zero_user function.
+
+Closes http://bugzilla.openvz.org/show_bug.cgi?id=1279
+
+Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
+---
+ arch/x86_64/Kconfig | 2
+ fs/cifs/cifsfs.c | 6 -
+ fs/cifs/fcntl.c | 4 -
+ fs/cifs/file.c | 86 +++++++++++++-------------
+ fs/cifs/readdir.c | 28 ++++----
+ fs/ntfs/aops.c | 2
+ fs/ntfs/compress.c | 2
+ samples/tracepoints/tracepoint-probe-sample.c | 6 -
+ sound/oss/dmasound/dmasound_core.c | 4 -
+ sound/oss/msnd_pinnacle.c | 4 -
+ sound/oss/soundcard.c | 8 +-
+ sound/pcmcia/Kconfig | 2
+ sound/sound_firmware.c | 2
+ 13 files changed, 78 insertions(+), 78 deletions(-)
+
+Index: linux-2.6.18-openvz/arch/x86_64/Kconfig
+=====================================================================
+--- linux-2.6.18-openvz.orig/arch/x86_64/Kconfig
++++ linux-2.6.18-openvz/arch/x86_64/Kconfig
+@@ -532,7 +532,7 @@ config AMD_IOMMU
+ config IOMMU_HELPER
+ bool "IOMMU Helper functions"
+ default n
+- depends on (AMD_IOMMU || GART_IOMMU)
++ depends on (CALGARY_IOMMU || GART_IOMMU || SWIOTLB || AMD_IOMMU)
+
+ # need this always selected by IOMMU for the VIA workaround
+ config SWIOTLB
+Index: linux-2.6.18-openvz/fs/cifs/cifsfs.c
+=====================================================================
+--- linux-2.6.18-openvz.orig/fs/cifs/cifsfs.c
++++ linux-2.6.18-openvz/fs/cifs/cifsfs.c
+@@ -674,7 +674,7 @@ cifs_get_sb(struct file_system_type *fs_
+ static ssize_t cifs_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
+ unsigned long nr_segs, loff_t pos)
+ {
+- struct inode *inode = iocb->ki_filp->f_path.dentry->d_inode;
++ struct inode *inode = iocb->ki_filp->f_dentry->d_inode;
+ ssize_t written;
+
+ written = generic_file_aio_write(iocb, iov, nr_segs, pos);
+@@ -714,9 +714,9 @@ static loff_t cifs_llseek(struct file *f
+ way so we must seek to end on non-oplocked files by
+ setting the revalidate time to zero */
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 19)
+- CIFS_I(file->f_path.dentry->d_inode)->time = 0;
++ CIFS_I(file->f_dentry->d_inode)->time = 0;
+
+- retval = cifs_revalidate(file->f_path.dentry);
++ retval = cifs_revalidate(file->f_dentry);
+ #else
+ if(file->f_dentry->d_inode)
+ CIFS_I(file->f_dentry->d_inode)->time = 0;
+Index: linux-2.6.18-openvz/fs/cifs/fcntl.c
+=====================================================================
+--- linux-2.6.18-openvz.orig/fs/cifs/fcntl.c
++++ linux-2.6.18-openvz/fs/cifs/fcntl.c
+@@ -85,10 +85,10 @@ int cifs_dir_notify(struct file *file, u
+
+ full_path = build_path_from_dentry(file->f_dentry);
+ #else
+- cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
++ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ pTcon = cifs_sb->tcon;
+
+- full_path = build_path_from_dentry(file->f_path.dentry);
++ full_path = build_path_from_dentry(file->f_dentry);
+ #endif
+
+ if (full_path == NULL) {
+Index: linux-2.6.18-openvz/fs/cifs/file.c
+=====================================================================
+--- linux-2.6.18-openvz.orig/fs/cifs/file.c
++++ linux-2.6.18-openvz/fs/cifs/file.c
+@@ -153,12 +153,12 @@ static inline int cifs_open_inode_helper
+ } else {
+ if (file->f_dentry->d_inode->i_mapping) {
+ #else
+- if (timespec_equal(&file->f_path.dentry->d_inode->i_mtime, &temp) &&
+- (file->f_path.dentry->d_inode->i_size ==
++ if (timespec_equal(&file->f_dentry->d_inode->i_mtime, &temp) &&
++ (file->f_dentry->d_inode->i_size ==
+ (loff_t)le64_to_cpu(buf->EndOfFile))) {
+ cFYI(1, ("inode unchanged on server"));
+ } else {
+- if (file->f_path.dentry->d_inode->i_mapping) {
++ if (file->f_dentry->d_inode->i_mapping) {
+ #endif
+ /* BB no need to lock inode until after invalidate
+ since namei code should already have it locked? */
+@@ -171,7 +171,7 @@ static inline int cifs_open_inode_helper
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ invalidate_remote_inode(file->f_dentry->d_inode);
+ #else
+- invalidate_remote_inode(file->f_path.dentry->d_inode);
++ invalidate_remote_inode(file->f_dentry->d_inode);
+ #endif
+ }
+
+@@ -180,14 +180,14 @@ client_can_cache:
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ rc = cifs_get_inode_info_unix(&file->f_dentry->d_inode,
+ #else
+- rc = cifs_get_inode_info_unix(&file->f_path.dentry->d_inode,
++ rc = cifs_get_inode_info_unix(&file->f_dentry->d_inode,
+ #endif
+ full_path, inode->i_sb, xid);
+
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ rc = cifs_get_inode_info(&file->f_dentry->d_inode,
+ #else
+- rc = cifs_get_inode_info(&file->f_path.dentry->d_inode,
++ rc = cifs_get_inode_info(&file->f_dentry->d_inode,
+ #endif
+ full_path, buf, inode->i_sb, xid, NULL);
+
+@@ -199,7 +199,7 @@ client_can_cache:
+ file->f_dentry->d_inode));
+ #else
+ cFYI(1, ("Exclusive Oplock granted on inode %p",
+- file->f_path.dentry->d_inode));
++ file->f_dentry->d_inode));
+ #endif
+ } else if ((*oplock & 0xF) == OPLOCK_READ)
+ pCifsInode->clientCanCacheRead = true;
+@@ -232,7 +232,7 @@ int cifs_open(struct inode *inode, struc
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ pCifsInode = CIFS_I(file->f_dentry->d_inode);
+ #else
+- pCifsInode = CIFS_I(file->f_path.dentry->d_inode);
++ pCifsInode = CIFS_I(file->f_dentry->d_inode);
+ #endif
+ read_lock(&GlobalSMBSeslock);
+ list_for_each(tmp, &pCifsInode->openFileList) {
+@@ -264,7 +264,7 @@ int cifs_open(struct inode *inode, struc
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ full_path = build_path_from_dentry(file->f_dentry);
+ #else
+- full_path = build_path_from_dentry(file->f_path.dentry);
++ full_path = build_path_from_dentry(file->f_dentry);
+ #endif
+ if (full_path == NULL) {
+ FreeXid(xid);
+@@ -353,7 +353,7 @@ int cifs_open(struct inode *inode, struc
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ pCifsInode = CIFS_I(file->f_dentry->d_inode);
+ #else
+- pCifsInode = CIFS_I(file->f_path.dentry->d_inode);
++ pCifsInode = CIFS_I(file->f_dentry->d_inode);
+ #endif
+ if (pCifsInode) {
+ rc = cifs_open_inode_helper(inode, file, pCifsInode,
+@@ -453,14 +453,14 @@ static int cifs_reopen_file(struct file
+ and we can never tell if the caller already has the rename_sem */
+ full_path = build_path_from_dentry(file->f_dentry);
+ #else
+- if (file->f_path.dentry == NULL) {
++ if (file->f_dentry == NULL) {
+ cERROR(1, ("no valid name if dentry freed"));
+ dump_stack();
+ rc = -EBADF;
+ goto reopen_error_exit;
+ }
+
+- inode = file->f_path.dentry->d_inode;
++ inode = file->f_dentry->d_inode;
+ if (inode == NULL) {
+ cERROR(1, ("inode not valid"));
+ dump_stack();
+@@ -475,7 +475,7 @@ static int cifs_reopen_file(struct file
+ those that already have the rename sem can end up causing writepage
+ to get called and if the server was down that means we end up here,
+ and we can never tell if the caller already has the rename_sem */
+- full_path = build_path_from_dentry(file->f_path.dentry);
++ full_path = build_path_from_dentry(file->f_dentry);
+ #endif
+ if (full_path == NULL) {
+ rc = -ENOMEM;
+@@ -543,7 +543,7 @@ reopen_error_exit:
+ file->f_dentry->d_inode));
+ #else
+ cFYI(1, ("Exclusive Oplock granted on inode %p",
+- file->f_path.dentry->d_inode));
++ file->f_dentry->d_inode));
+ #endif
+ } else if ((oplock & 0xF) == OPLOCK_READ) {
+ pCifsInode->clientCanCacheRead = true;
+@@ -673,7 +673,7 @@ int cifs_closedir(struct inode *inode, s
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ CIFS_SB(file->f_dentry->d_sb);
+ #else
+- CIFS_SB(file->f_path.dentry->d_sb);
++ CIFS_SB(file->f_dentry->d_sb);
+ #endif
+
+ pTcon = cifs_sb->tcon;
+@@ -785,7 +785,7 @@ int cifs_lock(struct file *file, int cmd
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #else
+- cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
++ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #endif
+ pTcon = cifs_sb->tcon;
+
+@@ -922,14 +922,14 @@ ssize_t cifs_user_write(struct file *fil
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #else
+- cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
++ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #endif
+
+ pTcon = cifs_sb->tcon;
+
+ /* cFYI(1,
+ (" write %d bytes to offset %lld of %s", write_size,
+- *poffset, file->f_path.dentry->d_name.name)); */
++ *poffset, file->f_dentry->d_name.name)); */
+
+ if (file->private_data == NULL)
+ return -EBADF;
+@@ -944,7 +944,7 @@ ssize_t cifs_user_write(struct file *fil
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ if (*poffset > file->f_dentry->d_inode->i_size)
+ #else
+- if (*poffset > file->f_path.dentry->d_inode->i_size)
++ if (*poffset > file->f_dentry->d_inode->i_size)
+ #endif
+ long_op = CIFS_VLONG_OP; /* writes past EOF can be slow */
+ else
+@@ -1017,19 +1017,19 @@ ssize_t cifs_user_write(struct file *fil
+ }
+ mark_inode_dirty_sync(file->f_dentry->d_inode);
+ #else
+- if ((file->f_path.dentry) && (file->f_path.dentry->d_inode)) {
+- struct inode *inode = file->f_path.dentry->d_inode;
++ if ((file->f_dentry) && (file->f_dentry->d_inode)) {
++ struct inode *inode = file->f_dentry->d_inode;
+ /* Do not update local mtime - server will set its actual value on write
+ * inode->i_ctime = inode->i_mtime =
+ * current_fs_time(inode->i_sb);*/
+ if (total_written > 0) {
+ spin_lock(&inode->i_lock);
+- if (*poffset > file->f_path.dentry->d_inode->i_size)
+- i_size_write(file->f_path.dentry->d_inode,
++ if (*poffset > file->f_dentry->d_inode->i_size)
++ i_size_write(file->f_dentry->d_inode,
+ *poffset);
+ spin_unlock(&inode->i_lock);
+ }
+- mark_inode_dirty_sync(file->f_path.dentry->d_inode);
++ mark_inode_dirty_sync(file->f_dentry->d_inode);
+ #endif
+ }
+ FreeXid(xid);
+@@ -1063,12 +1063,12 @@ static ssize_t cifs_write(struct file *f
+
+ if (*poffset > file->f_dentry->d_inode->i_size)
+ #else
+- cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
++ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+
+ pTcon = cifs_sb->tcon;
+
+ cFYI(1, ("write %zd bytes to offset %lld of %s", write_size,
+- *poffset, file->f_path.dentry->d_name.name));
++ *poffset, file->f_dentry->d_name.name));
+
+ if (file->private_data == NULL)
+ return -EBADF;
+@@ -1076,7 +1076,7 @@ static ssize_t cifs_write(struct file *f
+
+ xid = GetXid();
+
+- if (*poffset > file->f_path.dentry->d_inode->i_size)
++ if (*poffset > file->f_dentry->d_inode->i_size)
+ #endif
+ long_op = CIFS_VLONG_OP; /* writes past EOF take long time */
+ else
+@@ -1167,18 +1167,18 @@ static ssize_t cifs_write(struct file *f
+ }
+ mark_inode_dirty_sync(file->f_dentry->d_inode);
+ #else
+- if ((file->f_path.dentry) && (file->f_path.dentry->d_inode)) {
++ if ((file->f_dentry) && (file->f_dentry->d_inode)) {
+ /*BB We could make this contingent on superblock ATIME flag too */
+-/* file->f_path.dentry->d_inode->i_ctime =
+- file->f_path.dentry->d_inode->i_mtime = CURRENT_TIME;*/
++/* file->f_dentry->d_inode->i_ctime =
++ file->f_dentry->d_inode->i_mtime = CURRENT_TIME;*/
+ if (total_written > 0) {
+- spin_lock(&file->f_path.dentry->d_inode->i_lock);
+- if (*poffset > file->f_path.dentry->d_inode->i_size)
+- i_size_write(file->f_path.dentry->d_inode,
++ spin_lock(&file->f_dentry->d_inode->i_lock);
++ if (*poffset > file->f_dentry->d_inode->i_size)
++ i_size_write(file->f_dentry->d_inode,
+ *poffset);
+- spin_unlock(&file->f_path.dentry->d_inode->i_lock);
++ spin_unlock(&file->f_dentry->d_inode->i_lock);
+ }
+- mark_inode_dirty_sync(file->f_path.dentry->d_inode);
++ mark_inode_dirty_sync(file->f_dentry->d_inode);
+ #endif
+ }
+ FreeXid(xid);
+@@ -1695,7 +1695,7 @@ int cifs_fsync(struct file *file, struct
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ struct inode *inode = file->f_dentry->d_inode;
+ #else
+- struct inode *inode = file->f_path.dentry->d_inode;
++ struct inode *inode = file->f_dentry->d_inode;
+ #endif
+
+ xid = GetXid();
+@@ -1753,7 +1753,7 @@ int cifs_flush(struct file *file)
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ struct inode *inode = file->f_dentry->d_inode;
+ #else
+- struct inode *inode = file->f_path.dentry->d_inode;
++ struct inode *inode = file->f_dentry->d_inode;
+ #endif
+ int rc = 0;
+
+@@ -1797,7 +1797,7 @@ ssize_t cifs_user_read(struct file *file
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #else
+- cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
++ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #endif
+ pTcon = cifs_sb->tcon;
+
+@@ -1881,7 +1881,7 @@ static ssize_t cifs_read(struct file *fi
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #else
+- cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
++ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #endif
+ pTcon = cifs_sb->tcon;
+
+@@ -1941,7 +1941,7 @@ int cifs_file_mmap(struct file *file, st
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ struct dentry *dentry = file->f_dentry;
+ #else
+- struct dentry *dentry = file->f_path.dentry;
++ struct dentry *dentry = file->f_dentry;
+ #endif
+ int rc, xid;
+
+@@ -2031,7 +2031,7 @@ static int cifs_readpages(struct file *f
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #else
+- cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
++ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #endif
+ pTcon = cifs_sb->tcon;
+
+@@ -2174,8 +2174,8 @@ static int cifs_readpage_worker(struct f
+ file->f_dentry->d_inode->i_atime =
+ current_fs_time(file->f_dentry->d_inode->i_sb);
+ #else
+- file->f_path.dentry->d_inode->i_atime =
+- current_fs_time(file->f_path.dentry->d_inode->i_sb);
++ file->f_dentry->d_inode->i_atime =
++ current_fs_time(file->f_dentry->d_inode->i_sb);
+ #endif
+
+ if (PAGE_CACHE_SIZE > rc)
+Index: linux-2.6.18-openvz/fs/cifs/readdir.c
+=====================================================================
+--- linux-2.6.18-openvz.orig/fs/cifs/readdir.c
++++ linux-2.6.18-openvz/fs/cifs/readdir.c
+@@ -82,25 +82,25 @@ static int construct_dentry(struct qstr
+ if (*ptmp_inode == NULL) {
+ *ptmp_inode = new_inode(file->f_dentry->d_sb);
+ #else
+- cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
++ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ pTcon = cifs_sb->tcon;
+
+ qstring->hash = full_name_hash(qstring->name, qstring->len);
+- tmp_dentry = d_lookup(file->f_path.dentry, qstring);
++ tmp_dentry = d_lookup(file->f_dentry, qstring);
+ if (tmp_dentry) {
+ cFYI(0, ("existing dentry with inode 0x%p",
+ tmp_dentry->d_inode));
+ *ptmp_inode = tmp_dentry->d_inode;
+ /* BB overwrite old name? i.e. tmp_dentry->d_name and tmp_dentry->d_name.len??*/
+ if (*ptmp_inode == NULL) {
+- *ptmp_inode = new_inode(file->f_path.dentry->d_sb);
++ *ptmp_inode = new_inode(file->f_dentry->d_sb);
+ #endif
+ if (*ptmp_inode == NULL)
+ return rc;
+ rc = 1;
+ }
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 19)
+- if (file->f_path.dentry->d_sb->s_flags & MS_NOATIME)
++ if (file->f_dentry->d_sb->s_flags & MS_NOATIME)
+ #else
+ if (file->f_dentry->d_sb->s_flags & MS_NOATIME)
+ #endif
+@@ -109,7 +109,7 @@ static int construct_dentry(struct qstr
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ tmp_dentry = d_alloc(file->f_dentry, qstring);
+ #else
+- tmp_dentry = d_alloc(file->f_path.dentry, qstring);
++ tmp_dentry = d_alloc(file->f_dentry, qstring);
+ #endif
+ if (tmp_dentry == NULL) {
+ cERROR(1, ("Failed allocating dentry"));
+@@ -119,7 +119,7 @@ static int construct_dentry(struct qstr
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ *ptmp_inode = new_inode(file->f_dentry->d_sb);
+ #else
+- *ptmp_inode = new_inode(file->f_path.dentry->d_sb);
++ *ptmp_inode = new_inode(file->f_dentry->d_sb);
+ #endif
+ if (pTcon->nocase)
+ tmp_dentry->d_op = &cifs_ci_dentry_ops;
+@@ -128,7 +128,7 @@ static int construct_dentry(struct qstr
+ if (*ptmp_inode == NULL)
+ return rc;
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 19)
+- if (file->f_path.dentry->d_sb->s_flags & MS_NOATIME)
++ if (file->f_dentry->d_sb->s_flags & MS_NOATIME)
+ #else
+ if (file->f_dentry->d_sb->s_flags & MS_NOATIME)
+ #endif
+@@ -514,7 +514,7 @@ static int initiate_cifs_search(const in
+
+ full_path = build_path_from_dentry(file->f_dentry);
+ #else
+- cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
++ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ if (cifs_sb == NULL)
+ return -EINVAL;
+
+@@ -522,7 +522,7 @@ static int initiate_cifs_search(const in
+ if (pTcon == NULL)
+ return -EINVAL;
+
+- full_path = build_path_from_dentry(file->f_path.dentry);
++ full_path = build_path_from_dentry(file->f_dentry);
+ #endif
+
+ if (full_path == NULL)
+@@ -691,7 +691,7 @@ static int is_dir_changed(struct file *f
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ struct inode *inode = file->f_dentry->d_inode;
+ #else
+- struct inode *inode = file->f_path.dentry->d_inode;
++ struct inode *inode = file->f_dentry->d_inode;
+ #endif
+ struct cifsInodeInfo *cifsInfo = CIFS_I(inode);
+
+@@ -924,7 +924,7 @@ static int cifs_filldir(char *pfindEntry
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
+ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #else
+- cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
++ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ #endif
+
+ qstring.name = scratch_buf;
+@@ -1083,7 +1083,7 @@ int cifs_readdir(struct file *file, void
+ if (filldir(direntry, "..", 2, file->f_pos,
+ file->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0) {
+ #else
+- cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
++ cifs_sb = CIFS_SB(file->f_dentry->d_sb);
+ pTcon = cifs_sb->tcon;
+ if (pTcon == NULL)
+ return -EINVAL;
+@@ -1091,7 +1091,7 @@ int cifs_readdir(struct file *file, void
+ switch ((int) file->f_pos) {
+ case 0:
+ if (filldir(direntry, ".", 1, file->f_pos,
+- file->f_path.dentry->d_inode->i_ino, DT_DIR) < 0) {
++ file->f_dentry->d_inode->i_ino, DT_DIR) < 0) {
+ cERROR(1, ("Filldir for current dir failed"));
+ rc = -ENOMEM;
+ break;
+@@ -1099,7 +1099,7 @@ int cifs_readdir(struct file *file, void
+ file->f_pos++;
+ case 1:
+ if (filldir(direntry, "..", 2, file->f_pos,
+- file->f_path.dentry->d_parent->d_inode->i_ino, DT_DIR) < 0) {
++ file->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0) {
+ #endif
+ cERROR(1, ("Filldir for parent dir failed"));
+ rc = -ENOMEM;
+Index: linux-2.6.18-openvz/fs/ntfs/aops.c
+=====================================================================
+--- linux-2.6.18-openvz.orig/fs/ntfs/aops.c
++++ linux-2.6.18-openvz/fs/ntfs/aops.c
+@@ -415,7 +415,7 @@ retry_readpage:
+ /* Is the page fully outside i_size? (truncate in progress) */
+ if (unlikely(page->index >= (i_size + PAGE_CACHE_SIZE - 1) >>
+ PAGE_CACHE_SHIFT)) {
+- zero_user_page(page, 0, PAGE_CACHE_SIZE, KM_USER0);
++ zero_user(page, 0, PAGE_CACHE_SIZE);
+ ntfs_debug("Read outside i_size - truncated?");
+ goto done;
+ }
+Index: linux-2.6.18-openvz/fs/ntfs/compress.c
+=====================================================================
+--- linux-2.6.18-openvz.orig/fs/ntfs/compress.c
++++ linux-2.6.18-openvz/fs/ntfs/compress.c
+@@ -565,7 +565,7 @@ int ntfs_read_compressed_block(struct pa
+ if (xpage >= max_page) {
+ kfree(bhs);
+ kfree(pages);
+- zero_user_page(page, 0, PAGE_CACHE_SIZE, KM_USER0);
++ zero_user(page, 0, PAGE_CACHE_SIZE);
+ ntfs_debug("Compressed read outside i_size - truncated?");
+ SetPageUptodate(page);
+ unlock_page(page);
+Index: linux-2.6.18-openvz/samples/tracepoints/tracepoint-probe-sample.c
+=====================================================================
+--- linux-2.6.18-openvz.orig/samples/tracepoints/tracepoint-probe-sample.c
++++ linux-2.6.18-openvz/samples/tracepoints/tracepoint-probe-sample.c
+@@ -16,10 +16,10 @@
+ static void probe_subsys_event(struct inode *inode, struct file *file)
+ {
+ path_get(&file->f_path);
+- dget(file->f_path.dentry);
++ dget(file->f_dentry);
+ printk(KERN_INFO "Event is encountered with filename %s\n",
+- file->f_path.dentry->d_name.name);
+- dput(file->f_path.dentry);
++ file->f_dentry->d_name.name);
++ dput(file->f_dentry);
+ path_put(&file->f_path);
+ }
+
+Index: linux-2.6.18-openvz/sound/oss/dmasound/dmasound_core.c
+=====================================================================
+--- linux-2.6.18-openvz.orig/sound/oss/dmasound/dmasound_core.c
++++ linux-2.6.18-openvz/sound/oss/dmasound/dmasound_core.c
+@@ -1051,7 +1051,7 @@ static int sq_release(struct inode *inod
+
+ if (file->f_mode & FMODE_WRITE) {
+ if (write_sq.busy)
+- rc = sq_fsync(file, file->f_path.dentry);
++ rc = sq_fsync(file, file->f_dentry);
+
+ sq_reset_output() ; /* make sure dma is stopped and all is quiet */
+ write_sq_release_buffers();
+@@ -1217,7 +1217,7 @@ static int sq_ioctl(struct inode *inode,
+ if ((file->f_mode & FMODE_READ) && dmasound.mach.record)
+ sq_reset_input() ;
+ if (file->f_mode & FMODE_WRITE) {
+- result = sq_fsync(file, file->f_path.dentry);
++ result = sq_fsync(file, file->f_dentry);
+ sq_reset_output() ;
+ }
+ /* if we are the shared resource owner then release them */
+Index: linux-2.6.18-openvz/sound/oss/msnd_pinnacle.c
+=====================================================================
+--- linux-2.6.18-openvz.orig/sound/oss/msnd_pinnacle.c
++++ linux-2.6.18-openvz/sound/oss/msnd_pinnacle.c
+@@ -1007,7 +1007,7 @@ static int dsp_write(const char __user *
+
+ static ssize_t dev_read(struct file *file, char __user *buf, size_t count, loff_t *off)
+ {
+- int minor = iminor(file->f_path.dentry->d_inode);
++ int minor = iminor(file->f_dentry->d_inode);
+ if (minor == dev.dsp_minor)
+ return dsp_read(buf, count);
+ else
+@@ -1016,7 +1016,7 @@ static ssize_t dev_read(struct file *fil
+
+ static ssize_t dev_write(struct file *file, const char __user *buf, size_t count, loff_t *off)
+ {
+- int minor = iminor(file->f_path.dentry->d_inode);
++ int minor = iminor(file->f_dentry->d_inode);
+ if (minor == dev.dsp_minor)
+ return dsp_write(buf, count);
+ else
+Index: linux-2.6.18-openvz/sound/oss/soundcard.c
+=====================================================================
+--- linux-2.6.18-openvz.orig/sound/oss/soundcard.c
++++ linux-2.6.18-openvz/sound/oss/soundcard.c
+@@ -142,7 +142,7 @@ static int get_mixer_levels(void __user
+
+ static ssize_t sound_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
+ {
+- int dev = iminor(file->f_path.dentry->d_inode);
++ int dev = iminor(file->f_dentry->d_inode);
+ int ret = -EINVAL;
+
+ /*
+@@ -175,7 +175,7 @@ static ssize_t sound_read(struct file *f
+
+ static ssize_t sound_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
+ {
+- int dev = iminor(file->f_path.dentry->d_inode);
++ int dev = iminor(file->f_dentry->d_inode);
+ int ret = -EINVAL;
+
+ lock_kernel();
+@@ -394,7 +394,7 @@ static int sound_ioctl(struct inode *ino
+
+ static unsigned int sound_poll(struct file *file, poll_table * wait)
+ {
+- struct inode *inode = file->f_path.dentry->d_inode;
++ struct inode *inode = file->f_dentry->d_inode;
+ int dev = iminor(inode);
+
+ DEB(printk("sound_poll(dev=%d)\n", dev));
+@@ -419,7 +419,7 @@ static int sound_mmap(struct file *file,
+ int dev_class;
+ unsigned long size;
+ struct dma_buffparms *dmap = NULL;
+- int dev = iminor(file->f_path.dentry->d_inode);
++ int dev = iminor(file->f_dentry->d_inode);
+
+ dev_class = dev & 0x0f;
+ dev >>= 4;
+Index: linux-2.6.18-openvz/sound/pcmcia/Kconfig
+=====================================================================
+--- linux-2.6.18-openvz.orig/sound/pcmcia/Kconfig
++++ linux-2.6.18-openvz/sound/pcmcia/Kconfig
+@@ -16,7 +16,7 @@ config SND_VXPOCKET
+
+ config SND_PDAUDIOCF
+ tristate "Sound Core PDAudioCF"
+- depends on SND && PCMCIA
++ depends on BROKEN && SND && PCMCIA
+ select SND_PCM
+ help
+ Say Y here to include support for Sound Core PDAudioCF
+Index: linux-2.6.18-openvz/sound/sound_firmware.c
+=====================================================================
+--- linux-2.6.18-openvz.orig/sound/sound_firmware.c
++++ linux-2.6.18-openvz/sound/sound_firmware.c
+@@ -19,7 +19,7 @@ static int do_mod_firmware_load(const ch
+ printk(KERN_INFO "Unable to load '%s'.\n", fn);
+ return 0;
+ }
+- l = filp->f_path.dentry->d_inode->i_size;
++ l = filp->f_dentry->d_inode->i_size;
+ if (l <= 0 || l > 131072)
+ {
+ printk(KERN_INFO "Invalid firmware '%s'\n", fn);
diff --git a/sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-syscall.patch b/sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-syscall.patch
new file mode 100644
index 000000000000..5fbe686d9512
--- /dev/null
+++ b/sys-kernel/openvz-sources/files/openvz-sources-2.6.18.028.064.7-syscall.patch
@@ -0,0 +1,26 @@
+diff -urN linux-2.6.18-openvz-028.062.3/arch/x86_64/ia32/ia32entry.S linux-2.6.18-openvz-028.062.3-ia32entryfix/arch/x86_64/ia32/ia32entry.S
+--- linux-2.6.18-openvz-028.062.3/arch/x86_64/ia32/ia32entry.S 2009-06-28 22:48:31.000000000 -0600
++++ linux-2.6.18-openvz-028.062.3-ia32entryfix/arch/x86_64/ia32/ia32entry.S 2009-09-21 21:15:09.000000000 -0600
+@@ -329,9 +329,9 @@
+ orl $TS_COMPAT,threadinfo_status(%r10)
+ testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
+ jnz ia32_tracesys
+-ia32_do_syscall:
+ cmpl $(IA32_NR_syscalls-1),%eax
+- ja int_ret_from_sys_call /* ia32_tracesys has set RAX(%rsp) */
++ ja ia32_badsys
++ia32_do_call:
+ IA32_ARG_FIXUP
+ call *ia32_sys_call_table(,%rax,8) # xxx: rip relative
+ ia32_sysret:
+@@ -345,7 +345,9 @@
+ call syscall_trace_enter
+ LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */
+ RESTORE_REST
+- jmp ia32_do_syscall
++ cmpl $(IA32_NR_syscalls-1),%eax
++ ja int_ret_from_sys_call /* ia32_tracesys has set RAX(%rsp) */
++ jmp ia32_do_call
+ END(ia32_syscall)
+
+ ia32_badsys:
diff --git a/sys-kernel/openvz-sources/openvz-sources-2.6.18.028.064.7.ebuild b/sys-kernel/openvz-sources/openvz-sources-2.6.18.028.064.7.ebuild
new file mode 100644
index 000000000000..1d9167166094
--- /dev/null
+++ b/sys-kernel/openvz-sources/openvz-sources-2.6.18.028.064.7.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2009 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sys-kernel/openvz-sources/openvz-sources-2.6.18.028.064.7.ebuild,v 1.1 2009/09/22 23:54:18 pva Exp $
+
+inherit versionator
+
+ETYPE="sources"
+
+CKV=$(get_version_component_range 1-3)
+OKV=${OKV:-${CKV}}
+if [[ ${PR} == "r0" ]]; then
+KV_FULL=${CKV}-${PN/-*}-$(get_version_component_range 4-6)
+else
+KV_FULL=${CKV}-${PN/-*}-$(get_version_component_range 4-6)-${PR}
+fi
+OVZ_KERNEL="$(get_version_component_range 4)stab$(get_version_component_range 5)"
+OVZ_REV="$(get_version_component_range 6)"
+EXTRAVERSION=-${OVZ_KERNEL}
+KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
+
+inherit kernel-2
+detect_version
+
+KEYWORDS="~amd64 ~ia64 ~ppc64 ~sparc ~x86"
+IUSE=""
+PATCHV="128.2.1.el5"
+DESCRIPTION="Full sources including OpenVZ patchset for the 2.6.18 kernel tree"
+HOMEPAGE="http://www.openvz.org"
+SRC_URI="${KERNEL_URI} ${ARCH_URI}
+ http://download.openvz.org/kernel/branches/rhel5-${CKV}/${OVZ_KERNEL}.${OVZ_REV}/patches/patch-${PATCHV}.${OVZ_KERNEL}.${OVZ_REV}-combined.gz"
+
+UNIPATCH_STRICTORDER=1
+UNIPATCH_LIST="${DISTDIR}/patch-${PATCHV}.${OVZ_KERNEL}.${OVZ_REV}-combined.gz
+${FILESDIR}/${PN}-2.6.18.028.064.7-syscall.patch
+${FILESDIR}/${PN}-2.6.18.028.064.7-bridgemac.patch
+${FILESDIR}/${PN}-2.6.18.028.064.7-cifs-buildfix.patch"
+
+K_EXTRAEINFO="This openvz kernel uses RHEL5 patchset instead of vanilla kernel.
+This patchset considered to be more stable and security supported by upstream,
+that why they suggested us to use it. But note: RHEL5 patchset is very fragile
+and fails to build in many configurations so if you have problems use config
+files from openvz team http://wiki.openvz.org/Download/kernel/rhel5/${OVZ_KERNEL}"
+
+K_EXTRAEWARN="This kernel is stable only when built with gcc-4.1.x and is known
+to oops in random places if built with newer compilers."