--- linux-2.0.30/fs/smbfs/sock.c.old Sun Apr 27 15:53:57 1997
+++ linux-2.0.30/fs/smbfs/sock.c Fri Aug 1 11:08:35 1997
@@ -338,6 +338,8 @@
DPRINTK("smb_receive: Increase packet size from %d to %d\n",
server->packet_size, len + 4);
smb_vfree(server->packet);
+ server->packet = NULL;
+
server->packet_size = 0;
server->packet = smb_vmalloc(len + 4);
if (server->packet == NULL)
--- linux-2.0.30/fs/smbfs/proc.c.old Sun Apr 27 15:53:57 1997
+++ linux-2.0.30/fs/smbfs/proc.c Fri Aug 1 10:34:49 1997
@@ -1685,6 +1685,7 @@
if (server->packet != NULL)
{
smb_vfree(server->packet);
+ server->packet = NULL;
server->packet_size = 0;
}
server->packet = smb_vmalloc(max_xmit);
@@ -1920,6 +1921,7 @@
/* Now make a new packet with the correct size. */
smb_vfree(server->packet);
+ server->packet = NULL;
server->packet = smb_vmalloc(server->max_xmit);
if (server->packet == NULL)
--- linux-2.0.30/fs/smbfs/inode.c.old Sun Dec 1 08:58:05 1996
+++ linux-2.0.30/fs/smbfs/inode.c Fri Aug 1 11:32:57 1997
@@ -96,10 +96,23 @@
struct smb_server *server = SMB_SERVER(inode);
struct smb_inode_info *info = SMB_INOP(inode);
+ if (inode->i_count > 1) {
+ printk("smb_put_inode: in use device %s, inode %ld count=%d\n",
+ kdevname(inode->i_dev), inode->i_ino, inode->i_count);
+ return;
+ }
+
if (S_ISDIR(inode->i_mode))
{
smb_invalid_dir_cache(inode->i_ino);
}
+ clear_inode(inode);
+
+ /*
+ * We don't want the inode to be reused as free if we block here,
+ * so temporarily increment i_count.
+ */
+ inode->i_count++;
if (finfo->opened != 0)
{
if (smb_proc_close(server, finfo->fileid, inode->i_mtime))
@@ -109,7 +122,7 @@
}
}
smb_free_inode_info(info);
- clear_inode(inode);
+ inode->i_count--;
}
static void
Michael
-- Dr. Michael Meskes, Project-Manager | topsystem Systemhaus GmbH meskes@topsystem.de | Europark A2, Adenauerstr. 20 meskes@debian.org | 52146 Wuerselen Go SF49ers! Go Rhein Fire! | Tel: (+49) 2405/4670-44 Use Debian GNU/Linux! | Fax: (+49) 2405/4670-10