亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? store_dir_diskd.c

?? 代理服務器 squid-2.6.STABLE16
?? C
?? 第 1 頁 / 共 5 頁
字號:
    if (flag)	if (filn > diskdinfo->map->max_n_files)	    return 0;    return 1;}voidstoreDiskdDirMaintain(SwapDir * SD){    diskdinfo_t *diskdinfo = SD->fsdata;    StoreEntry *e = NULL;    int removed = 0;    int max_scan;    int max_remove;    double f;    RemovalPurgeWalker *walker;    /* We can't delete objects while rebuilding swap */    if (store_dirs_rebuilding) {	return;    } else {	f = (double) (SD->cur_size - SD->low_size) / (SD->max_size - SD->low_size);	f = f < 0.0 ? 0.0 : f > 1.0 ? 1.0 : f;	max_scan = (int) (f * 400.0 + 100.0);	max_remove = (int) (f * 70.0 + 10.0);	/*	 * This is kinda cheap, but so we need this priority hack?	 */    }    debug(20, 3) ("storeMaintainSwapSpace: f=%f, max_scan=%d, max_remove=%d\n", f, max_scan, max_remove);    walker = SD->repl->PurgeInit(SD->repl, max_scan);    while (1) {	if (SD->cur_size < SD->low_size && diskdinfo->map->n_files_in_map < FILEMAP_MAX)	    break;	if (removed >= max_remove)	    break;	e = walker->Next(walker);	if (!e)	    break;		/* no more objects */	removed++;	storeRelease(e);    }    walker->Done(walker);    debug(20, (removed ? 2 : 3)) ("storeDiskdDirMaintain: %s removed %d/%d f=%.03f max_scan=%d\n",	SD->path, removed, max_remove, f, max_scan);}/* * storeDiskdDirCheckObj * * This routine is called by storeDirSelectSwapDir to see if the given * object is able to be stored on this filesystem. DISKD filesystems will * happily store anything as long as the LRU time isn't too small. */intstoreDiskdDirCheckObj(SwapDir * SD, const StoreEntry * e){    diskdinfo_t *diskdinfo = SD->fsdata;    /* Check the queue length */    if (diskdinfo->away >= diskdinfo->magic1)	return 0;    return 1;}intstoreDiskdDirCheckLoadAv(SwapDir * SD, store_op_t op){    diskdinfo_t *diskdinfo = SD->fsdata;    /* Calculate the storedir load relative to magic2 on a scale of 0 .. 1000 */    /* the parse function guarantees magic2 is positive */    if (diskdinfo->away >= diskdinfo->magic1)	return -1;    return DISKD_LOAD_BASE + (diskdinfo->away * DISKD_LOAD_QUEUE_WEIGHT / diskdinfo->magic2);}/* * storeDiskdDirRefObj * * This routine is called whenever an object is referenced, so we can * maintain replacement information within the storage fs. */voidstoreDiskdDirRefObj(SwapDir * SD, StoreEntry * e){    debug(47, 3) ("storeDiskdDirRefObj: referencing %p %d/%d\n", e, e->swap_dirn,	e->swap_filen);    if (SD->repl->Referenced)	SD->repl->Referenced(SD->repl, e, &e->repl);}/* * storeDiskdDirUnrefObj * This routine is called whenever the last reference to an object is * removed, to maintain replacement information within the storage fs. */voidstoreDiskdDirUnrefObj(SwapDir * SD, StoreEntry * e){    debug(47, 3) ("storeDiskdDirUnrefObj: referencing %p %d/%d\n", e,	e->swap_dirn, e->swap_filen);    if (SD->repl->Dereferenced)	SD->repl->Dereferenced(SD->repl, e, &e->repl);}/* * storeDiskdDirUnlinkFile * * This is a *synchronous* unlink which is currently used in the rebuild * process. This is bad, but it'll have to stay until the dir rebuild * uses storeDiskdUnlink() .. */voidstoreDiskdDirUnlinkFile(SwapDir * SD, sfileno f){    debug(79, 3) ("storeDiskdDirUnlinkFile: unlinking fileno %08X\n", f);    /* storeDiskdDirMapBitReset(SD, f); */#if USE_UNLINKD    unlinkdUnlink(storeDiskdDirFullPath(SD, f, NULL));#elif USE_TRUNCATE    truncate(storeDiskdDirFullPath(SD, f, NULL), 0);#else    unlink(storeDiskdDirFullPath(SD, f, NULL));#endif}/* * Add and remove the given StoreEntry from the replacement policy in * use. */voidstoreDiskdDirReplAdd(SwapDir * SD, StoreEntry * e){    debug(20, 4) ("storeDiskdDirReplAdd: added node %p to dir %d\n", e,	SD->index);    SD->repl->Add(SD->repl, e, &e->repl);}voidstoreDiskdDirReplRemove(StoreEntry * e){    SwapDir *SD;    if (e->swap_dirn < 0)	return;    SD = INDEXSD(e->swap_dirn);    debug(20, 4) ("storeDiskdDirReplRemove: remove node %p from dir %d\n", e,	SD->index);    SD->repl->Remove(SD->repl, e, &e->repl);}/* * SHM manipulation routines */void *storeDiskdShmGet(SwapDir * sd, int *shm_offset){    char *buf = NULL;    diskdinfo_t *diskdinfo = sd->fsdata;    int i;    for (i = 0; i < diskdinfo->shm.nbufs; i++) {	if (CBIT_TEST(diskdinfo->shm.inuse_map, i))	    continue;	CBIT_SET(diskdinfo->shm.inuse_map, i);	*shm_offset = i * SHMBUF_BLKSZ;	buf = diskdinfo->shm.buf + (*shm_offset);	break;    }    assert(buf);    assert(buf >= diskdinfo->shm.buf);    assert(buf < diskdinfo->shm.buf + (diskdinfo->shm.nbufs * SHMBUF_BLKSZ));    diskd_stats.shmbuf_count++;    if (diskd_stats.max_shmuse < diskd_stats.shmbuf_count)	diskd_stats.max_shmuse = diskd_stats.shmbuf_count;    return buf;}voidstoreDiskdShmPut(SwapDir * sd, int offset){    int i;    diskdinfo_t *diskdinfo = sd->fsdata;    assert(offset >= 0);    assert(offset < diskdinfo->shm.nbufs * SHMBUF_BLKSZ);    i = offset / SHMBUF_BLKSZ;    assert(i < diskdinfo->shm.nbufs);    assert(CBIT_TEST(diskdinfo->shm.inuse_map, i));    CBIT_CLR(diskdinfo->shm.inuse_map, i);    diskd_stats.shmbuf_count--;}/* ========== LOCAL FUNCTIONS ABOVE, GLOBAL FUNCTIONS BELOW ========== */voidstoreDiskdDirStats(SwapDir * SD, StoreEntry * sentry){    diskdinfo_t *diskdinfo = SD->fsdata;#ifdef HAVE_STATVFS    fsblkcnt_t totl_kb = 0;    fsblkcnt_t free_kb = 0;    fsfilcnt_t totl_in = 0;    fsfilcnt_t free_in = 0;#else    int totl_kb = 0;    int free_kb = 0;    int totl_in = 0;    int free_in = 0;#endif    int x;    storeAppendPrintf(sentry, "First level subdirectories: %d\n", diskdinfo->l1);    storeAppendPrintf(sentry, "Second level subdirectories: %d\n", diskdinfo->l2);    storeAppendPrintf(sentry, "Maximum Size: %d KB\n", SD->max_size);    storeAppendPrintf(sentry, "Current Size: %d KB\n", SD->cur_size);    storeAppendPrintf(sentry, "Percent Used: %0.2f%%\n",	100.0 * SD->cur_size / SD->max_size);    storeAppendPrintf(sentry, "Current load metric: %d / %d\n", storeDiskdDirCheckLoadAv(SD, ST_OP_CREATE), MAX_LOAD_VALUE);    storeAppendPrintf(sentry, "Filemap bits in use: %d of %d (%d%%)\n",	diskdinfo->map->n_files_in_map, diskdinfo->map->max_n_files,	percent(diskdinfo->map->n_files_in_map, diskdinfo->map->max_n_files));    x = storeDirGetUFSStats(SD->path, &totl_kb, &free_kb, &totl_in, &free_in);    if (0 == x) {#ifdef HAVE_STATVFS	storeAppendPrintf(sentry, "Filesystem Space in use: %" PRIu64 "/%" PRIu64 " KB (%.0f%%)\n",	    (uint64_t) (totl_kb - free_kb),	    (uint64_t) totl_kb,	    dpercent(totl_kb - free_kb, totl_kb));	storeAppendPrintf(sentry, "Filesystem Inodes in use: %" PRIu64 "/%" PRIu64 " (%.0f%%)\n",	    (uint64_t) (totl_in - free_in),	    (uint64_t) totl_in,	    dpercent(totl_in - free_in, totl_in));#else	storeAppendPrintf(sentry, "Filesystem Space in use: %d/%d KB (%d%%)\n",	    totl_kb - free_kb,	    totl_kb,	    percent(totl_kb - free_kb, totl_kb));	storeAppendPrintf(sentry, "Filesystem Inodes in use: %d/%d (%d%%)\n",	    totl_in - free_in,	    totl_in,	    percent(totl_in - free_in, totl_in));#endif    }    storeAppendPrintf(sentry, "Flags:");    if (SD->flags.selected)	storeAppendPrintf(sentry, " SELECTED");    if (SD->flags.read_only)	storeAppendPrintf(sentry, " READ-ONLY");    storeAppendPrintf(sentry, "\n");    storeAppendPrintf(sentry, "Pending operations: %d\n", diskdinfo->away);}static voidstoreDiskdDirParseQ1(SwapDir * sd, const char *name, const char *value, int reconfiguring){    diskdinfo_t *diskdinfo = sd->fsdata;    int old_magic1 = diskdinfo->magic1;    diskdinfo->magic1 = atoi(value);    if (!reconfiguring)	return;    if (old_magic1 < diskdinfo->magic1) {	/*	 * This is because shm.nbufs is computed at startup, when	 * we call shmget().  We can't increase the Q1/Q2 parameters	 * beyond their initial values because then we might have	 * more "Q2 messages" than shared memory chunks, and this	 * will cause an assertion in storeDiskdShmGet().	 */	debug(3, 1) ("WARNING: cannot increase cache_dir '%s' Q1 value while Squid is running.\n", sd->path);	diskdinfo->magic1 = old_magic1;	return;    }    if (old_magic1 != diskdinfo->magic1)	debug(3, 1) ("cache_dir '%s' new Q1 value '%d'\n",	    sd->path, diskdinfo->magic1);}static voidstoreDiskdDirDumpQ1(StoreEntry * e, const char *option, SwapDir * sd){    diskdinfo_t *diskdinfo = sd->fsdata;    storeAppendPrintf(e, " Q1=%d", diskdinfo->magic1);}static voidstoreDiskdDirParseQ2(SwapDir * sd, const char *name, const char *value, int reconfiguring){    diskdinfo_t *diskdinfo = sd->fsdata;    int old_magic2 = diskdinfo->magic2;    diskdinfo->magic2 = atoi(value);    if (!reconfiguring)	return;    if (old_magic2 < diskdinfo->magic2) {	/* See comments in Q1 function above */	debug(3, 1) ("WARNING: cannot increase cache_dir '%s' Q2 value while Squid is running.\n", sd->path);	diskdinfo->magic2 = old_magic2;	return;    }    if (old_magic2 != diskdinfo->magic2)	debug(3, 1) ("cache_dir '%s' new Q2 value '%d'\n",	    sd->path, diskdinfo->magic2);}static voidstoreDiskdDirDumpQ2(StoreEntry * e, const char *option, SwapDir * sd){    diskdinfo_t *diskdinfo = sd->fsdata;    storeAppendPrintf(e, " Q2=%d", diskdinfo->magic2);}static struct cache_dir_option options[] ={#if NOT_YET    {"L1", storeDiskdDirParseL1, storeDiskdDirDumpL1},    {"L2", storeDiskdDirParseL2, storeDiskdDirDumpL2},#endif    {"Q1", storeDiskdDirParseQ1, storeDiskdDirDumpQ1},    {"Q2", storeDiskdDirParseQ2, storeDiskdDirDumpQ2},    {NULL, NULL}};/* * storeDiskdDirReconfigure * * This routine is called when the given swapdir needs reconfiguring  */static voidstoreDiskdDirReconfigure(SwapDir * sd, int index, char *path){    int i;    int size;    int l1;    int l2;    i = GetInteger();    size = i << 10;		/* Mbytes to kbytes */    if (size <= 0)	fatal("storeDiskdDirReconfigure: invalid size value");    i = GetInteger();    l1 = i;    if (l1 <= 0)	fatal("storeDiskdDirReconfigure: invalid level 1 directories value");    i = GetInteger();    l2 = i;    if (l2 <= 0)	fatal("storeDiskdDirReconfigure: invalid level 2 directories value");    /* just reconfigure it */    if (size == sd->max_size)	debug(3, 1) ("Cache dir '%s' size remains unchanged at %d KB\n",	    path, size);    else	debug(3, 1) ("Cache dir '%s' size changed to %d KB\n",	    path, size);    sd->max_size = size;    parse_cachedir_options(sd, options, 1);}voidstoreDiskdDirDump(StoreEntry * entry, SwapDir * s){    diskdinfo_t *diskdinfo = s->fsdata;    storeAppendPrintf(entry, " %d %d %d",	s->max_size >> 10,	diskdinfo->l1,	diskdinfo->l2);    dump_cachedir_options(entry, options, s);}/* * Only "free" the filesystem specific stuff here */static voidstoreDiskdDirFree(SwapDir * s){    diskdinfo_t *diskdinfo = s->fsdata;    if (diskdinfo->swaplog_fd > -1) {	file_close(diskdinfo->swaplog_fd);	diskdinfo->swaplog_fd = -1;    }    filemapFreeMemory(diskdinfo->map);    xfree(diskdinfo);    s->fsdata = NULL;		/* Will aid debugging... */}char *storeDiskdDirFullPath(SwapDir * SD, sfileno filn, char *fullpath){    LOCAL_ARRAY(char, fullfilename, SQUID_MAXPATHLEN);    diskdinfo_t *diskdinfo = SD->fsdata;    int L1 = diskdinfo->l1;    int L2 = diskdinfo->l2;    if (!fullpath)	fullpath = fullfilename;    fullpath[0] = '\0';    snprintf(fullpath, SQUID_MAXPATHLEN, "%s/%02X/%02X/%08X",	SD->path,	((filn / L2) / L2) % L1,	(filn / L2) % L2,	filn);    return fullpath;}/* * storeDiskdCleanupDoubleCheck * * This is called by storeCleanup() if -S was given on the command line. */static intstoreDiskdCleanupDoubleCheck(SwapDir * sd, StoreEntry * e){    struct stat sb;    if (stat(storeDiskdDirFullPath(sd, e->swap_filen, NULL), &sb) < 0) {	debug(20, 0) ("storeDiskdCleanupDoubleCheck: MISSING SWAP FILE\n");	debug(20, 0) ("storeDiskdCleanupDoubleCheck: FILENO %08X\n", e->swap_filen);	debug(20, 0) ("storeDiskdCleanupDoubleCheck: PATH %s\n",	    storeDiskdDirFullPath(sd, e->swap_filen, NULL));	storeEntryDump(e, 0);	return -1;    }    if (e->swap_file_sz != sb.st_size) {	debug(20, 0) ("storeDiskdCleanupDoubleCheck: SIZE MISMATCH\n");	debug(20, 0) ("storeDiskdCleanupDoubleCheck: FILENO %08X\n", e->swap_filen);	debug(20, 0) ("storeDiskdCleanupDoubleCheck: PATH %s\n",	    storeDiskdDirFullPath(sd, e->swap_filen, NULL));	debug(20,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日本在线| 国产欧美日韩精品a在线观看| 国产一区二区免费在线| 婷婷久久综合九色综合绿巨人 | 麻豆精品视频在线| 午夜私人影院久久久久| 亚洲风情在线资源站| 午夜在线成人av| 蜜臀久久99精品久久久久宅男| 香蕉加勒比综合久久| 日韩成人精品在线| 精品影视av免费| 国产麻豆9l精品三级站| 成人高清在线视频| 91福利国产成人精品照片| 欧美系列一区二区| 日韩欧美另类在线| 国产日韩av一区| 亚洲视频网在线直播| 亚洲成人中文在线| 久久99精品久久只有精品| 国产成人一区在线| 在线一区二区观看| 制服丝袜av成人在线看| 久久一日本道色综合| 国产精品另类一区| 亚洲国产综合视频在线观看| 久久国产精品区| 97成人超碰视| 日韩欧美成人午夜| 亚洲欧美日韩国产综合| 日韩国产在线一| 不卡的看片网站| 91精品久久久久久久91蜜桃| 国产视频911| 亚洲成av人片在线观看| 国产一区二区免费在线| 欧美三级在线看| 久久久久久免费网| 三级成人在线视频| 成人免费福利片| 欧美一区二区三区成人| 亚洲欧洲国产日韩| 国产精品一二三在| 91精品国产综合久久香蕉麻豆| 中文av一区特黄| 久久精品免费观看| 欧美综合欧美视频| 中文字幕日韩一区二区| 国内精品伊人久久久久av一坑| 日本国产一区二区| 国产精品护士白丝一区av| 免费成人在线影院| 欧美日韩三级在线| 亚洲精品国产高清久久伦理二区| 久久不见久久见中文字幕免费| 欧美午夜视频网站| 亚洲精选在线视频| av电影在线观看完整版一区二区| 精品盗摄一区二区三区| 日本亚洲欧美天堂免费| 欧美日韩mp4| 亚洲国产aⅴ成人精品无吗| 成人av小说网| 国产精品青草综合久久久久99| 美腿丝袜在线亚洲一区| 91精品麻豆日日躁夜夜躁| 亚洲精品国产a久久久久久| 成人avav在线| 欧美国产在线观看| 成人黄色大片在线观看| 国产精品色在线| zzijzzij亚洲日本少妇熟睡| 久久嫩草精品久久久精品| 九九视频精品免费| 日韩精品一区二区三区四区视频| 日韩av电影免费观看高清完整版 | 国产裸体歌舞团一区二区| 日韩欧美在线观看一区二区三区| 亚洲成a人片综合在线| 欧美色图12p| 亚洲动漫第一页| 欧美日韩视频一区二区| 日本不卡一区二区三区高清视频| 欧美一区二区三区喷汁尤物| 免费看日韩a级影片| 精品99一区二区三区| 韩国女主播成人在线| 日本一区二区三区免费乱视频| 国产乱对白刺激视频不卡| 中文字幕免费不卡在线| 日本道在线观看一区二区| 亚洲成人午夜影院| 欧美videossexotv100| 成人精品电影在线观看| 一区二区三区欧美日| 欧美一区二区三区爱爱| 韩国成人在线视频| 最新热久久免费视频| 欧美无乱码久久久免费午夜一区| 七七婷婷婷婷精品国产| 久久久久免费观看| 在线亚洲精品福利网址导航| 久久国产麻豆精品| 国产精品欧美精品| 欧美日韩精品系列| 国产成人啪免费观看软件| 亚洲综合精品自拍| 久久先锋资源网| 91福利国产精品| 国产精品正在播放| 亚洲电影在线免费观看| 中文天堂在线一区| 欧美一区二区视频在线观看2022| 国产一区在线视频| 亚洲成a人片在线观看中文| 国产喂奶挤奶一区二区三区| 欧美亚洲国产bt| 国模一区二区三区白浆| 亚洲一区二区三区四区五区黄| 精品国产人成亚洲区| 欧美色窝79yyyycom| 国产69精品久久99不卡| 亚洲第一搞黄网站| 亚洲欧洲制服丝袜| 久久天天做天天爱综合色| 欧美日韩不卡一区二区| www.日韩av| 国产精品一区在线| 免费成人你懂的| 三级精品在线观看| 亚洲一区二区三区四区的| 中文字幕亚洲欧美在线不卡| 久久久亚洲国产美女国产盗摄| 欧美剧在线免费观看网站| 99久久99精品久久久久久| 国产精品伊人色| 国产在线国偷精品免费看| 日本视频免费一区| 日韩影院免费视频| 一区二区三区.www| 一区二区三区**美女毛片| 亚洲色图在线播放| 亚洲人成网站在线| 综合网在线视频| 综合婷婷亚洲小说| 一区二区三区中文字幕精品精品 | 欧美三级日韩三级| 91小视频免费观看| 97久久精品人人澡人人爽| 国产成人av电影在线观看| 日韩高清在线电影| 麻豆freexxxx性91精品| 老司机午夜精品| 精品综合久久久久久8888| 久久精品国产亚洲aⅴ| 日本系列欧美系列| 久久国产婷婷国产香蕉| 精品一区二区在线免费观看| 看片的网站亚洲| 国产精品77777| 成人美女视频在线观看| av在线不卡网| 色哟哟国产精品| 色婷婷av一区二区三区大白胸| 94-欧美-setu| 欧美色欧美亚洲另类二区| 欧美一区二区三区日韩| 精品国产在天天线2019| 久久精品欧美日韩| 亚洲免费观看高清完整版在线| 日韩伦理免费电影| 日本欧洲一区二区| 国产麻豆精品theporn| 97久久精品人人做人人爽50路| 色综合久久天天| 欧美一区二区三区视频在线 | 亚洲一区二区三区小说| 视频一区欧美日韩| 国产成人综合亚洲91猫咪| 波多野洁衣一区| 91精品国产综合久久福利| 久久久av毛片精品| 亚洲电影一级黄| 国产精品一区二区黑丝| 色综合天天综合在线视频| 9191久久久久久久久久久| 欧美激情一二三区| 午夜精彩视频在线观看不卡| 国产在线播放一区三区四| 色综合久久99| 欧美精品一区二区在线播放| 亚洲美女精品一区| 国产一区二区三区综合| 欧美少妇bbb| 国产精品卡一卡二卡三| 久久国产视频网| 欧美色图天堂网| 中文字幕在线不卡| 国产揄拍国内精品对白|