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

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

?? rf_configure.c

?? RAIDFrame是個非常好的磁盤陣列RAID仿真工具
?? C
?? 第 1 頁 / 共 2 頁
字號:
  }  c = sscanf(buf,"%d %d %d %c", &aa, &bb, &cc, &cfgPtr->parityConfig);  cfgPtr->sectPerSU = (RF_SectorNum_t)aa;  cfgPtr->SUsPerPU = (RF_StripeNum_t)bb;  cfgPtr->SUsPerRU = (RF_StripeNum_t)cc;  if (c != 4) {    RF_ERRORMSG("Unable to scan common layout line\n");    retcode = -1; goto out;  }  lp = rf_GetLayout(cfgPtr->parityConfig);  if (lp == NULL) {    RF_ERRORMSG1("Unknown parity config '%c'\n", cfgPtr->parityConfig);    retcode = -1;    goto out;  }  retcode = lp->MakeLayoutSpecific(fp, cfgPtr, lp->makeLayoutSpecificArg);out:  fclose(fp);  if (retcode < 0)    retcode = errno = EINVAL;  else    errno = retcode;  return(retcode);}/* used in architectures such as RAID0 where there is no layout-specific * information to be passed into the configuration code. */int rf_MakeLayoutSpecificNULL(fp, cfgPtr, ignored)  FILE         *fp;  RF_Config_t  *cfgPtr;  void         *ignored;{  cfgPtr->layoutSpecificSize = 0;  cfgPtr->layoutSpecific     = NULL;  return(0);}int rf_MakeLayoutSpecificDeclustered(configfp, cfgPtr, arg)  FILE         *configfp;  RF_Config_t  *cfgPtr;  void         *arg;{  int b, v, k, r, lambda, norotate, i, val, distSpare;  char *cfgBuf, *bdfile, *p, *smname;  char buf[256], smbuf[256];  FILE *fp;  distSpare = *((int *)arg);  /* get the block design file name */  if (rf_get_next_nonblank_line(buf,256,configfp,"Can't find block design file name in config file\n"))    return(EINVAL);  bdfile = rf_find_non_white(buf);  if (bdfile[strlen(bdfile)-1] == '\n') {    /* strip newline char */    bdfile[strlen(bdfile)-1] = '\0';  }  /* open bd file, check validity of configuration */  if ((fp = fopen(bdfile,"r"))==NULL) {    RF_ERRORMSG1("RAID: config error: Can't open layout table file %s\n",bdfile);    return(EINVAL);  }  fgets(buf,256,fp);  i = sscanf(buf,"%u %u %u %u %u %u",&b,&v,&k,&r,&lambda,&norotate);  if (i == 5)    norotate = 0; /* no-rotate flag is optional */  else if (i != 6) {    RF_ERRORMSG("Unable to parse header line in block design file\n");    return(EINVAL);  }    /* set the sparemap directory.  In the in-kernel version, there's a daemon   * that's responsible for finding the sparemaps   */  if (distSpare) {    if (rf_get_next_nonblank_line(smbuf,256,configfp,"Can't find sparemap file name in config file\n"))      return(EINVAL);    smname = rf_find_non_white(smbuf);    if (smname[strlen(smname)-1] == '\n') {      /* strip newline char */      smname[strlen(smname)-1] = '\0';    }  }  else {    smbuf[0] = '\0';    smname = smbuf;  }  /* allocate a buffer to hold the configuration info */  cfgPtr->layoutSpecificSize = RF_SPAREMAP_NAME_LEN + 6 * sizeof(int) + b * k;  /* can't use RF_Malloc here b/c debugMem module not yet init'd */  cfgBuf = (char *) malloc(cfgPtr->layoutSpecificSize);            cfgPtr->layoutSpecific = (void *) cfgBuf;  p = cfgBuf;  /* install name of sparemap file */  for (i=0; smname[i]; i++)    *p++ = smname[i];  /* pad with zeros */  while (i<RF_SPAREMAP_NAME_LEN) {    *p++ = '\0';    i++;  }  /*   * fill in the buffer with the block design parameters   * and then the block design itself   */  *( (int *) p) = b;        p += sizeof(int);  *( (int *) p) = v;        p += sizeof(int);  *( (int *) p) = k;        p += sizeof(int);  *( (int *) p) = r;        p += sizeof(int);  *( (int *) p) = lambda;   p += sizeof(int);  *( (int *) p) = norotate; p += sizeof(int);  while (fscanf(fp,"%d",&val) == 1)    *p++ = (char) val;  fclose(fp);  if (p - cfgBuf != cfgPtr->layoutSpecificSize) {      RF_ERRORMSG2("Size mismatch creating layout specific data: is %d sb %d bytes\n",(p-cfgBuf),6*sizeof(int)+b*k);      return(EINVAL);  }  return(0);}/**************************************************************************** * * utilities * ***************************************************************************//* convert a device file name to a device number */static unsigned int dev_name2num(s)  char  *s;{  struct stat buf;  if (stat(s, &buf) < 0) return(osf_dev_name2num(s));  else return(buf.st_rdev);}/* converts an osf/1 style device name to a device number.  We use this * only if the stat of the device file fails. */static unsigned int osf_dev_name2num(s)  char  *s;{  int num;  char part_ch, lun_ch;  unsigned int bus, target, lun, part, dev_major;  dev_major = RF_SCSI_DISK_MAJOR;  if (sscanf(s,"/dev/rrz%d%c", &num, &part_ch) == 2) {    bus = num>>3;    target = num & 0x7;    part = part_ch - 'a';    lun = 0;  } else if (sscanf(s,"/dev/rrz%c%d%c", &lun_ch, &num, &part_ch) == 3) {    bus = num>>3;    target = num & 0x7;    part = part_ch - 'a';    lun = lun_ch - 'a' + 1;  } else {    RF_ERRORMSG1("Unable to parse disk dev file name %s\n",s);    return(-1);  }  return( (dev_major<<20) | (bus<<14) | (target<<10) | (lun<<6) | part );}/* searches a file for a line that says "START string", where string is * specified as a parameter */static int rf_search_file_for_start_of(string, buf, len, fp)  char  *string;  char  *buf;  int    len;  FILE  *fp;{  char *p;  while (1) {    if (fgets(buf, len, fp) == NULL) return(-1);    p = rf_find_non_white(buf);    if (!strncmp(p, "START", strlen("START"))) {      p = rf_find_white(p);      p = rf_find_non_white(p);      if (!strncmp(p, string, strlen(string))) return(0);    }  }}/* reads from file fp into buf until it finds an interesting line */int rf_get_next_nonblank_line(buf, len, fp, errmsg)  char  *buf;  int    len;  FILE  *fp;  char  *errmsg;{  char *p;  while (fgets(buf,256,fp) != NULL) {    p = rf_find_non_white(buf);    if (*p == '\n' || *p == '\0' || *p == '#') continue;    return(0);  }  if (errmsg) RF_ERRORMSG(errmsg);  return(1);}/* Allocates an array for the spare table, and initializes it from a file. * In the user-level version, this is called when recon is initiated. * When/if I move recon into the kernel, there'll be a daemon that does * an ioctl into raidframe which will block until a spare table is needed. * When it returns, it will read a spare table from the file system, * pass it into the kernel via a different ioctl, and then block again * on the original ioctl. * * This is specific to the declustered layout, but doesn't belong in * rf_decluster.c because it uses stuff that can't be compiled into * the kernel, and it needs to be compiled into the user-level sparemap daemon. * */void *rf_ReadSpareTable(req, fname)  RF_SparetWait_t  *req;  char             *fname;{  int i, j, numFound, linecount, tableNum, tupleNum, spareDisk, spareBlkOffset;  char buf[1024], targString[100], errString[100];  RF_SpareTableEntry_t **table;  FILE *fp;  /* allocate and initialize the table */  RF_Malloc(table, req->TablesPerSpareRegion * sizeof(RF_SpareTableEntry_t *), (RF_SpareTableEntry_t **));  for (i=0; i<req->TablesPerSpareRegion; i++) {    RF_Malloc(table[i], req->BlocksPerTable * sizeof(RF_SpareTableEntry_t), (RF_SpareTableEntry_t *));    for (j=0; j<req->BlocksPerTable; j++) table[i][j].spareDisk = table[i][j].spareBlockOffsetInSUs = -1;  }  /* 2.  open sparemap file, sanity check */  if ((fp = fopen(fname,"r"))==NULL) {    fprintf(stderr,"rf_ReadSpareTable:  Can't open sparemap file %s\n",fname);  return(NULL);  }  if (rf_get_next_nonblank_line(buf,1024,fp,"Invalid sparemap file:  can't find header line\n"))    return(NULL);  if (buf[strlen(buf)-1] == '\n')    buf[strlen(buf)-1] = '\0';  sprintf(targString, "fdisk %d\n", req->fcol);  sprintf(errString, "Invalid sparemap file:  can't find \"fdisk %d\" line\n",req->fcol);  while (1) {    rf_get_next_nonblank_line(buf,1024,fp,errString);    if (!strncmp(buf,targString,strlen(targString))) break;  }  /* no more blank lines or comments allowed now */  linecount = req->TablesPerSpareRegion * req->TableDepthInPUs;  for (i=0; i<linecount; i++) {    numFound = fscanf(fp," %d %d %d %d",&tableNum, &tupleNum, &spareDisk, &spareBlkOffset);    if (numFound != 4) {      fprintf(stderr,"Sparemap file prematurely exhausted after %d of %d lines\n",i,linecount); return(NULL);    }    RF_ASSERT(tableNum >= 0 && tableNum < req->TablesPerSpareRegion);    RF_ASSERT(tupleNum >= 0 && tupleNum < req->BlocksPerTable);    RF_ASSERT(spareDisk >= 0 && spareDisk < req->C);    RF_ASSERT(spareBlkOffset >= 0 && spareBlkOffset < req->SpareSpaceDepthPerRegionInSUs / req->SUsPerPU);        table[tableNum][tupleNum].spareDisk = spareDisk;    table[tableNum][tupleNum].spareBlockOffsetInSUs = spareBlkOffset * req->SUsPerPU;  }  fclose(fp);  return((void *) table);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合天天综合在线视频| 欧美午夜在线一二页| 欧美日韩三级视频| 久久精品水蜜桃av综合天堂| 日韩一区在线播放| 欧美国产综合色视频| 韩国女主播一区| 欧美日韩国产小视频| ㊣最新国产の精品bt伙计久久| 国产.欧美.日韩| 中文乱码免费一区二区| av一本久道久久综合久久鬼色| 亚洲女厕所小便bbb| 欧美日韩一区二区三区四区| 蜜臀av性久久久久蜜臀aⅴ| 日韩欧美国产不卡| 99这里都是精品| 亚洲一区在线看| 欧美一区日韩一区| 成人免费黄色在线| 日韩精品国产精品| 国产欧美视频一区二区三区| 91老司机福利 在线| 免费高清在线一区| 成人欧美一区二区三区黑人麻豆| 制服丝袜成人动漫| 91欧美一区二区| 国产高清成人在线| 美女一区二区在线观看| 国产精品久久久久7777按摩 | 亚洲女同ⅹxx女同tv| 国产精品毛片大码女人| 国产婷婷色一区二区三区四区| 337p亚洲精品色噜噜| 久久精品99国产精品| 2021国产精品久久精品| 精品一区二区三区影院在线午夜 | 国产一区91精品张津瑜| 天天色综合成人网| 欧美日韩国产在线观看| 蜜桃一区二区三区四区| 在线播放91灌醉迷j高跟美女 | 91亚洲精品久久久蜜桃网站| 国产精品视频一二三区| 精品国产乱码久久久久久蜜臀| 成人免费看片app下载| 国内一区二区视频| 韩日精品视频一区| 国产一区欧美日韩| 成人免费视频一区| 日欧美一区二区| 伊人开心综合网| 国产精品不卡视频| 亚洲综合清纯丝袜自拍| 亚洲成人免费电影| 欧美色网站导航| 国产一区二区不卡| 亚洲欧洲色图综合| 色成年激情久久综合| 日日摸夜夜添夜夜添精品视频 | 亚洲少妇最新在线视频| 欧美日韩成人在线| 久久国产视频网| 国产精品第一页第二页第三页 | 成人ar影院免费观看视频| 亚洲综合色婷婷| www成人在线观看| 日韩欧美高清在线| 国产v综合v亚洲欧| 亚洲高清视频中文字幕| 久久综合色8888| 欧美专区日韩专区| 国产麻豆欧美日韩一区| 一个色妞综合视频在线观看| 精品国产91九色蝌蚪| 91精品1区2区| 国产91露脸合集magnet| 日韩二区三区在线观看| 国产精品少妇自拍| 91精品欧美久久久久久动漫| 成人av在线电影| 日本视频一区二区| 一区二区三区在线观看国产| 久久久亚洲国产美女国产盗摄 | 91视频在线观看免费| 久久精品国产精品亚洲红杏| 亚洲啪啪综合av一区二区三区| 欧美r级在线观看| 9191成人精品久久| 欧美伊人久久久久久午夜久久久久| 国产在线精品不卡| 蜜臀av一区二区| 亚洲国产精品影院| 亚洲精品日日夜夜| 欧美极品美女视频| 亚洲第四色夜色| 欧美日韩一本到| 婷婷成人激情在线网| 日韩亚洲欧美在线观看| 免费成人你懂的| 精品国产91亚洲一区二区三区婷婷| 老司机精品视频导航| www日韩大片| 97精品久久久午夜一区二区三区| 成人欧美一区二区三区1314| 色婷婷精品大在线视频| 亚洲电影一区二区三区| 精品国产乱码久久久久久久| 成人小视频在线观看| 亚洲午夜激情网站| 中文字幕巨乱亚洲| 欧美zozozo| 99久久免费国产| 国产精品性做久久久久久| 自拍视频在线观看一区二区| 日韩一区二区在线播放| 国产成人av电影在线观看| 亚洲视频你懂的| 国产成人亚洲综合色影视| 成人欧美一区二区三区小说| 欧美一卡二卡在线观看| 色综合色狠狠天天综合色| 欧美日韩在线播| 亚洲国产欧美另类丝袜| 丁香婷婷深情五月亚洲| 亚洲国产中文字幕| 一级特黄大欧美久久久| 亚洲一区二区欧美日韩| 亚洲国产一区二区三区| 五月天婷婷综合| 捆绑调教美女网站视频一区| 国产一区二区三区四| 粉嫩蜜臀av国产精品网站| 成人精品一区二区三区中文字幕| 国产99久久久国产精品| 亚洲精品免费播放| 中文字幕一区二区三区视频| 精品88久久久久88久久久| 日韩美一区二区三区| 精品裸体舞一区二区三区| 在线不卡免费欧美| 欧美日韩成人高清| 久久综合久久综合久久综合| 欧美一级高清片在线观看| 欧美tickling挠脚心丨vk| 欧美日韩成人综合| 久久众筹精品私拍模特| 国产精品久久一卡二卡| 国产精品素人视频| 一区二区三区 在线观看视频| 国产一区二区不卡| 国产精品影视网| 在线亚洲人成电影网站色www| 欧美视频在线观看一区| 欧美电影免费观看高清完整版在线| 欧美成人三级电影在线| 亚洲免费观看高清| 久久aⅴ国产欧美74aaa| 91偷拍与自偷拍精品| 欧美一区二区美女| 国产精品美女一区二区三区| 亚洲电影视频在线| 在线观看日韩电影| 国产偷v国产偷v亚洲高清| 国产乱淫av一区二区三区 | 欧美色图天堂网| 欧美一区二区精品| 日韩激情在线观看| 成人黄色软件下载| 欧美日本一道本在线视频| 久久亚洲综合色| 欧美性大战久久久久久久蜜臀 | 国产一区不卡视频| 欧美日韩国产大片| 亚洲欧洲成人自拍| 91婷婷韩国欧美一区二区| 精品国产乱码久久久久久图片| 亚洲一区二区三区爽爽爽爽爽| 国产精品1024| 日韩一区二区三区四区| 亚洲午夜日本在线观看| 粉嫩在线一区二区三区视频| 日韩欧美在线综合网| 综合av第一页| 日韩欧美高清dvd碟片| 久久99久久99小草精品免视看| 欧美丝袜自拍制服另类| 亚洲免费观看高清完整版在线观看 | 国产精品一区二区在线观看网站| 波多野洁衣一区| 亚洲日本成人在线观看| 欧美专区日韩专区| 日韩激情中文字幕| 日韩亚洲欧美成人一区| 国产一区二区在线看| 亚洲国产精品传媒在线观看| 成人激情校园春色| 亚洲第四色夜色| 国产性色一区二区| 99国产精品久久|