diff --git a/kernel-src/fs/ext2.c b/kernel-src/fs/ext2.c index da16f7b9..f83018d4 100644 --- a/kernel-src/fs/ext2.c +++ b/kernel-src/fs/ext2.c @@ -1064,7 +1064,6 @@ static int ext2_open(vnode_t **vnodep, int flags, cred_t *cred) { int error = 0; if (type == V_TYPE_FIFO) { - VOP_LOCK(*vnodep); vnode_t *fifo; error = pipefs_getbinding(*vnodep, &fifo); VOP_UNLOCK(*vnodep); @@ -1074,9 +1073,12 @@ static int ext2_open(vnode_t **vnodep, int flags, cred_t *cred) { VOP_LOCK(fifo); error = VOP_OPEN(&fifo, flags, cred); VOP_UNLOCK(fifo); + VOP_LOCK(*vnodep); - if (error == 0) + if (error == 0) { + VOP_HOLD(fifo); *vnodep = fifo; + } } return error; diff --git a/kernel-src/fs/tmpfs.c b/kernel-src/fs/tmpfs.c index b80a64e8..c748e8de 100644 --- a/kernel-src/fs/tmpfs.c +++ b/kernel-src/fs/tmpfs.c @@ -183,8 +183,10 @@ static int tmpfs_open(vnode_t **nodep, int flags, cred_t *cred) { return error; VOP_LOCK(fifo); + VOP_UNLOCK(node); error = VOP_OPEN(&fifo, flags, cred); VOP_UNLOCK(fifo); + VOP_LOCK(node); if (error == 0) { *nodep = fifo; VOP_HOLD(fifo);