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

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

?? st.c

?? linux 1.0 源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
      printk(	"st%d: Density %x, tape length: %x, blocksize: %d, drv buffer: %d\n",	     dev, STp->density, (STp->buffer)->b_data[5] * 65536 +	     (STp->buffer)->b_data[6] * 256 + (STp->buffer)->b_data[7],	     STp->block_size, STp->drv_buffer);#endif      if (STp->block_size > ST_BUFFER_SIZE) {	printk("st%d: Blocksize %d too large for buffer.\n", dev,	       STp->block_size);	(STp->buffer)->in_use = 0;	STp->in_use = 0;	return (-EIO);      }    }    else      STp->block_size = ST_BLOCK_SIZE;    if (STp->block_size > 0) {      (STp->buffer)->buffer_blocks = ST_BUFFER_SIZE / STp->block_size;      (STp->buffer)->buffer_size =	(STp->buffer)->buffer_blocks * STp->block_size;    }    else {      (STp->buffer)->buffer_blocks = 1;      (STp->buffer)->buffer_size = ST_BUFFER_SIZE;    }    (STp->buffer)->buffer_bytes = (STp->buffer)->read_pointer = 0;#ifdef DEBUG    printk("st%d: Block size: %d, buffer size: %d (%d blocks).\n", dev,	   STp->block_size, (STp->buffer)->buffer_size,	   (STp->buffer)->buffer_blocks);#endif    if ((STp->buffer)->b_data[2] & 0x80) {      STp->write_prot = 1;#ifdef DEBUG      printk( "st%d: Write protected\n", dev);#endif    }    return 0;}/* Close the device*/	static voidscsi_tape_close(struct inode * inode, struct file * filp){    int dev;    int result;    int rewind;    static unsigned char cmd[10];    Scsi_Cmnd * SCpnt;    Scsi_Tape * STp;       dev = MINOR(inode->i_rdev);    rewind = (dev & 0x80) == 0;    dev = dev & 127;    STp = &(scsi_tapes[dev]);    if ( STp->rw == ST_WRITING) {      result = flush_write_buffer(dev);#ifdef DEBUG      printk("st%d: File length %d bytes.\n", dev, filp->f_pos);#endif      if (result == 0 || result == (-ENOSPC)) {	SCpnt = allocate_device(NULL, (STp->device)->index, 1);	SCpnt->sense_buffer[0] = 0;	memset(cmd, 0, 10);	cmd[0] = WRITE_FILEMARKS;	cmd[4] = 1;	SCpnt->request.dev = dev;	scsi_do_cmd( SCpnt,		    (void *) cmd, (void *) (STp->buffer)->b_data,		    ST_BLOCK_SIZE, st_sleep_done, ST_TIMEOUT, MAX_RETRIES);	if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) );	if ((STp->buffer)->last_result_fatal != 0)	  printk("st%d: Error on write filemark.\n", dev);	SCpnt->request.dev = -1;  /* Mark as not busy */      }#ifdef DEBUG      printk("st%d: Buffer flushed, EOF written\n", dev);#endif    }    else if (!rewind) {#ifndef ST_IN_FILE_POS      if ((STp->eof == ST_FM) && !STp->eof_hit)	st_int_ioctl(inode, filp, MTBSF, 1); /* Back over the EOF hit */#else      flush_buffer(inode, filp, 0);#endif    }    if (rewind)      st_int_ioctl(inode, filp, MTREW, 1);    (STp->buffer)->in_use = 0;    STp->in_use = 0;    return;}/* Write command */	static intst_write(struct inode * inode, struct file * filp, char * buf, int count){    int dev;    int total, do_count, blks, retval, transfer;    int write_threshold;    static unsigned char cmd[10];    char *b_point;    Scsi_Cmnd * SCpnt;    Scsi_Tape * STp;    dev = MINOR(inode->i_rdev) & 127;    STp = &(scsi_tapes[dev]);#ifdef DEBUG    if (!STp->in_use) {      printk("st%d: Incorrect device.\n", dev);      return (-EIO);    }#endif    if (STp->write_prot)      return (-EACCES);    if (STp->block_size == 0 && count > ST_BUFFER_SIZE)      return (-EOVERFLOW);    if (STp->rw == ST_READING) {      retval = flush_buffer(inode, filp, 0);      if (retval)	return retval;      STp->rw = ST_WRITING;    }#if ST_WRITE_THRESHOLD_BLOCKS < ST_BUFFER_BLOCKS    if ((STp->buffer)->writing) {      write_behind_check(dev);      if ((STp->buffer)->last_result_fatal) {#ifdef DEBUG	printk("st%d: Async write error %x.\n", dev,	       (STp->buffer)->last_result);#endif	if ((STp->buffer)->last_result == INT_MAX) {	  retval = (-ENOSPC);  /* All has been written */	  STp->eof = ST_EOM_OK;	}	else	  retval = (-EIO);	return retval;      }    }#endif    if (STp->eof == ST_EOM_OK)      return (-ENOSPC);    else if (STp->eof == ST_EOM_ERROR)      return (-EIO);#ifdef ST_NO_DELAYED_WRITES    if (STp->block_size != 0 && (count % STp->block_size) != 0)      return (-EIO);   /* Write must be integral number of blocks */    write_threshold = 1;#else    write_threshold = (STp->buffer)->buffer_size;#endif    SCpnt = allocate_device(NULL, (STp->device)->index, 1);    total = count;    memset(cmd, 0, 10);    cmd[0] = WRITE_6;    cmd[1] = (STp->block_size != 0);    STp->rw = ST_WRITING;    b_point = buf;    while(#if ST_WRITE_THRESHOLD_BLOCKS  < ST_BUFFER_BLOCKS	  STp->block_size != 0 &&	  ((STp->buffer)->buffer_bytes + count) >	  write_threshold)#else	  (STp->block_size == 0 && count > 0) ||	  ((STp->buffer)->buffer_bytes + count) >=	  write_threshold)#endif    {      if (STp->block_size == 0)	do_count = count;      else {	do_count = (STp->buffer)->buffer_size - (STp->buffer)->buffer_bytes;	if (do_count > count)	  do_count = count;      }      memcpy_fromfs((STp->buffer)->b_data +		    (STp->buffer)->buffer_bytes, b_point, do_count);      if (STp->block_size == 0)        blks = do_count;      else	blks = ((STp->buffer)->buffer_bytes + do_count) /	  STp->block_size;      cmd[2] = blks >> 16;      cmd[3] = blks >> 8;      cmd[4] = blks;      SCpnt->sense_buffer[0] = 0;      SCpnt->request.dev = dev;      scsi_do_cmd (SCpnt,		   (void *) cmd, (STp->buffer)->b_data,		   (STp->buffer)->buffer_size,		   st_sleep_done, ST_TIMEOUT, MAX_RETRIES);      if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) );      if ((STp->buffer)->last_result_fatal != 0) {#ifdef DEBUG	printk("st%d: Error on write:\n", dev);#endif	if ((SCpnt->sense_buffer[0] & 0x70) == 0x70 &&	    (SCpnt->sense_buffer[2] & 0x40)) {	  if (STp->block_size != 0 && (SCpnt->sense_buffer[0] & 0x80) != 0)	    transfer = (SCpnt->sense_buffer[3] << 24) |	      (SCpnt->sense_buffer[4] << 16) |		(SCpnt->sense_buffer[5] << 8) | SCpnt->sense_buffer[6];	  else if (STp->block_size == 0 &&		   (SCpnt->sense_buffer[2] & 0x0f) == VOLUME_OVERFLOW)	    transfer = do_count;	  else	    transfer = 0;	  if (STp->block_size != 0)	    transfer *= STp->block_size;	  if (transfer <= do_count) {	    filp->f_pos += do_count - transfer;	    count -= do_count - transfer;	    STp->eof = ST_EOM_OK;	    retval = (-ENOSPC); /* EOM within current request */#ifdef DEBUG	    printk("st%d: EOM with %d bytes unwritten.\n",		   dev, transfer);#endif	  }	  else {	    STp->eof = ST_EOM_ERROR;	    retval = (-EIO); /* EOM for old data */#ifdef DEBUG	    printk("st%d: EOM with lost data.\n", dev);#endif	  }	}	else	  retval = (-EIO);	SCpnt->request.dev = -1;  /* Mark as not busy */	(STp->buffer)->buffer_bytes = 0;	STp->dirty = 0;	if (count < total)	  return total - count;	else	  return retval;      }      filp->f_pos += do_count;      b_point += do_count;      count -= do_count;      (STp->buffer)->buffer_bytes = 0;      STp->dirty = 0;    }    if (count != 0) {      STp->dirty = 1;      memcpy_fromfs((STp->buffer)->b_data +		    (STp->buffer)->buffer_bytes,b_point,count);      filp->f_pos += count;      (STp->buffer)->buffer_bytes += count;      count = 0;    }    if ((STp->buffer)->last_result_fatal != 0) {      SCpnt->request.dev = -1;      return (STp->buffer)->last_result_fatal;    }#if ST_WRITE_THRESHOLD_BLOCKS < ST_BUFFER_BLOCKS    if ((STp->buffer)->buffer_bytes >= ST_WRITE_THRESHOLD ||	STp->block_size == 0) {      /* Schedule an asynchronous write */      if (STp->block_size == 0)	(STp->buffer)->writing = (STp->buffer)->buffer_bytes;      else	(STp->buffer)->writing = ((STp->buffer)->buffer_bytes /	  STp->block_size) * STp->block_size;      STp->dirty = 0;      if (STp->block_size == 0)	blks = (STp->buffer)->writing;      else	blks = (STp->buffer)->writing / STp->block_size;      cmd[2] = blks >> 16;      cmd[3] = blks >> 8;      cmd[4] = blks;      SCpnt->result = (STp->buffer)->last_result = -1;      SCpnt->sense_buffer[0] = 0;      SCpnt->request.dev = dev;      scsi_do_cmd (SCpnt,		   (void *) cmd, (STp->buffer)->b_data,		   (STp->buffer)->writing,		   st_sleep_done, ST_TIMEOUT, MAX_RETRIES);    }    else#endif      SCpnt->request.dev = -1;  /* Mark as not busy */    return( total);}   /* Read command */	static intst_read(struct inode * inode, struct file * filp, char * buf, int count){    int dev;    int total;    int transfer, blks, bytes;    static unsigned char cmd[10];    Scsi_Cmnd * SCpnt;    Scsi_Tape * STp;    dev = MINOR(inode->i_rdev) & 127;    STp = &(scsi_tapes[dev]);#ifdef DEBUG    if (!STp->in_use) {      printk("st%d: Incorrect device.\n", dev);      return (-EIO);    }#endif    if (STp->block_size == 0 && count > ST_BUFFER_SIZE)      return (-EOVERFLOW);    if (STp->rw == ST_WRITING) {      transfer = flush_buffer(inode, filp, 0);      if (transfer)	return transfer;      STp->rw = ST_READING;    }#ifdef DEBUG    if (STp->eof != ST_NOEOF)      printk("st%d: EOF flag up. Bytes %d\n", dev,	     (STp->buffer)->buffer_bytes);#endif    if (((STp->buffer)->buffer_bytes == 0) &&	STp->eof == ST_EOM_OK)  /* EOM or Blank Check */      return (-EIO);    STp->rw = ST_READING;    SCpnt = allocate_device(NULL, (STp->device)->index, 1);    for (total = 0; total < count; ) {      if ((STp->buffer)->buffer_bytes == 0 &&	  STp->eof == ST_NOEOF) {	memset(cmd, 0, 10);	cmd[0] = READ_6;	cmd[1] = (STp->block_size != 0);	if (STp->block_size == 0)	  blks = bytes = count;	else {	  blks = (STp->buffer)->buffer_blocks;	  bytes = blks * STp->block_size;	}	cmd[2] = blks >> 16;	cmd[3] = blks >> 8;	cmd[4] = blks;	SCpnt->sense_buffer[0] = 0;	SCpnt->request.dev = dev;	scsi_do_cmd (SCpnt,		     (void *) cmd, (STp->buffer)->b_data,		     (STp->buffer)->buffer_size,		     st_sleep_done, ST_TIMEOUT, MAX_RETRIES);	if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) );	(STp->buffer)->read_pointer = 0;	STp->eof_hit = 0;	if ((STp->buffer)->last_result_fatal) {#ifdef DEBUG	  printk("st%d: Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n", dev,		 SCpnt->sense_buffer[0], SCpnt->sense_buffer[1],		 SCpnt->sense_buffer[2], SCpnt->sense_buffer[3],		 SCpnt->sense_buffer[4], SCpnt->sense_buffer[5],		 SCpnt->sense_buffer[6], SCpnt->sense_buffer[7]);#endif	  if ((SCpnt->sense_buffer[0] & 0x70) == 0x70) { /* extended sense */	    if ((SCpnt->sense_buffer[2] & 0xe0) != 0) { /* EOF, EOM, or ILI */	      if ((SCpnt->sense_buffer[0] & 0x80) != 0)		transfer = (SCpnt->sense_buffer[3] << 24) |		  (SCpnt->sense_buffer[4] << 16) |		    (SCpnt->sense_buffer[5] << 8) | SCpnt->sense_buffer[6];	      else		transfer = 0;	      if (STp->block_size == 0 &&		  (SCpnt->sense_buffer[2] & 0x0f) == MEDIUM_ERROR)		transfer = bytes;	      if (SCpnt->sense_buffer[2] & 0x20) {		if (STp->block_size == 0) {		  if (transfer <= 0)		    transfer = 0;		  (STp->buffer)->buffer_bytes = count - transfer;		}		else {		  printk("st%d: Incorrect block size.\n", dev);		  SCpnt->request.dev = -1;  /* Mark as not busy */		  return (-EIO);		}	      }	      else if (SCpnt->sense_buffer[2] & 0x40) {		STp->eof = ST_EOM_OK;		if (STp->block_size == 0)		  (STp->buffer)->buffer_bytes = count - transfer;		else		  (STp->buffer)->buffer_bytes =		    ((STp->buffer)->buffer_blocks - transfer) *		      STp->block_size;#ifdef DEBUG		printk("st%d: EOM detected (%d bytes read).\n", dev,		       (STp->buffer)->buffer_bytes);#endif	      }	      else if (SCpnt->sense_buffer[2] & 0x80) {		STp->eof = ST_FM;		if (STp->block_size == 0)		  (STp->buffer)->buffer_bytes = 0;		else		  (STp->buffer)->buffer_bytes =		    ((STp->buffer)->buffer_blocks - transfer) *		      STp->block_size;#ifdef DEBUG		printk(		 "st%d: EOF detected (%d bytes read, transferred %d bytes).\n",		       dev, (STp->buffer)->buffer_bytes, total);#endif	      } /* end of EOF, EOM, ILI test */	    }	    else { /* nonzero sense key */#ifdef DEBUG	      printk("st%d: Tape error while reading.\n", dev);#endif	      SCpnt->request.dev = -1;	      if (total)		return total;	      else		return -EIO;	    }	  }	  else {	    transfer = (STp->buffer)->last_result_fatal;	    SCpnt->request.dev = -1;  /* Mark as not busy */	    return transfer;	  }	}	else /* Read successful */	  (STp->buffer)->buffer_bytes = bytes;      } /* if ((STp->buffer)->buffer_bytes == 0 &&	   STp->eof == ST_NOEOF) */      if ((STp->buffer)->buffer_bytes > 0) {#ifdef DEBUG	if (STp->eof != ST_NOEOF)	  printk("st%d: EOF up. Left %d, needed %d.\n", dev,		 (STp->buffer)->buffer_bytes, count - total);#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男同1069视频| 久久免费看少妇高潮| 亚洲摸摸操操av| 色婷婷久久99综合精品jk白丝| 成人欧美一区二区三区小说| 91在线视频18| 午夜精品视频在线观看| 制服丝袜av成人在线看| 狠狠色丁香久久婷婷综合_中| 精品国产亚洲在线| 成人精品视频一区二区三区 | 99在线视频精品| 亚洲欧美日韩久久精品| 欧美无砖砖区免费| 麻豆精品在线观看| 国产精品网站一区| 在线观看亚洲精品| 激情久久五月天| 亚洲视频 欧洲视频| 欧美精品自拍偷拍动漫精品| 久久精品国产99| 亚洲欧洲精品一区二区精品久久久| 91传媒视频在线播放| 久久av资源站| 亚洲精品日日夜夜| 精品久久久久久久久久久久包黑料| 成人开心网精品视频| 蜜臀av一区二区在线免费观看| 久久精品欧美日韩| 欧美日韩国产一级片| 韩国一区二区视频| 亚洲最大成人网4388xx| 欧美一级日韩一级| 91免费看`日韩一区二区| 日本视频中文字幕一区二区三区| 久久久久九九视频| 欧美日韩成人综合| caoporn国产一区二区| 蜜臀av一级做a爰片久久| 亚洲同性gay激情无套| 精品少妇一区二区| 欧美在线制服丝袜| 成人av网站大全| 狠狠色伊人亚洲综合成人| 亚洲va欧美va天堂v国产综合| 久久久亚洲精品石原莉奈| 欧美精品一卡二卡| 欧美亚一区二区| 国产+成+人+亚洲欧洲自线| 日日夜夜免费精品| 亚洲裸体在线观看| 国产精品视频yy9299一区| 日韩欧美激情一区| 欧美军同video69gay| 91行情网站电视在线观看高清版| 国产黄色精品视频| 精品一区二区三区蜜桃| 蜜桃一区二区三区在线观看| 亚洲一区中文日韩| 蜜臀av一区二区| 亚洲国产视频a| 亚洲精品视频自拍| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 久久久综合九色合综国产精品| 日韩一区和二区| 91精品国产91热久久久做人人| 欧美色欧美亚洲另类二区| 色美美综合视频| 色成年激情久久综合| 91伊人久久大香线蕉| 成人激情黄色小说| jvid福利写真一区二区三区| 激情都市一区二区| 国产在线播精品第三| 国内精品久久久久影院色| 韩国女主播成人在线观看| 韩国午夜理伦三级不卡影院| 美国av一区二区| 日本成人在线不卡视频| 久久精品国产精品亚洲红杏| 开心九九激情九九欧美日韩精美视频电影 | 白白色 亚洲乱淫| 成人性视频免费网站| 不卡的av网站| 色综合久久久久久久久久久| 色噜噜狠狠一区二区三区果冻| 成人福利在线看| 99re这里只有精品6| 日本韩国欧美一区二区三区| 91国偷自产一区二区三区成为亚洲经典| 91社区在线播放| 欧美浪妇xxxx高跟鞋交| 日韩视频在线一区二区| www国产成人| 中文字幕一区在线观看| 亚洲精品久久久蜜桃| 亚洲成av人片| 激情综合网天天干| 99精品国产热久久91蜜凸| 欧美羞羞免费网站| 精品国产一区二区精华| 国产欧美一二三区| 亚洲综合自拍偷拍| 美腿丝袜亚洲综合| 成人高清视频在线| 欧美精品久久久久久久多人混战 | 精品福利在线导航| 亚洲国产精品成人久久综合一区| 国产精品电影一区二区三区| 一区二区三区产品免费精品久久75| 日韩在线a电影| 国产精品综合一区二区| 色欧美片视频在线观看| 91精品国产乱| 亚洲丝袜制服诱惑| 奇米色777欧美一区二区| 成人午夜激情视频| 91麻豆精品国产91久久久资源速度| 亚洲精品在线观看视频| 樱花草国产18久久久久| 久久99精品视频| 色偷偷成人一区二区三区91| 日韩欧美成人午夜| 夜夜嗨av一区二区三区网页| 国产一区二区三区免费播放| 欧美性生活影院| 欧美激情一区二区三区| 免费在线成人网| 在线观看亚洲成人| 亚洲国产激情av| 欧美aaa在线| 欧美性猛交一区二区三区精品| 久久先锋资源网| 亚洲va欧美va人人爽| 99久久99精品久久久久久 | 欧美日韩国产另类不卡| 日本一区二区三区四区 | 日本一区二区三区在线不卡| 日韩和的一区二区| 日本道精品一区二区三区| 久久精品视频在线看| 日韩精品电影一区亚洲| 色综合色狠狠综合色| 亚洲国产成人一区二区三区| 美女视频黄久久| 欧美一卡2卡3卡4卡| 亚洲国产一区二区三区| 91麻豆精东视频| 成人欧美一区二区三区白人 | fc2成人免费人成在线观看播放 | 欧美mv日韩mv国产| 亚洲成人一二三| 欧美在线观看视频一区二区 | 久久在线免费观看| 蜜臀久久久99精品久久久久久| 欧美手机在线视频| 亚洲成人激情自拍| 欧美日韩五月天| 午夜精品久久久久久久99樱桃 | 91精品国产综合久久精品麻豆| 中文字幕一区二区三区在线播放| 韩国中文字幕2020精品| 精品三级在线观看| 国产另类ts人妖一区二区| 欧美精品一区二区三区蜜桃| 精品一二三四区| 久久久久国产精品厨房| 国产成人精品免费| 国产精品久久久久久久久晋中| 国产高清在线观看免费不卡| 久久久久9999亚洲精品| 国产成人福利片| 国产精品欧美久久久久一区二区 | 一二三区精品福利视频| 在线观看91视频| 亚洲国产精品欧美一二99| 欧美日韩dvd在线观看| 丝袜美腿亚洲一区二区图片| 欧美日韩国产一级片| 麻豆精品在线观看| 国产片一区二区| 99久久国产免费看| 亚洲国产欧美在线| 日韩丝袜情趣美女图片| 国产精品一区不卡| 中文字幕一区二区三区在线不卡| 色88888久久久久久影院野外| 亚洲综合另类小说| 日韩一区国产二区欧美三区| 国产精品性做久久久久久| 中文字幕视频一区| 欧美日本乱大交xxxxx| 国产在线精品一区二区不卡了| 亚洲国产精品黑人久久久| 色综合久久六月婷婷中文字幕| 香蕉av福利精品导航| 久久蜜桃av一区精品变态类天堂| av在线不卡电影| 日本大胆欧美人术艺术动态| 日本一区二区高清|