- if (!hfs_haslinkorigin(cp) &&
- (cat_findname(VFSTOHFS(mp), (cnid_t)ino, &cdesc) == 0)) {
- if (cdesc.cd_parentcnid !=
- VFSTOHFS(mp)->hfs_private_desc[DIR_HARDLINKS].cd_cnid) {
- hfs_savelinkorigin(cp, cdesc.cd_parentcnid);
+ if (!hfs_haslinkorigin(cp)) {
+ lockflags = hfs_systemfile_lock(hfsmp, SFL_CATALOG, HFS_SHARED_LOCK);
+ error = cat_findname(hfsmp, (cnid_t)ino, &cdesc);
+ hfs_systemfile_unlock(hfsmp, lockflags);
+ if (error == 0) {
+ if ((cdesc.cd_parentcnid !=
+ hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid) &&
+ (cdesc.cd_parentcnid !=
+ hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid)) {
+ hfs_savelinkorigin(cp, cdesc.cd_parentcnid);
+ }
+ cat_releasedesc(&cdesc);