Lines Matching refs:hfsmp

62 static int  setfirstlink(struct hfsmount * hfsmp, cnid_t fileid, cnid_t firstlink);
63 static int getfirstlink(struct hfsmount * hfsmp, cnid_t fileid, cnid_t *firstlink);
65 int hfs_makelink(struct hfsmount *hfsmp, struct vnode *src_vp, struct cnode *cp,
82 createindirectlink(struct hfsmount *hfsmp, u_int32_t linknum, struct cat_desc *descp,
98 attr.ca_itime = hfsmp->hfs_metadata_createdate;
121 return cat_createlink(hfsmp, descp, &attr, nextcnid, linkcnid);
134 hfs_makelink(struct hfsmount *hfsmp, struct vnode *src_vp, struct cnode *cp,
159 if (dcp->c_fileid == hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid ||
160 dcp->c_fileid == hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid) {
166 if ((retval = cat_preflight(hfsmp, (2 * CAT_CREATE)+ CAT_RENAME, &cookie, p))) {
175 lockflags = hfs_systemfile_lock(hfsmp, lockflags, HFS_EXCLUSIVE_LOCK);
187 to_desc.cd_parentcnid = hfsmp->hfs_private_desc[type].cd_cnid;
211 retval = cat_rename(hfsmp, &cp->c_desc, &hfsmp->hfs_private_desc[type],
232 retval = createindirectlink(hfsmp, indnodeno, &link_desc, 0, &linkcnid, true);
240 err = cat_rename(hfsmp, &to_desc, &dcp->c_desc, &cp->c_desc, NULL);
249 if (setfirstlink(hfsmp, cp->c_fileid, linkcnid) == 0)
271 retval = getfirstlink(hfsmp, cp->c_fileid, &orig_firstlink);
276 retval = createindirectlink(hfsmp, indnodeno, &link_desc,
283 (void) cat_delete(hfsmp, &cp->c_desc, &cp->c_attr);
289 err = cat_rename(hfsmp, &to_desc, &dcp->c_desc, &cp->c_desc, NULL);
299 (void) cat_update_siblinglinks(hfsmp, orig_firstlink, linkcnid, HFS_IGNORABLE_LINK);
303 if (setfirstlink(hfsmp, cp->c_fileid, linkcnid) == 0)
321 hfsmp->hfs_private_attr[type].ca_entries++;
327 INC_FOLDERCOUNT(hfsmp, hfsmp->hfs_private_attr[type]);
329 retval = cat_update(hfsmp, &hfsmp->hfs_private_desc[type],
330 &hfsmp->hfs_private_attr[type], NULL, NULL);
382 hfs_systemfile_unlock(hfsmp, lockflags);
384 cat_postflight(hfsmp, &cookie, p);
387 hfs_volupdate(hfsmp, VOL_MKFILE, 0);
404 struct hfsmount *hfsmp;
419 hfsmp = VTOHFS(vp);
423 if (hfsmp->hfs_flags & HFS_STANDARD) {
432 if (hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid == 0) {
440 if (hfsmp->jnl == NULL) {
444 if ((error = hfs_vget(hfsmp, hfs_currentparent(VTOC(vp)), &fdvp, 1, 0))) {
449 if (hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid == 0) {
453 if (hfs_freeblks(hfsmp, 0) == 0) {
517 if (hfs_start_transaction(hfsmp) != 0) {
531 lockflags = hfs_systemfile_lock(hfsmp, SFL_CATALOG, HFS_SHARED_LOCK);
534 if (cat_lookup(hfsmp, &todesc, 0, NULL, NULL, NULL, NULL) == 0) {
542 if ((cat_idlookup(hfsmp, cp->c_fileid, 0, 0, NULL, &cattr, NULL) != 0) ||
551 if ((cat_lookup(hfsmp, &cp->c_desc, 0, NULL, NULL, NULL, &fileid) != 0) ||
573 cat_check_link_ancestry(hfsmp, tdcp->c_fileid, cp->c_fileid)) {
578 hfs_systemfile_unlock(hfsmp, lockflags);
583 error = hfs_makelink(hfsmp, vp, cp, tdcp, cnp);
586 hfs_volupdate(hfsmp, VOL_UPDATE, 0);
597 INC_FOLDERCOUNT(hfsmp, tdcp->c_attr);
601 error = cat_set_childlinkbit(hfsmp, tdcp->c_parentcnid);
630 error = cat_set_childlinkbit(hfsmp, fdcp->c_parentcnid);
636 hfs_volupdate(hfsmp, VOL_MKFILE,
648 hfs_systemfile_unlock(hfsmp, lockflags);
651 hfs_end_transaction(hfsmp);
675 hfs_unlink(struct hfsmount *hfsmp, struct vnode *dvp, struct vnode *vp, struct componentname *cnp, int skip_reserve)
688 if (hfsmp->hfs_flags & HFS_STANDARD) {
699 if ((error = hfs_start_transaction(hfsmp)) != 0) {
726 lockflags = hfs_systemfile_lock(hfsmp, lockflags, HFS_EXCLUSIVE_LOCK);
728 if ((error = cat_lookuplink(hfsmp, &cndesc, &cndesc.cd_cnid, &prevlinkid, &nextlinkid))) {
733 if (!skip_reserve && (error = cat_preflight(hfsmp, 2 * CAT_DELETE, NULL, 0))) {
744 if ((error = cat_deletelink(hfsmp, &cndesc))) {
753 DEC_FOLDERCOUNT(hfsmp, dcp->c_attr);
759 (void ) cat_update(hfsmp, &dcp->c_desc, &dcp->c_attr, NULL, NULL);
787 from_desc.cd_parentcnid = hfsmp->hfs_private_desc[DIR_HARDLINKS].cd_cnid;
793 from_desc.cd_parentcnid = hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid;
804 to_desc.cd_parentcnid = hfsmp->hfs_private_desc[FILE_HARDLINKS].cd_cnid;
807 error = cat_rename(hfsmp, &from_desc, &hfsmp->hfs_private_desc[FILE_HARDLINKS],
814 hfsmp->hfs_private_attr[DIR_HARDLINKS].ca_entries--;
815 DEC_FOLDERCOUNT(hfsmp, hfsmp->hfs_private_attr[DIR_HARDLINKS]);
817 hfsmp->hfs_private_attr[FILE_HARDLINKS].ca_entries++;
818 INC_FOLDERCOUNT(hfsmp, hfsmp->hfs_private_attr[FILE_HARDLINKS]);
820 (void)cat_update(hfsmp, &hfsmp->hfs_private_desc[DIR_HARDLINKS],
821 &hfsmp->hfs_private_attr[DIR_HARDLINKS], NULL, NULL);
822 (void)cat_update(hfsmp, &hfsmp->hfs_private_desc[FILE_HARDLINKS],
823 &hfsmp->hfs_private_attr[FILE_HARDLINKS], NULL, NULL);
836 getfirstlink(hfsmp, cp->c_fileid, &firstlink) == 0 &&
838 if (setfirstlink(hfsmp, cp->c_fileid, nextlinkid) == 0)
845 (void) cat_update_siblinglinks(hfsmp, prevlinkid, HFS_IGNORABLE_LINK, nextlinkid);
849 (void) cat_update_siblinglinks(hfsmp, nextlinkid, prevlinkid, HFS_IGNORABLE_LINK);
855 (void) cat_update(hfsmp, &cp->c_desc, &cp->c_attr, NULL, NULL);
858 hfs_systemfile_unlock(hfsmp, lockflags);
862 hfs_volupdate(hfsmp, VOL_RMFILE, (dcp->c_cnid == kHFSRootFolderID));
875 hfs_systemfile_unlock(hfsmp, lockflags);
878 hfs_end_transaction(hfsmp);
900 hfs_privatedir_init(struct hfsmount * hfsmp, enum privdirtype type)
912 if (hfsmp->hfs_flags & HFS_STANDARD) {
916 priv_descp = &hfsmp->hfs_private_desc[type];
917 priv_attrp = &hfsmp->hfs_private_attr[type];
929 lockflags = hfs_systemfile_lock(hfsmp, SFL_CATALOG, HFS_SHARED_LOCK);
930 error = cat_lookup(hfsmp, priv_descp, 0, NULL, priv_attrp, NULL, NULL);
931 hfs_systemfile_unlock(hfsmp, lockflags);
935 hfsmp->hfs_metadata_createdate = priv_attrp->ca_itime;
942 if (hfsmp->hfs_flags & HFS_READ_ONLY) {
947 if (hfs_vget(hfsmp, kRootDirID, &dvp, 0, 0) != 0) {
961 priv_attrp->ca_itime = hfsmp->hfs_itime;
969 if (hfs_start_transaction(hfsmp) != 0) {
974 lockflags = hfs_systemfile_lock(hfsmp, SFL_CATALOG, HFS_EXCLUSIVE_LOCK);
977 if (cat_preflight(hfsmp, CAT_CREATE, NULL, 0) != 0) {
978 hfs_systemfile_unlock(hfsmp, lockflags);
983 error = cat_create(hfsmp, priv_descp, priv_attrp, NULL);
989 INC_FOLDERCOUNT(hfsmp, dcp->c_attr);
994 (void) cat_update(hfsmp, &dcp->c_desc, &dcp->c_attr, NULL, NULL);
997 hfs_systemfile_unlock(hfsmp, lockflags);
1003 hfsmp->hfs_metadata_createdate = priv_attrp->ca_itime;
1005 hfs_volupdate(hfsmp, VOL_MKDIR, 1);
1008 hfs_end_transaction(hfsmp);
1015 hfs_xattr_init(hfsmp);
1024 hfs_lookup_siblinglinks(struct hfsmount *hfsmp, cnid_t linkfileid, cnid_t *prevlinkid, cnid_t *nextlinkid)
1032 lockflags = hfs_systemfile_lock(hfsmp, SFL_CATALOG, HFS_SHARED_LOCK);
1034 error = cat_lookup_siblinglinks(hfsmp, linkfileid, prevlinkid, nextlinkid);
1036 hfs_systemfile_unlock(hfsmp, lockflags);
1037 lockflags = hfs_systemfile_lock(hfsmp, SFL_ATTRIBUTE, HFS_SHARED_LOCK);
1039 error = getfirstlink(hfsmp, linkfileid, nextlinkid);
1041 hfs_systemfile_unlock(hfsmp, lockflags);
1197 setfirstlink(struct hfsmount * hfsmp, cnid_t fileid, cnid_t firstlink)
1207 if (hfsmp->hfs_attribute_cp == NULL) {
1239 btfile = hfsmp->hfs_attribute_cp->c_datafork;
1259 getfirstlink(struct hfsmount * hfsmp, cnid_t fileid, cnid_t *firstlink)
1269 if (hfsmp->hfs_attribute_cp == NULL) {
1286 btfile = hfsmp->hfs_attribute_cp->c_datafork;