version 1.7, 2006/10/12 01:32:14 |
version 1.7.2.2, 2007/02/17 23:27:46 |
Line 473 udf_lookup(void *v) |
|
Line 473 udf_lookup(void *v) |
|
struct udf_mount *ump; |
struct udf_mount *ump; |
struct long_ad icb_loc; |
struct long_ad icb_loc; |
const char *name; |
const char *name; |
int namelen, nameiop, islastcn, lock_parent, mounted_ro; |
int namelen, nameiop, islastcn, mounted_ro; |
int vnodetp; |
int vnodetp; |
int error, found; |
int error, found; |
|
|
Line 486 udf_lookup(void *v) |
|
Line 486 udf_lookup(void *v) |
|
/* simplify/clarification flags */ |
/* simplify/clarification flags */ |
nameiop = cnp->cn_nameiop; |
nameiop = cnp->cn_nameiop; |
islastcn = cnp->cn_flags & ISLASTCN; |
islastcn = cnp->cn_flags & ISLASTCN; |
lock_parent = cnp->cn_flags & LOCKPARENT; |
|
mounted_ro = dvp->v_mount->mnt_flag & MNT_RDONLY; |
mounted_ro = dvp->v_mount->mnt_flag & MNT_RDONLY; |
|
|
/* check exec/dirread permissions first */ |
/* check exec/dirread permissions first */ |
Line 531 udf_lookup(void *v) |
|
Line 530 udf_lookup(void *v) |
|
|
|
/* first unlock parent */ |
/* first unlock parent */ |
VOP_UNLOCK(dvp, 0); |
VOP_UNLOCK(dvp, 0); |
cnp->cn_flags |= PDIRUNLOCK; |
|
|
|
/* get our node */ |
/* get our node */ |
name = ".."; |
name = ".."; |
Line 551 udf_lookup(void *v) |
|
Line 549 udf_lookup(void *v) |
|
} |
} |
} |
} |
|
|
/* see if we're requested to lock the parent */ |
/* try to relock parent */ |
if (lock_parent && islastcn) { |
vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY); |
if (vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY) == 0) |
|
cnp->cn_flags &= ~PDIRUNLOCK; |
|
} |
|
/* done */ |
|
} else { |
} else { |
DPRINTF(LOOKUP, ("\tlookup file\n")); |
DPRINTF(LOOKUP, ("\tlookup file\n")); |
/* all other files */ |
/* all other files */ |
Line 603 udf_lookup(void *v) |
|
Line 597 udf_lookup(void *v) |
|
|
|
} |
} |
if (!error) { |
if (!error) { |
/* |
|
* If LOCKPARENT or ISLASTCN is not set, dvp |
|
* is returned unlocked on a successful |
|
* lookup. |
|
*/ |
|
*vpp = res_node->vnode; |
*vpp = res_node->vnode; |
if (!lock_parent || !islastcn) |
|
VOP_UNLOCK(dvp, 0); |
|
} |
} |
/* done */ |
|
} |
} |
/* done */ |
|
} |
} |
|
|
/* |
/* |
Line 713 udf_getattr(void *v) |
|
Line 698 udf_getattr(void *v) |
|
vap->va_gen = 1; /* no multiple generations yes (!?) */ |
vap->va_gen = 1; /* no multiple generations yes (!?) */ |
vap->va_flags = 0; /* no flags */ |
vap->va_flags = 0; /* no flags */ |
vap->va_rdev = udf_node->rdev; |
vap->va_rdev = udf_node->rdev; |
vap->va_bytes = udf_node->ump->discinfo.sector_size * blkssize; |
vap->va_bytes = blkssize * udf_node->ump->discinfo.sector_size; |
vap->va_filerev = 1; /* TODO file revision numbers? */ |
vap->va_filerev = 1; /* TODO file revision numbers? */ |
vap->va_vaflags = 0; /* TODO which va_vaflags? */ |
vap->va_vaflags = 0; /* TODO which va_vaflags? */ |
|
|