tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

VOP_CREATE hanging



For my subfile project I am creating a directory and not attaching it to a parent directory, but rather storing the inode number of the directory and retrieving it using VGET. I'm having a problem when I try to create files within this directory however, it seems to just hang. Seems to be when I call VOP_CREATE so I was thinking I might have some argument messed up but I've been at it for awhile and can't seem to find the problem.

Here is a snipit of code from when I attempt to create the file:

                printf("subfile not found, needs to be created\n");
                NDINIT(&sfnd, CREATE, TRYEMULROOT, UIO_USERSPACE,
                        SCARG(uap, sub_path));

                sfnd.ni_cnd.cn_nameiop = CREATE;
                sfnd.ni_cnd.cn_flags |= LOCKPARENT | LOCKLEAF;
if ((SCARG(uap, flags) & O_EXCL) == 0 && ((SCARG(uap, flags) & O_NOFOLLOW) == 0))
                        sfnd.ni_cnd.cn_flags |= FOLLOW;

                /* lock subfile directory */
                if(VOP_ISLOCKED(sdvp) == 0){
                        printf("sdvp is unlocked, now locking\n");
                        vn_lock(sdvp, LK_EXCLUSIVE | LK_RETRY);
                }

                /* set the attr of the new file */
                VATTR_NULL(&sfva);
                sfva.va_type = VREG;
sfva.va_mode = ((bva.va_mode &~ cwdi->cwdi_cmask) & ALLPERMS) &~ S_ISTXT;
                if (SCARG(uap, flags) & O_EXCL)
                        sfva.va_vaflags |= VA_EXCLUSIVE;

                error = VOP_CREATE(sdvp,&sfvp,&(sfnd.ni_cnd),&sfva);
                printf("VOP_CREATE error = %d\n",error);

Any advice on why it is hanging or even why it might be hanging this would be greatly appreciated. I can post more info if that would help.

Adam


Home | Main Index | Thread Index | Old Index