diff -Nau /home/stevef/Documents/1.32/fs/cifs/cifsfs.c ./cifsfs.c
--- /home/stevef/Documents/1.32/fs/cifs/cifsfs.c	2005-04-03 23:21:41.000000000 -0500
+++ ./cifsfs.c	2005-04-11 23:07:52.196260264 -0500
@@ -32,6 +32,7 @@
 #include <linux/seq_file.h>
 #include <linux/vfs.h>
 #include <linux/mempool.h>
+#include <linux/moduleparam.h>
 #include "cifsfs.h"
 #include "cifspdu.h"
 #define DECLARE_GLOBALS_HERE
@@ -534,9 +535,9 @@
 };
 
 struct inode_operations cifs_symlink_inode_ops = {
-	.readlink = generic_readlink, 
+	.readlink = cifs_readlink, 
 	.follow_link = cifs_follow_link,
-	.put_link = cifs_put_link,
+/*	.put_link = cifs_put_link,*/
 	.permission = cifs_permission,
 	/* BB add the following two eventually */
 	/* revalidate: cifs_revalidate,
@@ -559,16 +560,11 @@
 	.flush = cifs_flush,
 	.mmap  = cifs_file_mmap,
 	.sendfile = generic_file_sendfile,
-#ifdef CONFIG_CIFS_POSIX
-	.ioctl	= cifs_ioctl,
-#endif /* CONFIG_CIFS_POSIX */
-
 #ifdef CONFIG_CIFS_EXPERIMENTAL
 	.readv = generic_file_readv,
 	.writev = generic_file_writev,
 	.aio_read = generic_file_aio_read,
 	.aio_write = generic_file_aio_write,
-	.dir_notify = cifs_dir_notify,
 #endif /* CONFIG_CIFS_EXPERIMENTAL */
 };
 
@@ -582,14 +578,7 @@
 	.lock = cifs_lock,
 	.fsync = cifs_fsync,
 	.flush = cifs_flush,
-	.sendfile = generic_file_sendfile, /* BB removeme BB */
-#ifdef CONFIG_CIFS_POSIX
-	.ioctl  = cifs_ioctl,
-#endif /* CONFIG_CIFS_POSIX */
-
-#ifdef CONFIG_CIFS_EXPERIMENTAL
-	.dir_notify = cifs_dir_notify,
-#endif /* CONFIG_CIFS_EXPERIMENTAL */
+	.sendfile = generic_file_sendfile,
 };
 
 struct file_operations cifs_dir_ops = {
diff -Nau /home/stevef/Documents/1.32/fs/cifs/cifspdu.h ./cifspdu.h
--- /home/stevef/Documents/1.32/fs/cifs/cifspdu.h	2005-04-03 23:20:48.000000000 -0500
+++ ./cifspdu.h	2005-04-11 22:09:12.134391008 -0500
@@ -83,6 +83,14 @@
  * All constants go here
  *****************************************************************
  */
+#ifndef __le16
+#define __le16 __u16
+#define __le32 __u32
+#define __le64 __u64
+#define __be16 __u16
+#define __be32 __u32
+#define __be64 __u64
+#endif
 
 /*
  * Starting value for maximum SMB size negotiation
diff -Nau /home/stevef/Documents/1.32/fs/cifs/connect.c ./connect.c
--- /home/stevef/Documents/1.32/fs/cifs/connect.c	2005-04-03 23:21:41.000000000 -0500
+++ ./connect.c	2005-04-11 22:30:18.541867808 -0500
@@ -199,7 +199,8 @@
 	unsigned int pdu_length, total_read;
 	struct smb_hdr *smb_buffer = NULL;
 	struct msghdr smb_msg;
-	struct kvec iov;
+	mm_segment_t temp_fs;
+	struct iovec iov;
 	struct socket *csocket = server->ssocket;
 	struct list_head *tmp;
 	struct cifsSesInfo *ses;
@@ -212,6 +213,9 @@
 	current->flags |= PF_MEMALLOC;
 	server->tsk = current;	/* save process info to wake at shutdown */
 	cFYI(1, ("Demultiplex PID: %d", current->pid));
+	temp_fs = get_fs();     /* we must turn off socket api parm checking */
+	set_fs(get_ds());
+
 	write_lock(&GlobalSMBSeslock); 
 	atomic_inc(&tcpSesAllocCount);
 	length = tcpSesAllocCount.counter;
@@ -236,11 +240,13 @@
 		}
 		iov.iov_base = smb_buffer;
 		iov.iov_len = 4;
+		smb_msg.msg_iov = &iov;
+		smb_msg.msg_iovlen = 1;
 		smb_msg.msg_control = NULL;
 		smb_msg.msg_controllen = 0;
 		length =
-		    kernel_recvmsg(csocket, &smb_msg,
-				 &iov, 1, 4, 0 /* BB see socket.h flags */);
+		    sock_recvmsg(csocket, &smb_msg,
+				 4, 0 /* BB see socket.h flags */);
 
 		if(server->tcpStatus == CifsExiting) {
 			break;
@@ -331,8 +337,7 @@
 					for (total_read = 0; 
 					     total_read < pdu_length;
 					     total_read += length) {
-						length = kernel_recvmsg(csocket, &smb_msg, 
-							&iov, 1,
+						length = sock_recvmsg(csocket, &smb_msg,
 							pdu_length - total_read, 0);
 						if (length == 0) {
 							cERROR(1,
@@ -1000,7 +1005,7 @@
 	__be16 orig_port = 0;
 
 	if(*csocket == NULL) {
-		rc = sock_create_kern(PF_INET, SOCK_STREAM, IPPROTO_TCP, csocket);
+		rc = sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP, csocket);
 		if (rc < 0) {
 			cERROR(1, ("Error %d creating socket",rc));
 			*csocket = NULL;
@@ -1108,7 +1113,7 @@
 	__be16 orig_port = 0;
 
 	if(*csocket == NULL) {
-		rc = sock_create_kern(PF_INET6, SOCK_STREAM, IPPROTO_TCP, csocket);
+		rc = sock_create(PF_INET6, SOCK_STREAM, IPPROTO_TCP, csocket);
 		if (rc < 0) {
 			cERROR(1, ("Error %d creating ipv6 socket",rc));
 			*csocket = NULL;
diff -Nau /home/stevef/Documents/1.32/fs/cifs/dir.c ./dir.c
--- /home/stevef/Documents/1.32/fs/cifs/dir.c	2005-04-03 23:20:48.000000000 -0500
+++ ./dir.c	2005-04-11 22:18:20.330052600 -0500
@@ -199,23 +199,23 @@
 	}
 
 	if(nd) {
-		if ((nd->intent.open.flags & O_ACCMODE) == O_RDONLY)
+		if ((nd->intent.it_flags & O_ACCMODE) == O_RDONLY)
 			desiredAccess = GENERIC_READ;
-		else if ((nd->intent.open.flags & O_ACCMODE) == O_WRONLY) {
+		else if ((nd->intent.it_flags & O_ACCMODE) == O_WRONLY) {
 			desiredAccess = GENERIC_WRITE;
 			write_only = TRUE;
-		} else if ((nd->intent.open.flags & O_ACCMODE) == O_RDWR) {
+		} else if ((nd->intent.it_flags & O_ACCMODE) == O_RDWR) {
 			/* GENERIC_ALL is too much permission to request */
 			/* can cause unnecessary access denied on create */
 			/* desiredAccess = GENERIC_ALL; */
 			desiredAccess = GENERIC_READ | GENERIC_WRITE;
 		}
 
-		if((nd->intent.open.flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
+		if((nd->intent.it_flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
 			disposition = FILE_CREATE;
-		else if((nd->intent.open.flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
+		else if((nd->intent.it_flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
 			disposition = FILE_OVERWRITE_IF;
-		else if((nd->intent.open.flags & O_CREAT) == O_CREAT)
+		else if((nd->intent.it_flags & O_CREAT) == O_CREAT)
 			disposition = FILE_OPEN_IF;
 		else {
 			cFYI(1,("Create flag not set in create function"));
diff -Nau /home/stevef/Documents/1.32/fs/cifs/link.c ./link.c
--- /home/stevef/Documents/1.32/fs/cifs/link.c	2005-04-03 23:20:48.000000000 -0500
+++ ./link.c	2005-04-11 22:40:48.537093976 -0500
@@ -134,6 +134,7 @@
 /* BB Add special case check for Samba DFS symlinks */
 
 		target_path[PATH_MAX-1] = 0;
+		rc = vfs_follow_link(nd, target_path);       
 	} else {
 		kfree(target_path);
 		target_path = ERR_PTR(rc);
@@ -143,7 +144,7 @@
 	kfree(full_path);
 out_no_free:
 	FreeXid(xid);
-	nd_set_link(nd, target_path);
+	/*nd_set_link(nd, target_path);*/
 	return 0;
 }
 
@@ -319,10 +320,3 @@
 	FreeXid(xid);
 	return rc;
 }
-
-void cifs_put_link(struct dentry *direntry, struct nameidata *nd)
-{
-	char *p = nd_get_link(nd);
-	if (!IS_ERR(p))
-		kfree(p);
-}
diff -Nau /home/stevef/Documents/1.32/fs/cifs/Makefile ./Makefile
--- /home/stevef/Documents/1.32/fs/cifs/Makefile	2005-04-03 23:20:48.000000000 -0500
+++ ./Makefile	2005-04-11 22:12:38.552010760 -0500
@@ -3,4 +3,4 @@
 #
 obj-$(CONFIG_CIFS) += cifs.o
 
-cifs-objs := cifsfs.o cifssmb.o cifs_debug.o connect.o dir.o file.o inode.o link.o misc.o netmisc.o smbdes.o smbencrypt.o transport.o asn1.o md4.o md5.o cifs_unicode.o nterr.o xattr.o cifsencrypt.o fcntl.o readdir.o ioctl.o
+cifs-objs := cifssmb.o cifs_debug.o file.o inode.o misc.o netmisc.o smbdes.o smbencrypt.o asn1.o md4.o md5.o cifs_unicode.o nterr.o xattr.o cifsencrypt.o readdir.o dir.o connect.o link.o transport.o cifsfs.o 
Common subdirectories: /home/stevef/Documents/1.32/fs/cifs/.tmp_versions and ./.tmp_versions
diff -Nau /home/stevef/Documents/1.32/fs/cifs/transport.c ./transport.c
--- /home/stevef/Documents/1.32/fs/cifs/transport.c	2005-04-03 23:20:48.000000000 -0500
+++ ./transport.c	2005-04-11 22:57:08.870060712 -0500
@@ -123,7 +123,8 @@
 	int rc = 0;
 	int i = 0;
 	struct msghdr smb_msg;
-	struct kvec iov;
+	struct iovec iov;
+	mm_segment_t temp_fs;
 	unsigned len = smb_buf_length + 4;
 
 	if(ssocket == NULL)
@@ -133,6 +134,8 @@
 
 	smb_msg.msg_name = sin;
 	smb_msg.msg_namelen = sizeof (struct sockaddr);
+	smb_msg.msg_iov = &iov;
+	smb_msg.msg_iovlen = 1;
 	smb_msg.msg_control = NULL;
 	smb_msg.msg_controllen = 0;
 	smb_msg.msg_flags = MSG_DONTWAIT + MSG_NOSIGNAL; /* BB add more flags?*/
@@ -146,8 +149,10 @@
 	cFYI(1, ("Sending smb of length %d ", smb_buf_length));
 	dump_smb(smb_buffer, len);
 
+	temp_fs = get_fs();     /* we must turn off socket api parm checking */
+	set_fs(get_ds());
 	while (len > 0) {
-		rc = kernel_sendmsg(ssocket, &smb_msg, &iov, 1, len);
+		rc = sock_sendmsg(ssocket, &smb_msg, len);
 		if ((rc == -ENOSPC) || (rc == -EAGAIN)) {
 			i++;
 			if(i > 60) {
@@ -166,6 +171,7 @@
 		iov.iov_len -= rc;
 		len -= rc;
 	}
+	set_fs(temp_fs);
 
 	if (rc < 0) {
 		cERROR(1,("Error %d sending data on socket to server.", rc));
@@ -176,206 +182,6 @@
 	return rc;
 }
 
-#ifdef CIFS_EXPERIMENTAL
-/* BB finish off this function, adding support for writing set of pages as iovec */
-/* and also adding support for operations that need to parse the response smb    */
-
-int
-smb_sendv(struct socket *ssocket, struct smb_hdr *smb_buffer,
-	 unsigned int smb_buf_length, struct kvec * write_vector /* page list */, struct sockaddr *sin)
-{
-	int rc = 0;
-	int i = 0;
-	struct msghdr smb_msg;
-	number_of_pages += 1; /* account for SMB header */
-	struct kvec * piov  = kmalloc(number_of_pages * sizeof(struct kvec));
-	if(i=0;i<num_pages-1;i++
-	unsigned len = smb_buf_length + 4;
-
-	if(ssocket == NULL)
-		return -ENOTSOCK; /* BB eventually add reconnect code here */
-	iov.iov_base = smb_buffer;
-	iov.iov_len = len;
-
-	smb_msg.msg_name = sin;
-	smb_msg.msg_namelen = sizeof (struct sockaddr);
-	smb_msg.msg_control = NULL;
-	smb_msg.msg_controllen = 0;
-	smb_msg.msg_flags = MSG_DONTWAIT + MSG_NOSIGNAL; /* BB add more flags?*/
-
-	/* smb header is converted in header_assemble. bcc and rest of SMB word
-	   area, and byte area if necessary, is converted to littleendian in 
-	   cifssmb.c and RFC1001 len is converted to bigendian in smb_send 
-	   Flags2 is converted in SendReceive */
-
-	smb_buffer->smb_buf_length = cpu_to_be32(smb_buffer->smb_buf_length);
-	cFYI(1, ("Sending smb of length %d ", smb_buf_length));
-	dump_smb(smb_buffer, len);
-
-	while (len > 0) {
-		rc = kernel_sendmsg(ssocket, &smb_msg, &iov, number_of_pages, len?);
-		if ((rc == -ENOSPC) || (rc == -EAGAIN)) {
-			i++;
-			if(i > 60) {
-				cERROR(1,
-				   ("sends on sock %p stuck for 30 seconds",
-				    ssocket));
-				rc = -EAGAIN;
-				break;
-			}
-			msleep(500);
-			continue;
-		}
-		if (rc < 0) 
-			break;
-		iov.iov_base += rc;
-		iov.iov_len -= rc;
-		len -= rc;
-	}
-
-	if (rc < 0) {
-		cERROR(1,("Error %d sending data on socket to server.", rc));
-	} else {
-		rc = 0;
-	}
-
-	return rc;
-}
-
-
-int
-CIFSSendRcv(const unsigned int xid, struct cifsSesInfo *ses,
-	    struct smb_hdr *in_buf, struct kvec * write_vector /* page list */, int *pbytes_returned, const int long_op)
-{
-	int rc = 0;
-	unsigned long timeout = 15 * HZ;
-	struct mid_q_entry *midQ = NULL;
-
-	if (ses == NULL) {
-		cERROR(1,("Null smb session"));
-		return -EIO;
-	}
-	if(ses->server == NULL) {
-		cERROR(1,("Null tcp session"));
-		return -EIO;
-	}
-	if(pbytes_returned == NULL)
-		return -EIO;
-	else
-		*pbytes_returned = 0;
-
-  
-
-	/* Ensure that we do not send more than 50 overlapping requests 
-	   to the same server. We may make this configurable later or
-	   use ses->maxReq */
-	if(long_op == -1) {
-		/* oplock breaks must not be held up */
-		atomic_inc(&ses->server->inFlight);
-	} else {
-		spin_lock(&GlobalMid_Lock); 
-		while(1) {        
-			if(atomic_read(&ses->server->inFlight) >= cifs_max_pending){
-				spin_unlock(&GlobalMid_Lock);
-				wait_event(ses->server->request_q,
-					atomic_read(&ses->server->inFlight)
-					 < cifs_max_pending);
-				spin_lock(&GlobalMid_Lock);
-			} else {
-				if(ses->server->tcpStatus == CifsExiting) {
-					spin_unlock(&GlobalMid_Lock);
-					return -ENOENT;
-				}
-
-			/* can not count locking commands against total since
-			   they are allowed to block on server */
-					
-				if(long_op < 3) {
-				/* update # of requests on the wire to server */
-					atomic_inc(&ses->server->inFlight);
-				}
-				spin_unlock(&GlobalMid_Lock);
-				break;
-			}
-		}
-	}
-	/* make sure that we sign in the same order that we send on this socket 
-	   and avoid races inside tcp sendmsg code that could cause corruption
-	   of smb data */
-
-	down(&ses->server->tcpSem); 
-
-	if (ses->server->tcpStatus == CifsExiting) {
-		rc = -ENOENT;
-		goto cifs_out_label;
-	} else if (ses->server->tcpStatus == CifsNeedReconnect) {
-		cFYI(1,("tcp session dead - return to caller to retry"));
-		rc = -EAGAIN;
-		goto cifs_out_label;
-	} else if (ses->status != CifsGood) {
-		/* check if SMB session is bad because we are setting it up */
-		if((in_buf->Command != SMB_COM_SESSION_SETUP_ANDX) && 
-			(in_buf->Command != SMB_COM_NEGOTIATE)) {
-			rc = -EAGAIN;
-			goto cifs_out_label;
-		} /* else ok - we are setting up session */
-	}
-	midQ = AllocMidQEntry(in_buf, ses);
-	if (midQ == NULL) {
-		up(&ses->server->tcpSem);
-		/* If not lock req, update # of requests on wire to server */
-		if(long_op < 3) {
-			atomic_dec(&ses->server->inFlight); 
-			wake_up(&ses->server->request_q);
-		}
-		return -ENOMEM;
-	}
-
-	if (in_buf->smb_buf_length > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE - 4) {
-		up(&ses->server->tcpSem);
-		cERROR(1,
-		       ("Illegal length, greater than maximum frame, %d ",
-			in_buf->smb_buf_length));
-		DeleteMidQEntry(midQ);
-		/* If not lock req, update # of requests on wire to server */
-		if(long_op < 3) {
-			atomic_dec(&ses->server->inFlight); 
-			wake_up(&ses->server->request_q);
-		}
-		return -EIO;
-	}
-
-	/* BB can we sign efficiently in this path? */
-	rc = cifs_sign_smb(in_buf, ses->server, &midQ->sequence_number);
-
-	midQ->midState = MID_REQUEST_SUBMITTED;
-/*	rc = smb_sendv(ses->server->ssocket, in_buf, in_buf->smb_buf_length, piovec,
-		      (struct sockaddr *) &(ses->server->addr.sockAddr));*/
-	if(rc < 0) {
-		DeleteMidQEntry(midQ);
-		up(&ses->server->tcpSem);
-		/* If not lock req, update # of requests on wire to server */
-		if(long_op < 3) {
-			atomic_dec(&ses->server->inFlight); 
-			wake_up(&ses->server->request_q);
-		}
-		return rc;
-	} else
-		up(&ses->server->tcpSem);
-cifs_out_label:
-	if(midQ)
-	        DeleteMidQEntry(midQ);
-                                                                                                                           
-	if(long_op < 3) {
-		atomic_dec(&ses->server->inFlight);
-		wake_up(&ses->server->request_q);
-	}
-
-	return rc;
-}
-
-
-#endif /* CIFS_EXPERIMENTAL */
 
 int
 SendReceive(const unsigned int xid, struct cifsSesInfo *ses,
