diff options
| author | dhain <none@none> | 2007-04-12 09:39:08 -0700 |
|---|---|---|
| committer | dhain <none@none> | 2007-04-12 09:39:08 -0700 |
| commit | 1c070cc61610a26cde9ba1e3b72d1c83a2f1f505 (patch) | |
| tree | f4b1bc77e07a5e6b11bb10c294c10bff56d8fa71 /usr/src | |
| parent | 2278e7fc4650f16255db08e12d694bd293cc26d6 (diff) | |
| download | illumos-joyent-1c070cc61610a26cde9ba1e3b72d1c83a2f1f505.tar.gz | |
6525694 T2000 hangs at boot with S10u3 and three qlc PCI-E cards installed
Diffstat (limited to 'usr/src')
| -rw-r--r-- | usr/src/uts/common/fs/devfs/devfs_vnops.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/usr/src/uts/common/fs/devfs/devfs_vnops.c b/usr/src/uts/common/fs/devfs/devfs_vnops.c index c55295b0f6..e4d2a6150e 100644 --- a/usr/src/uts/common/fs/devfs/devfs_vnops.c +++ b/usr/src/uts/common/fs/devfs/devfs_vnops.c @@ -62,6 +62,7 @@ #include <fs/fs_subr.h> #include <sys/fs/dv_node.h> +#include <sys/sunndi.h> extern struct vattr dv_vattr_dir, dv_vattr_file; extern dev_t rconsdev; @@ -861,6 +862,7 @@ devfs_readdir(struct vnode *dvp, struct uio *uiop, struct cred *cred, int *eofp) int error; struct vattr va; size_t bufsz; + int circ; ddv = VTODV(dvp); dcmn_err2(("devfs_readdir %s: offset %lld len %ld\n", @@ -882,6 +884,8 @@ devfs_readdir(struct vnode *dvp, struct uio *uiop, struct cred *cred, int *eofp) /* Load the initial contents */ if (ddv->dv_flags & DV_BUILD) { + /* Lock the underlying devi structure */ + ndi_devi_enter(ddv->dv_devi, &circ); if (!rw_tryupgrade(&ddv->dv_contents)) { rw_exit(&ddv->dv_contents); rw_enter(&ddv->dv_contents, RW_WRITER); @@ -892,6 +896,7 @@ devfs_readdir(struct vnode *dvp, struct uio *uiop, struct cred *cred, int *eofp) dv_filldir(ddv); rw_downgrade(&ddv->dv_contents); + ndi_devi_exit(ddv->dv_devi, circ); } soff = uiop->uio_loffset; |
