LICENSE MIT
cm_Link() is used to create hard links. It did not apply the updated
link target status info to the target cm_scache_t object. As a result
the linkCount would be incorrect.
cm_Unlink() did not take linkCount into account. It did not reduce the
locally known linkCount, nor did it invalidate any currently known
callback. As a result the linkCount would be incorrect.
(cherry picked from commit
b8a1dba29367c9786a5f43c90b0a000ff4d4315d)
cm_ReleaseSCache(scp);
if (code == 0) {
lock_ObtainWrite(&scp->rw);
- scp->flags |= CM_SCACHEFLAG_DELETED;
+ if (--scp->linkCount == 0)
+ scp->flags |= CM_SCACHEFLAG_DELETED;
+ cm_DiscardSCache(scp);
lock_ReleaseWrite(&scp->rw);
}
}
}
cm_EndDirOp(&dirop);
+ /* Update the linked object status */
+ if (code == 0) {
+ lock_ObtainWrite(&sscp->rw);
+ cm_MergeStatus(NULL, sscp, &newLinkStatus, &volSync, userp, 0);
+ lock_ReleaseWrite(&sscp->rw);
+ }
+
free(fnamep);
return code;