Mercurial > illumos > illumos-gate
changeset 13938:c99b1993453c
3325 nsmb_close locking and teardown deadlock
Reviewed by: Albert Lee <trisk@nexenta.com>
Reviewed by: Gordon Ross <gwr@nexenta.com>
Reviewed by: Yakov Zaytsev <yakov@nexenta.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
author | Bayard Bell <bayard.bell@nexenta.com> |
---|---|
date | Wed, 30 Jan 2013 23:35:38 +0100 |
parents | 6b4f289e7094 |
children | 20e4d8d8da6d |
files | usr/src/uts/common/fs/smbclnt/netsmb/smb_dev.c usr/src/uts/common/fs/smbclnt/netsmb/smb_smb.c |
diffstat | 2 files changed, 7 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/fs/smbclnt/netsmb/smb_dev.c Wed Jan 30 15:02:58 2013 -0800 +++ b/usr/src/uts/common/fs/smbclnt/netsmb/smb_dev.c Wed Jan 30 23:35:38 2013 +0100 @@ -31,7 +31,7 @@ */ /* - * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright 2012 Nexenta Systems, Inc. All rights reserved. * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -491,7 +491,6 @@ smb_dev_t *sdp; int err; - mutex_enter(&dev_lck); /* * 1. Check the validity of the minor number. * 2. Release any shares/vc associated with the connection. @@ -508,6 +507,7 @@ /* * Free the instance */ + mutex_enter(&dev_lck); ddi_soft_state_free(statep, inst); mutex_exit(&dev_lck); return (err);
--- a/usr/src/uts/common/fs/smbclnt/netsmb/smb_smb.c Wed Jan 30 15:02:58 2013 -0800 +++ b/usr/src/uts/common/fs/smbclnt/netsmb/smb_smb.c Wed Jan 30 23:35:38 2013 +0100 @@ -33,7 +33,7 @@ */ /* - * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright 2012 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. */ @@ -500,8 +500,8 @@ smb_rq_bstart(rqp); smb_rq_bend(rqp); - /* Make sure we send it... */ - rqp->sr_flags |= SMBR_NOINTR_SEND; + /* Make sure we send, but only if already connected */ + rqp->sr_flags |= (SMBR_NOINTR_SEND | SMBR_NORECONNECT); error = smb_rq_simple(rqp); smb_rq_done(rqp); return (error); @@ -593,8 +593,8 @@ smb_rq_bstart(rqp); smb_rq_bend(rqp); - /* Make sure we send it... */ - rqp->sr_flags |= SMBR_NOINTR_SEND; + /* Make sure we send but only if already connected */ + rqp->sr_flags |= (SMBR_NOINTR_SEND | SMBR_NORECONNECT); error = smb_rq_simple(rqp); smb_rq_done(rqp); return (error);