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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rf_dagfuncs.c

?? RAIDFrame是個(gè)非常好的磁盤陣列RAID仿真工具
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
	rf_ParityLogAppend(logData, RF_FALSE, NULL, RF_FALSE);      else	{	  RF_ETIMER_STOP(timer); RF_ETIMER_EVAL(timer); tracerec->plog_us += RF_ETIMER_VAL_US(timer);	  (node->wakeFunc)(node, ENOMEM);	}    }    return(0);}/***************************************************************************************** * the execution function associated with a parity log overwrite node ****************************************************************************************/int rf_ParityLogOverwriteFunc(node)  RF_DagNode_t  *node;{  RF_PhysDiskAddr_t  *pda = (RF_PhysDiskAddr_t *) node->params[0].p;  caddr_t buf = (caddr_t) node->params[1].p;  RF_ParityLogData_t *logData;  RF_AccTraceEntry_t *tracerec = node->dagHdr->tracerec;  RF_Etimer_t timer;  if (node->dagHdr->status == rf_enable)    {      RF_ETIMER_START(timer);      logData = rf_CreateParityLogData(RF_OVERWRITE, pda, buf, (RF_Raid_t *) (node->dagHdr->raidPtr),				    node->wakeFunc, (void *) node, node->dagHdr->tracerec, timer);      if (logData)	rf_ParityLogAppend(logData, RF_FALSE, NULL, RF_FALSE);      else	{	  RF_ETIMER_STOP(timer); RF_ETIMER_EVAL(timer); tracerec->plog_us += RF_ETIMER_VAL_US(timer);	  (node->wakeFunc)(node, ENOMEM);	}    }    return(0);}#else /* RF_INCLUDE_PARITYLOGGING > 0 */int rf_ParityLogUpdateFunc(node)  RF_DagNode_t  *node;{  return(0);}int rf_ParityLogOverwriteFunc(node)  RF_DagNode_t  *node;{  return(0);}#endif /* RF_INCLUDE_PARITYLOGGING > 0 */int rf_ParityLogUpdateUndoFunc(node)  RF_DagNode_t  *node;{  return(0);}int rf_ParityLogOverwriteUndoFunc(node)  RF_DagNode_t  *node;{  return(0);}/***************************************************************************************** * the execution function associated with a NOP node ****************************************************************************************/int rf_NullNodeFunc(node)  RF_DagNode_t  *node;{  node->status = rf_good;  return(rf_FinishNode(node, RF_THREAD_CONTEXT));}int rf_NullNodeUndoFunc(node)  RF_DagNode_t  *node;{  node->status = rf_undone;  return(rf_FinishNode(node, RF_THREAD_CONTEXT));}/***************************************************************************************** * the execution function associated with a disk-read node ****************************************************************************************/int rf_DiskReadFuncForThreads(node)  RF_DagNode_t  *node;{  RF_DiskQueueData_t *req;  RF_PhysDiskAddr_t  *pda       = (RF_PhysDiskAddr_t *)node->params[0].p;  caddr_t        buf            = (caddr_t)node->params[1].p;  RF_StripeNum_t parityStripeID = (RF_StripeNum_t)node->params[2].v;  unsigned       priority       = RF_EXTRACT_PRIORITY(node->params[3].v);  unsigned       lock           = RF_EXTRACT_LOCK_FLAG(node->params[3].v);  unsigned       unlock         = RF_EXTRACT_UNLOCK_FLAG(node->params[3].v);  unsigned       which_ru       = RF_EXTRACT_RU(node->params[3].v);  RF_DiskQueueDataFlags_t flags = 0;  RF_IoType_t    iotype = (node->dagHdr->status == rf_enable) ? RF_IO_TYPE_READ : RF_IO_TYPE_NOP;  RF_DiskQueue_t **dqs = ((RF_Raid_t *) (node->dagHdr->raidPtr))->Queues;  void *b_proc = NULL;  caddr_t        undoBuf;#ifdef KERNEL  if (node->dagHdr->bp) b_proc = (void *) ((struct buf *) node->dagHdr->bp)->b_proc;#endif /* KERNEL */  RF_ASSERT( !(lock && unlock) );  flags |= (lock)   ? RF_LOCK_DISK_QUEUE   : 0;  flags |= (unlock) ? RF_UNLOCK_DISK_QUEUE : 0;#if RF_BACKWARD > 0  /* allocate and zero the undo buffer.   * this is equivalent to copying the original buffer's contents to the undo buffer   * prior to performing the disk read.   * XXX hardcoded 512 bytes per sector!   */  if (node->dagHdr->allocList == NULL)    rf_MakeAllocList(node->dagHdr->allocList);  RF_CallocAndAdd(undoBuf, 1, 512 * pda->numSector, (caddr_t), node->dagHdr->allocList);#endif /* RF_BACKWARD > 0 */  req = rf_CreateDiskQueueData(iotype, 			    pda->startSector, pda->numSector, buf, parityStripeID, which_ru, 			    node->wakeFunc, (void *) node, NULL, node->dagHdr->tracerec,			    (void *)(node->dagHdr->raidPtr), flags, b_proc);  if (!req) {    (node->wakeFunc)(node, ENOMEM);  } else {    node->dagFuncData = (void *) req;    rf_DiskIOEnqueue( &(dqs[pda->row][pda->col]), req, priority );  }  return(0);}/***************************************************************************************** * the execution function associated with a disk-write node ****************************************************************************************/int rf_DiskWriteFuncForThreads(node)  RF_DagNode_t  *node;{  RF_DiskQueueData_t *req;  RF_PhysDiskAddr_t  *pda       = (RF_PhysDiskAddr_t *)node->params[0].p;  caddr_t        buf            = (caddr_t)node->params[1].p;  RF_StripeNum_t parityStripeID = (RF_StripeNum_t)node->params[2].v;  unsigned       priority       = RF_EXTRACT_PRIORITY(node->params[3].v);  unsigned       lock           = RF_EXTRACT_LOCK_FLAG(node->params[3].v);  unsigned       unlock         = RF_EXTRACT_UNLOCK_FLAG(node->params[3].v);  unsigned       which_ru       = RF_EXTRACT_RU(node->params[3].v);  RF_DiskQueueDataFlags_t flags = 0;  RF_IoType_t    iotype = (node->dagHdr->status == rf_enable) ? RF_IO_TYPE_WRITE : RF_IO_TYPE_NOP;  RF_DiskQueue_t **dqs = ((RF_Raid_t *) (node->dagHdr->raidPtr))->Queues;  void *b_proc = NULL;  caddr_t undoBuf;#ifdef KERNEL  if (node->dagHdr->bp) b_proc = (void *) ((struct buf *) node->dagHdr->bp)->b_proc;#endif /* KERNEL */#if RF_BACKWARD > 0  /* This area is used only for backward error recovery experiments   * First, schedule allocate a buffer and schedule a pre-read of the disk   * After the pre-read, proceed with the normal disk write   */  if (node->status == rf_bwd2) {    /* just finished undo logging, now perform real function */    node->status = rf_fired;    RF_ASSERT( !(lock && unlock) );    flags |= (lock)   ? RF_LOCK_DISK_QUEUE   : 0;    flags |= (unlock) ? RF_UNLOCK_DISK_QUEUE : 0;    req = rf_CreateDiskQueueData(iotype, 			      pda->startSector, pda->numSector, buf, parityStripeID, which_ru,			      node->wakeFunc, (void *) node, NULL, node->dagHdr->tracerec,			      (void *) (node->dagHdr->raidPtr), flags, b_proc);        if (!req) {      (node->wakeFunc)(node, ENOMEM);    } else {      node->dagFuncData = (void *) req;      rf_DiskIOEnqueue( &(dqs[pda->row][pda->col]), req, priority );    }  }  else {    /* node status should be rf_fired */    /* schedule a disk pre-read */    node->status = rf_bwd1;    RF_ASSERT( !(lock && unlock) );    flags |= (lock)   ? RF_LOCK_DISK_QUEUE   : 0;    flags |= (unlock) ? RF_UNLOCK_DISK_QUEUE : 0;    if (node->dagHdr->allocList == NULL)      rf_MakeAllocList(node->dagHdr->allocList);    RF_CallocAndAdd(undoBuf, 1, 512 * pda->numSector, (caddr_t), node->dagHdr->allocList);    req = rf_CreateDiskQueueData(RF_IO_TYPE_READ, 			      pda->startSector, pda->numSector, undoBuf, parityStripeID, which_ru,			      node->wakeFunc, (void *) node, NULL, node->dagHdr->tracerec,			      (void *) (node->dagHdr->raidPtr), flags, b_proc);        if (!req) {      (node->wakeFunc)(node, ENOMEM);    } else {      node->dagFuncData = (void *) req;      rf_DiskIOEnqueue( &(dqs[pda->row][pda->col]), req, priority );    }  }  return(0);#endif /* RF_BACKWARD > 0 */  /* normal processing (rollaway or forward recovery) begins here */  RF_ASSERT( !(lock && unlock) );  flags |= (lock)   ? RF_LOCK_DISK_QUEUE   : 0;  flags |= (unlock) ? RF_UNLOCK_DISK_QUEUE : 0;  req = rf_CreateDiskQueueData(iotype, 			    pda->startSector, pda->numSector, buf, parityStripeID, which_ru,			    node->wakeFunc, (void *) node, NULL, node->dagHdr->tracerec,			    (void *) (node->dagHdr->raidPtr), flags, b_proc);  if (!req) {    (node->wakeFunc)(node, ENOMEM);  } else {    node->dagFuncData = (void *) req;    rf_DiskIOEnqueue( &(dqs[pda->row][pda->col]), req, priority );  }  return(0);}/***************************************************************************************** * the undo function for disk nodes * Note:  this is not a proper undo of a write node, only locks are released. *        old data is not restored to disk! ****************************************************************************************/int rf_DiskUndoFunc(node)  RF_DagNode_t  *node;{  RF_DiskQueueData_t *req;  RF_PhysDiskAddr_t  *pda = (RF_PhysDiskAddr_t *)node->params[0].p;  RF_DiskQueue_t **dqs = ((RF_Raid_t *) (node->dagHdr->raidPtr))->Queues;  req = rf_CreateDiskQueueData(RF_IO_TYPE_NOP,			    0L, 0, NULL, 0L, 0,			    node->wakeFunc, (void *) node, NULL, node->dagHdr->tracerec,			    (void *) (node->dagHdr->raidPtr), RF_UNLOCK_DISK_QUEUE, NULL);  if (!req)    (node->wakeFunc)(node, ENOMEM);  else {    node->dagFuncData = (void *) req;    rf_DiskIOEnqueue( &(dqs[pda->row][pda->col]), req, RF_IO_NORMAL_PRIORITY );  }  return(0);}/***************************************************************************************** * the execution function associated with an "unlock disk queue" node ****************************************************************************************/int rf_DiskUnlockFuncForThreads(node)  RF_DagNode_t  *node;{  RF_DiskQueueData_t *req;  RF_PhysDiskAddr_t *pda = (RF_PhysDiskAddr_t *)node->params[0].p;  RF_DiskQueue_t **dqs = ((RF_Raid_t *) (node->dagHdr->raidPtr))->Queues;  req = rf_CreateDiskQueueData(RF_IO_TYPE_NOP,			    0L, 0, NULL, 0L, 0,			    node->wakeFunc, (void *) node, NULL, node->dagHdr->tracerec,			    (void *) (node->dagHdr->raidPtr), RF_UNLOCK_DISK_QUEUE, NULL);  if (!req)    (node->wakeFunc)(node, ENOMEM);  else {    node->dagFuncData = (void *) req;    rf_DiskIOEnqueue( &(dqs[pda->row][pda->col]), req, RF_IO_NORMAL_PRIORITY );  }  return(0);}/***************************************************************************************** * Callback routine for DiskRead and DiskWrite nodes.  When the disk op completes, * the routine is called to set the node status and inform the execution engine that * the node has fired. ****************************************************************************************/int rf_GenericWakeupFunc(node, status)  RF_DagNode_t  *node;  int            status;{  switch (node->status) {  case rf_bwd1 :    node->status = rf_bwd2;    if (node->dagFuncData)      rf_FreeDiskQueueData((RF_DiskQueueData_t *) node->dagFuncData);    return(rf_DiskWriteFuncForThreads(node));    break;  case rf_fired :    if (status) node->status = rf_bad;    else node->status = rf_good;    break;  case rf_recover :    /* probably should never reach this case */    if (status) node->status = rf_panic;    else node->status = rf_undone;    break;  default :    RF_PANIC();    break;  }  if (node->dagFuncData)    rf_FreeDiskQueueData((RF_DiskQueueData_t *) node->dagFuncData);  return(rf_FinishNode(node, RF_INTR_CONTEXT));}/***************************************************************************************** * there are three distinct types of xor nodes * A "regular xor" is used in the fault-free case where the access spans a complete * stripe unit.  It assumes that the result buffer is one full stripe unit in size, * and uses the stripe-unit-offset values that it computes from the PDAs to determine * where within the stripe unit to XOR each argument buffer. * * A "simple xor" is used in the fault-free case where the access touches only a portion * of one (or two, in some cases) stripe unit(s).  It assumes that all the argument * buffers are of the same size and have the same stripe unit offset. * * A "recovery xor" is used in the degraded-mode case.  It's similar to the regular * xor function except that it takes the failed PDA as an additional parameter, and * uses it to determine what portions of the argument buffers need to be xor'd into * the result buffer, and where in the result buffer they should go. ****************************************************************************************//* xor the params together and store the result in the result field. * assume the result field points to a buffer that is the size of one SU, * and use the pda params to determine where within the buffer to XOR * the input buffers. */int rf_RegularXorFunc(node)  RF_DagNode_t  *node;{  RF_Raid_t *raidPtr = (RF_Raid_t *)node->params[node->numParams-1].p;  RF_AccTraceEntry_t *tracerec = node->dagHdr->tracerec;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品福利在线导航| 无吗不卡中文字幕| 国产亚洲美州欧州综合国| 日韩一区二区精品在线观看| 欧美日韩久久久| 欧美亚州韩日在线看免费版国语版| 成人激情av网| 99久久伊人久久99| 99久久精品情趣| 一本大道综合伊人精品热热| 99r国产精品| 91猫先生在线| 欧美探花视频资源| 欧美日韩高清影院| 欧美一级xxx| 日韩亚洲电影在线| 久久影音资源网| 国产欧美一区二区在线| 国产精品你懂的在线欣赏| 国产亚洲综合在线| 亚洲欧美一区二区三区极速播放| 国产精品传媒入口麻豆| 一区二区三区四区五区视频在线观看| 亚洲精选一二三| 偷拍亚洲欧洲综合| 久久99在线观看| 国产91露脸合集magnet| 91在线国产观看| 91精品婷婷国产综合久久竹菊| 日韩欧美在线综合网| 国产午夜亚洲精品理论片色戒| 国产精品无码永久免费888| 亚洲黄色片在线观看| 水野朝阳av一区二区三区| 美国av一区二区| 成人自拍视频在线观看| 欧美午夜免费电影| 精品国精品国产| 国产精品美女久久久久久久久久久| 亚洲六月丁香色婷婷综合久久| 肉色丝袜一区二区| 国产综合色精品一区二区三区| 99国产精品久久久久久久久久| 欧美色图免费看| 久久久久久麻豆| 艳妇臀荡乳欲伦亚洲一区| 男男视频亚洲欧美| 成人av影视在线观看| 欧美裸体一区二区三区| 久久精品人人做人人综合| 亚洲一二三四久久| 国产精品一级二级三级| 欧美综合欧美视频| 久久久久国产精品人| 亚洲精品第一国产综合野| 美女一区二区在线观看| 97se亚洲国产综合自在线观| 日韩欧美一区二区三区在线| 成人免费小视频| 久久99精品国产.久久久久久 | 欧洲国内综合视频| 精品日韩99亚洲| 亚洲午夜久久久久中文字幕久| 国产一区二区在线影院| 欧美亚洲日本一区| 国产精品久久久久婷婷二区次| 日韩电影一区二区三区四区| 99视频精品在线| 精品不卡在线视频| 日韩电影在线免费看| 97精品超碰一区二区三区| 精品国产精品一区二区夜夜嗨| 一二三区精品福利视频| 国产成人精品aa毛片| 欧美一级电影网站| 午夜影院久久久| 色婷婷精品大在线视频| 中文字幕av一区 二区| 免费高清视频精品| 欧美色图免费看| 亚洲欧美日韩精品久久久久| 久久99精品国产.久久久久 | 国产精品伦一区二区三级视频| 日韩高清一区在线| 欧美性三三影院| 国产精品电影一区二区| 福利视频网站一区二区三区| 欧美成人官网二区| 蜜臀a∨国产成人精品| 欧洲激情一区二区| 一级日本不卡的影视| 99re热这里只有精品免费视频| 日本一区二区三区高清不卡| 国内精品伊人久久久久影院对白| 日韩欧美国产精品| 日本免费新一区视频| 日韩视频在线一区二区| 午夜激情一区二区| 欧美日本乱大交xxxxx| 洋洋成人永久网站入口| 91久久精品一区二区| 中文字幕一区二| 99久久伊人网影院| 亚洲欧美国产三级| 色激情天天射综合网| 亚洲精品乱码久久久久久黑人| 成人午夜私人影院| 18欧美乱大交hd1984| 91亚洲永久精品| 亚洲制服丝袜av| 欧美日韩一区二区不卡| 五月天亚洲精品| 6080yy午夜一二三区久久| 亚洲成a人v欧美综合天堂下载 | 成人福利在线看| 国产精品久久久久久久久果冻传媒| 成人精品gif动图一区| 国产精品亲子伦对白| 色诱视频网站一区| 亚洲va韩国va欧美va| 日韩一区二区高清| 国产精品一二三区在线| 国产精品不卡一区| 日本高清不卡aⅴ免费网站| 亚洲国产视频直播| 欧美一区二区三区四区视频 | 91猫先生在线| 亚洲精品视频观看| 制服.丝袜.亚洲.另类.中文| 久久精品国产99久久6| 日本一区二区视频在线观看| 91视频观看视频| 日韩在线一区二区| 精品福利av导航| 波多野结衣亚洲| 婷婷一区二区三区| 久久久综合激的五月天| 不卡的av电影在线观看| 亚洲国产综合视频在线观看| 日韩一二在线观看| 成人av高清在线| 亚洲一区二区三区四区五区中文| 69堂亚洲精品首页| 国产suv精品一区二区三区| 亚洲精品免费播放| 日韩三级av在线播放| 丁香激情综合五月| 午夜精品久久久久影视| 久久久久免费观看| 欧美色图激情小说| 国产69精品久久777的优势| 亚洲国产精品久久人人爱| 亚洲精品一区二区三区四区高清| 94-欧美-setu| 久久爱另类一区二区小说| 亚洲日本va午夜在线影院| 欧美一区日韩一区| 99久久精品国产观看| 日本伊人色综合网| 中文字幕中文字幕在线一区| 欧美精品免费视频| 成人性色生活片免费看爆迷你毛片| 亚洲国产精品自拍| 国产女人18水真多18精品一级做| 欧美日韩一区成人| www.亚洲国产| 麻豆精品视频在线| 亚洲综合视频在线| 国产精品久久精品日日| 精品国产乱码久久| 欧美日韩国产在线观看| 波多野结衣中文一区| 紧缚奴在线一区二区三区| 一区二区三区四区蜜桃| 中文字幕乱码日本亚洲一区二区 | 日韩美一区二区三区| 97久久精品人人爽人人爽蜜臀| 麻豆免费看一区二区三区| 亚洲自拍偷拍图区| 国产精品久久久久影视| 精品久久久久久久久久久久久久久| 91九色最新地址| 国产mv日韩mv欧美| 韩国午夜理伦三级不卡影院| 亚洲成精国产精品女| 亚洲黄网站在线观看| 国产精品久久久久久久久免费樱桃| 日韩精品一区二区三区中文精品| 欧美视频一区二区三区在线观看| a亚洲天堂av| 国产91露脸合集magnet| 国产剧情av麻豆香蕉精品| 日本成人在线网站| 亚洲一级二级三级| 亚洲午夜在线电影| 亚洲乱码国产乱码精品精98午夜| 国产精品久久久爽爽爽麻豆色哟哟| 国产女人aaa级久久久级| 久久精品一二三| 久久久午夜精品理论片中文字幕|