• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.5.8/xnu-1228.15.4/bsd/hfs/

Lines Matching defs:hfsmp

96 	struct hfsmount *hfsmp;
162 hfs_recording_start(struct hfsmount *hfsmp)
171 if ((hfsmp->hfs_flags & HFS_READ_ONLY) ||
172 (hfsmp->jnl == NULL) ||
173 (hfsmp->hfs_flags & HFS_METADATA_ZONE) == 0) {
176 if (HFSTOVCB(hfsmp)->freeBlocks < (2 * (u_int32_t)hfsmp->hfs_hotfile_maxblks)) {
179 if (hfsmp->hfc_stage != HFC_IDLE) {
182 hfsmp->hfc_stage = HFC_BUSY;
187 if (hfsmp->hfc_recdata) {
190 tmp = hfsmp->hfc_recdata;
191 hfsmp->hfc_recdata = NULL;
200 if (hfsmp->hfc_timebase == 0 &&
201 hfc_btree_open(hfsmp, &hfsmp->hfc_filevp) == 0) {
204 if ((BTGetUserData(VTOF(hfsmp->hfc_filevp), &hotfileinfo,
209 hfsmp->hfc_maxfiles = SWAP_BE32 (hotfileinfo.maxfilecnt);
210 hfsmp->hfc_timeout = SWAP_BE32 (hotfileinfo.timeleft) + tv.tv_sec ;
211 hfsmp->hfc_timebase = SWAP_BE32 (hotfileinfo.timebase);
213 if (hfsmp->hfc_timebase < HFC_MIN_BASE_TIME) {
214 hfsmp->hfc_timebase = hfsmp->hfc_timeout - HFC_DEFAULT_DURATION;
218 hfsmp->vcbVN, SWAP_BE32 (hotfileinfo.timeleft));
221 hfsmp->hfc_maxfiles = HFC_DEFAULT_FILE_COUNT;
222 hfsmp->hfc_timebase = tv.tv_sec + 1;
223 hfsmp->hfc_timeout = hfsmp->hfc_timebase + HFC_DEFAULT_DURATION;
225 (void) hfc_btree_close(hfsmp, hfsmp->hfc_filevp);
226 hfsmp->hfc_filevp = NULL;
234 cnid = GetFileInfo(HFSTOVCB(hfsmp), kRootDirID, HFC_FILENAME, &cattr, NULL);
237 (error = hfc_btree_create(hfsmp, HFSTOVCB(hfsmp)->blockSize, HFC_DEFAULT_FILE_COUNT))) {
238 hfsmp->hfc_stage = HFC_IDLE;
239 wakeup((caddr_t)&hfsmp->hfc_stage);
243 printf("HFS: begin recording hot files on %s\n", hfsmp->vcbVN);
245 hfsmp->hfc_maxfiles = HFC_DEFAULT_FILE_COUNT;
246 hfsmp->hfc_timeout = tv.tv_sec + HFC_DEFAULT_DURATION;
249 if (hfsmp->hfc_timebase == 0) {
250 hfsmp->hfc_timebase = tv.tv_sec + 1;
254 cumulativebase = hfsmp->hfc_timeout - (HFC_CUMULATIVE_CYCLES * HFC_DEFAULT_DURATION);
255 hfsmp->hfc_timebase = MAX(hfsmp->hfc_timebase, cumulativebase);
259 if ((hfsmp->hfc_maxfiles == 0) ||
260 (hfsmp->hfc_maxfiles > HFC_MAXIMUM_FILE_COUNT)) {
261 hfsmp->hfc_maxfiles = HFC_DEFAULT_FILE_COUNT;
263 maxentries = hfsmp->hfc_maxfiles;
277 hotdata->maxblocks = HFC_MAXIMUM_FILESIZE / HFSTOVCB(hfsmp)->blockSize;
278 hotdata->hfsmp = hfsmp;
280 hfsmp->hfc_recdata = hotdata;
281 hfsmp->hfc_stage = HFC_RECORDING;
282 wakeup((caddr_t)&hfsmp->hfc_stage);
292 hfs_recording_stop(struct hfsmount *hfsmp)
301 if (hfsmp->hfc_stage != HFC_RECORDING)
304 hfsmp->hfc_stage = HFC_BUSY;
306 hotfiles_collect(hfsmp);
315 printf("HFS: end of hot file recording on %s\n", hfsmp->vcbVN);
317 hotdata = (hotfile_data_t *)hfsmp->hfc_recdata;
320 hfsmp->hfc_recdata = NULL;
321 hfsmp->hfc_stage = HFC_EVALUATION;
322 wakeup((caddr_t)&hfsmp->hfc_stage);
336 if (hfsmp->hfc_filevp)
337 panic("hfs_recording_stop: hfc_filevp exists (vp = %p)", hfsmp->hfc_filevp);
339 error = hfc_btree_open(hfsmp, &hfsmp->hfc_filevp);
347 error = hotfiles_age(hfsmp);
349 (void) hfc_btree_close(hfsmp, hfsmp->hfc_filevp);
350 hfsmp->hfc_filevp = NULL;
362 (void) hfc_btree_close(hfsmp, hfsmp->hfc_filevp);
363 hfsmp->hfc_filevp = NULL;
371 listp->hfl_duration = tv.tv_sec - hfsmp->hfc_timebase;
372 hfsmp->hfc_recdata = listp;
377 error = hotfiles_refine(hfsmp);
379 (void) hfc_btree_close(hfsmp, hfsmp->hfc_filevp);
380 hfsmp->hfc_filevp = NULL;
387 if (listp->hfl_totalblocks > hfsmp->hfs_hotfile_freeblks) {
389 MIN(listp->hfl_totalblocks, hfsmp->hfs_hotfile_maxblks) -
390 hfsmp->hfs_hotfile_freeblks;
403 (void) hfc_btree_close(hfsmp, hfsmp->hfc_filevp);
404 hfsmp->hfc_filevp = NULL;
416 hfsmp->hfc_stage = newstage;
417 wakeup((caddr_t)&hfsmp->hfc_stage);
426 hfs_recording_suspend(struct hfsmount *hfsmp)
433 if (hfsmp->hfc_stage == HFC_DISABLED)
436 lck_mtx_lock(&hfsmp->hfc_mutex);
445 hotdata = (hotfile_data_t *)hfsmp->hfc_recdata;
446 if (hotdata == NULL || hfsmp->hfc_stage != HFC_RECORDING) {
450 hfsmp->hfc_stage = HFC_BUSY;
453 printf("HFS: suspend hot file recording on %s\n", hfsmp->vcbVN);
455 error = hfc_btree_open(hfsmp, &hfsmp->hfc_filevp);
461 if (hfs_start_transaction(hfsmp) != 0) {
465 if (hfs_lock(VTOC(hfsmp->hfc_filevp), HFS_EXCLUSIVE_LOCK) != 0) {
474 hotfileinfo.timebase = SWAP_BE32 (hfsmp->hfc_timebase);
475 hotfileinfo.timeleft = SWAP_BE32 (hfsmp->hfc_timeout - tv.tv_sec);
480 (void) BTSetUserData(VTOF(hfsmp->hfc_filevp), &hotfileinfo, sizeof(hotfileinfo));
482 hfs_unlock(VTOC(hfsmp->hfc_filevp));
485 hfs_end_transaction(hfsmp);
488 if (hfsmp->hfc_filevp) {
489 (void) hfc_btree_close(hfsmp, hfsmp->hfc_filevp);
490 hfsmp->hfc_filevp = NULL;
494 hfsmp->hfc_recdata = NULL;
496 hfsmp->hfc_stage = HFC_DISABLED;
497 wakeup((caddr_t)&hfsmp->hfc_stage);
499 lck_mtx_unlock(&hfsmp->hfc_mutex);
509 hfs_recording_init(struct hfsmount *hfsmp)
531 if ((vfs_flags(HFSTOVFS(hfsmp)) & MNT_ROOTFS) == 0) {
532 hfsmp->hfc_stage = HFC_DISABLED;
541 if (vfs_flags(HFSTOVFS(hfsmp)) & MNT_NOATIME) {
542 hfsmp->hfc_stage = HFC_DISABLED;
549 cnid = GetFileInfo(HFSTOVCB(hfsmp), kRootDirID, HFC_FILENAME, &cattr, NULL);
551 if (hfsmp->hfc_stage == HFC_DISABLED)
552 hfsmp->hfc_stage = HFC_IDLE;
555 error = hfc_btree_create(hfsmp, HFSTOVCB(hfsmp)->blockSize, HFC_DEFAULT_FILE_COUNT);
558 printf("Error %d creating hot file b-tree on %s \n", error, hfsmp->vcbVN);
565 if (hfsmp->hfc_filevp)
566 panic("hfs_recording_init: hfc_filevp exists (vp = %p)", hfsmp->hfc_filevp);
567 error = hfc_btree_open(hfsmp, &hfsmp->hfc_filevp);
570 printf("Error %d opening hot file b-tree on %s \n", error, hfsmp->vcbVN);
583 printf("Evaluating space for \"%s\" metadata zone...\n", HFSTOVCB(hfsmp)->vcbVN);
588 error = BTScanInitialize(VTOF(HFSTOVCB(hfsmp)->catalogRefNum), 0, 0, 0,
598 if (hfs_start_transaction(hfsmp) != 0) {
602 if (hfs_lock(VTOC(hfsmp->hfc_filevp), HFS_EXCLUSIVE_LOCK) != 0) {
606 filefork = VTOF(hfsmp->hfc_filevp);
635 if (!hotextents(hfsmp, &filep->dataFork.extents[0])) {
641 if (cnid == hfsmp->hfs_jnlfileid || cnid == hfsmp->hfs_jnlinfoblkid) {
676 hfs_unlock(VTOC(hfsmp->hfc_filevp));
679 hfs_end_transaction(hfsmp);
688 if (hfsmp->hfc_filevp) {
689 (void) hfc_btree_close(hfsmp, hfsmp->hfc_filevp);
690 hfsmp->hfc_filevp = NULL;
693 hfsmp->hfc_stage = HFC_IDLE;
703 hfs_hotfilesync(struct hfsmount *hfsmp, vfs_context_t ctx)
705 if (hfsmp->hfc_stage) {
708 lck_mtx_lock(&hfsmp->hfc_mutex);
710 switch (hfsmp->hfc_stage) {
712 (void) hfs_recording_start(hfsmp);
717 if (tv.tv_sec > hfsmp->hfc_timeout)
718 (void) hfs_recording_stop(hfsmp);
722 (void) hotfiles_evict(hfsmp, ctx);
726 (void) hotfiles_adopt(hfsmp);
732 lck_mtx_unlock(&hfsmp->hfc_mutex);
752 hfsmount_t *hfsmp;
755 hfsmp = VTOHFS(vp);
756 if (hfsmp->hfc_stage != HFC_RECORDING)
759 lck_mtx_lock(&hfsmp->hfc_mutex);
761 lck_mtx_unlock(&hfsmp->hfc_mutex);
770 hfsmount_t *hfsmp;
775 hfsmp = VTOHFS(vp);
776 if (hfsmp->hfc_stage != HFC_RECORDING)
786 if ((hotdata = (hotfile_data_t *)hfsmp->hfc_recdata) == NULL) {
798 (cp->c_atime < hfsmp->hfc_timebase)) {
811 if ((hotdata->activefiles < hfsmp->hfc_maxfiles) ||
841 hfsmount_t *hfsmp;
846 hfsmp = VTOHFS(vp);
847 if (hfsmp->hfc_stage != HFC_RECORDING)
858 (ffp->ff_size == 0) || (cp->c_atime < hfsmp->hfc_timebase)) {
862 lck_mtx_lock(&hfsmp->hfc_mutex);
863 if (hfsmp->hfc_stage != HFC_RECORDING)
865 if ((hotdata = (hotfile_data_t *)hfsmp->hfc_recdata) == NULL)
878 lck_mtx_unlock(&hfsmp->hfc_mutex);
902 hotfiles_collect(struct hfsmount *hfsmp)
904 struct mount *mp = HFSTOVFS(hfsmp);
939 hotfiles_refine(struct hfsmount *hfsmp)
952 if ((listp = (hotfilelist_t *)hfsmp->hfc_recdata) == NULL)
955 mp = HFSTOVFS(hfsmp);
965 if (hfs_start_transaction(hfsmp) != 0) {
969 if (hfs_lock(VTOC(hfsmp->hfc_filevp), HFS_EXCLUSIVE_LOCK) != 0) {
973 filefork = VTOF(hfsmp->hfc_filevp);
1035 hfs_unlock(VTOC(hfsmp->hfc_filevp));
1038 hfs_end_transaction(hfsmp);
1050 hotfiles_adopt(struct hfsmount *hfsmp)
1067 if ((listp = (hotfilelist_t *)hfsmp->hfc_recdata) == NULL)
1070 if (hfsmp->hfc_stage != HFC_ADOPTION) {
1073 if (hfs_lock(VTOC(hfsmp->hfc_filevp), HFS_EXCLUSIVE_LOCK) != 0) {
1077 stage = hfsmp->hfc_stage;
1078 hfsmp->hfc_stage = HFC_BUSY;
1094 filefork = VTOF(hfsmp->hfc_filevp);
1107 error = hfs_vget(hfsmp, listp->hfl_hotfile[i].hf_fileid, &vp, 0);
1124 if (hotextents(hfsmp, &VTOF(vp)->ff_extents[0])) {
1133 if (fileblocks > hfsmp->hfs_hotfile_freeblks) {
1152 error = hfs_relocate(vp, hfsmp->hfs_hotfile_start, kauth_cred_get(), current_proc());
1161 hfsmp->hfs_hotfile_freeblks -= fileblocks;
1171 if (hfs_start_transaction(hfsmp) != 0) {
1202 hfs_end_transaction(hfsmp);
1211 if (hfsmp->hfs_hotfile_freeblks <= 0) {
1213 printf("hotfiles_adopt: free space exhausted (%d)\n", hfsmp->hfs_hotfile_freeblks);
1225 hfs_end_transaction(hfsmp);
1228 hfs_unlock(VTOC(hfsmp->hfc_filevp));
1230 if ((listp->hfl_next >= listp->hfl_count) || (hfsmp->hfs_hotfile_freeblks <= 0)) {
1233 printf("hotfiles_adopt: %d blocks free in hot file band\n", hfsmp->hfs_hotfile_freeblks);
1239 if (stage != HFC_ADOPTION && hfsmp->hfc_filevp) {
1240 (void) hfc_btree_close(hfsmp, hfsmp->hfc_filevp);
1241 hfsmp->hfc_filevp = NULL;
1243 hfsmp->hfc_stage = stage;
1244 wakeup((caddr_t)&hfsmp->hfc_stage);
1254 hotfiles_evict(struct hfsmount *hfsmp, vfs_context_t ctx)
1270 if (hfsmp->hfc_stage != HFC_EVICTION) {
1274 if ((listp = (hotfilelist_t *)hfsmp->hfc_recdata) == NULL)
1277 if (hfs_lock(VTOC(hfsmp->hfc_filevp), HFS_EXCLUSIVE_LOCK) != 0) {
1281 stage = hfsmp->hfc_stage;
1282 hfsmp->hfc_stage = HFC_BUSY;
1291 filefork = VTOF(hfsmp->hfc_filevp);
1324 error = hfs_vget(hfsmp, key->fileID, &vp, 0);
1350 if (!hotextents(hfsmp, &VTOF(vp)->ff_extents[0])) {
1362 error = hfs_relocate(vp, HFSTOVCB(hfsmp)->nextAllocation, vfs_context_ucred(ctx), vfs_context_proc(ctx));
1381 hfsmp->hfs_hotfile_freeblks += fileblocks;
1389 if (hfs_start_transaction(hfsmp) != 0) {
1413 hfs_end_transaction(hfsmp);
1425 hfs_end_transaction(hfsmp);
1428 hfs_unlock(VTOC(hfsmp->hfc_filevp));
1436 printf("hotfiles_evict: %d blocks free in hot file band\n", hfsmp->hfs_hotfile_freeblks);
1440 hfsmp->hfc_stage = stage;
1441 wakeup((caddr_t)&hfsmp->hfc_stage);
1449 hotfiles_age(struct hfsmount *hfsmp)
1486 if (hfs_start_transaction(hfsmp) != 0) {
1490 if (hfs_lock(VTOC(hfsmp->hfc_filevp), HFS_EXCLUSIVE_LOCK) != 0) {
1494 filefork = VTOF(hfsmp->hfc_filevp);
1594 hfs_unlock(VTOC(hfsmp->hfc_filevp));
1596 hfs_end_transaction(hfsmp);
1607 hotextents(struct hfsmount *hfsmp, HFSPlusExtentDescriptor * extents)
1618 if ((b1 >= hfsmp->hfs_hotfile_start &&
1619 b2 <= hfsmp->hfs_hotfile_end) ||
1620 (b1 < hfsmp->hfs_hotfile_end &&
1621 b2 > hfsmp->hfs_hotfile_end)) {
1642 hfc_btree_open(struct hfsmount *hfsmp, struct vnode **vpp)
1662 lockflags = hfs_systemfile_lock(hfsmp, SFL_CATALOG, HFS_SHARED_LOCK);
1664 error = cat_lookup(hfsmp, &cdesc, 0, &cdesc, &cattr, &cfork, NULL);
1666 hfs_systemfile_unlock(hfsmp, lockflags);
1674 error = hfs_getnewvnode(hfsmp, NULL, NULL, &cdesc, 0, &cattr, &cfork, &vp);
1719 hfc_btree_close(struct hfsmount *hfsmp, struct vnode *vp)
1725 if (hfsmp->jnl) {
1726 journal_flush(hfsmp->jnl);
1749 hfc_btree_create(struct hfsmount *hfsmp, unsigned int nodesize, unsigned int entries)
1760 if (hfsmp->hfc_filevp)
1761 panic("hfc_btree_create: hfc_filevp exists (vp = %p)", hfsmp->hfc_filevp);
1763 error = VFS_ROOT(HFSTOVFS(hfsmp), &dvp, ctx);
1786 printf("HFS: error %d creating HFBT on %s\n", error, HFSTOVCB(hfsmp)->vcbVN);
1804 printf("HFS: created HFBT on %s\n", HFSTOVCB(hfsmp)->vcbVN);
1863 hotfileinfo->maxfileblks = SWAP_BE32 (HFC_MAXIMUM_FILESIZE / HFSTOVCB(hfsmp)->blockSize);
1879 printf("HFS: error %d growing HFBT on %s\n", error, HFSTOVCB(hfsmp)->vcbVN);
1903 printf("HFS: error %d writing HFBT on %s\n", error, HFSTOVCB(hfsmp)->vcbVN);