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

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

?? inode.c

?? 帶中文注釋的Linux+0.11+源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
    {      inode->i_count--;      return;    }// 如果是塊設備文件的i 節(jié)點,此時邏輯塊字段0 中是設備號,則刷新該設備。并等待i 節(jié)點解鎖。  if (S_ISBLK (inode->i_mode))    {      sync_dev (inode->i_zone[0]);      wait_on_inode (inode);    }repeat:// 如果i 節(jié)點的引用計數(shù)大于1,則遞減1。  if (inode->i_count > 1)    {      inode->i_count--;      return;    }// 如果i 節(jié)點的鏈接數(shù)為0,則釋放該i 節(jié)點的所有邏輯塊,并釋放該i 節(jié)點。  if (!inode->i_nlinks)    {      truncate (inode);      free_inode (inode);      return;    }// 如果該i 節(jié)點已作過修改,則更新該i 節(jié)點,并等待該i 節(jié)點解鎖。  if (inode->i_dirt)    {      write_inode (inode);	/* we can sleep - so do again */      wait_on_inode (inode);      goto repeat;    }// i 節(jié)點引用計數(shù)遞減1。  inode->i_count--;  return;}//// 從i 節(jié)點表(inode_table)中獲取一個空閑i 節(jié)點項。// 尋找引用計數(shù)count 為0 的i 節(jié)點,并將其寫盤后清零,返回其指針。struct m_inode *get_empty_inode (void){  struct m_inode *inode;  static struct m_inode *last_inode = inode_table;	// last_inode 指向i 節(jié)點表第一項。  int i;  do    {// 掃描i 節(jié)點表。      inode = NULL;      for (i = NR_INODE; i; i--)	{// 如果last_inode 已經(jīng)指向i 節(jié)點表的最后1 項之后,則讓其重新指向i 節(jié)點表開始處。	  if (++last_inode >= inode_table + NR_INODE)	    last_inode = inode_table;// 如果last_inode 所指向的i 節(jié)點的計數(shù)值為0,則說明可能找到空閑i 節(jié)點項。讓inode 指向// 該i 節(jié)點。如果該i 節(jié)點的已修改標志和鎖定標志均為0,則我們可以使用該i 節(jié)點,于是退出循環(huán)。	  if (!last_inode->i_count)	    {	      inode = last_inode;	      if (!inode->i_dirt && !inode->i_lock)		break;	    }	}// 如果沒有找到空閑i 節(jié)點(inode=NULL),則將整個i 節(jié)點表打印出來供調試使用,并死機。      if (!inode)	{	  for (i = 0; i < NR_INODE; i++)	    printk ("%04x: %6d\t", inode_table[i].i_dev,		    inode_table[i].i_num);	  panic ("No free inodes in mem");	}// 等待該i 節(jié)點解鎖(如果又被上鎖的話)。      wait_on_inode (inode);// 如果該i 節(jié)點已修改標志被置位的話,則將該i 節(jié)點刷新,并等待該i 節(jié)點解鎖。      while (inode->i_dirt)	{	  write_inode (inode);	  wait_on_inode (inode);	}    }  while (inode->i_count);	// 如果i 節(jié)點又被其它占用的話,則重新尋找空閑i 節(jié)點。// 已找到空閑i 節(jié)點項。則將該i 節(jié)點項內容清零,并置引用標志為1,返回該i 節(jié)點指針。  memset (inode, 0, sizeof (*inode));  inode->i_count = 1;  return inode;}//// 獲取管道節(jié)點。返回為i 節(jié)點指針(如果是NULL 則失敗)。// 首先掃描i 節(jié)點表,尋找一個空閑i 節(jié)點項,然后取得一頁空閑內存供管道使用。// 然后將得到的i 節(jié)點的引用計數(shù)置為2(讀者和寫者),初始化管道頭和尾,置i 節(jié)點的管道類型表示。struct m_inode *get_pipe_inode (void){  struct m_inode *inode;  if (!(inode = get_empty_inode ()))	// 如果找不到空閑i 節(jié)點則返回NULL。    return NULL;  if (!(inode->i_size = get_free_page ()))    {				// 節(jié)點的i_size 字段指向緩沖區(qū)。      inode->i_count = 0;	// 如果已沒有空閑內存,則      return NULL;		// 釋放該i 節(jié)點,并返回NULL。    }  inode->i_count = 2;		/* sum of readers/writers *//* 讀/寫兩者總計 */  PIPE_HEAD (*inode) = PIPE_TAIL (*inode) = 0;	// 復位管道頭尾指針。  inode->i_pipe = 1;		// 置節(jié)點為管道使用的標志。  return inode;			// 返回i 節(jié)點指針。}//// 從設備上讀取指定節(jié)點號的i 節(jié)點。// nr - i 節(jié)點號。struct m_inode *iget (int dev, int nr){  struct m_inode *inode, *empty;  if (!dev)    panic ("iget with dev==0");// 從i 節(jié)點表中取一個空閑i 節(jié)點。  empty = get_empty_inode ();// 掃描i 節(jié)點表。尋找指定節(jié)點號的i 節(jié)點。并遞增該節(jié)點的引用次數(shù)。  inode = inode_table;  while (inode < NR_INODE + inode_table)    {// 如果當前掃描的i 節(jié)點的設備號不等于指定的設備號或者節(jié)點號不等于指定的節(jié)點號,則繼續(xù)掃描。      if (inode->i_dev != dev || inode->i_num != nr)	{	  inode++;	  continue;	}// 找到指定設備號和節(jié)點號的i 節(jié)點,等待該節(jié)點解鎖(如果已上鎖的話)。      wait_on_inode (inode);// 在等待該節(jié)點解鎖的階段,節(jié)點表可能會發(fā)生變化,所以再次判斷,如果發(fā)生了變化,則再次重新// 掃描整個i 節(jié)點表。      if (inode->i_dev != dev || inode->i_num != nr)	{	  inode = inode_table;	  continue;	}// 將該i 節(jié)點引用計數(shù)增1。      inode->i_count++;      if (inode->i_mount)	{	  int i;// 如果該i 節(jié)點是其它文件系統(tǒng)的安裝點,則在超級塊表中搜尋安裝在此i 節(jié)點的超級塊。如果沒有// 找到,則顯示出錯信息,并釋放函數(shù)開始獲取的空閑節(jié)點,返回該i 節(jié)點指針。	  for (i = 0; i < NR_SUPER; i++)	    if (super_block[i].s_imount == inode)	      break;	  if (i >= NR_SUPER)	    {	      printk ("Mounted inode hasn't got sb\n");	      if (empty)		iput (empty);	      return inode;	    }// 將該i 節(jié)點寫盤。從安裝在此i 節(jié)點文件系統(tǒng)的超級塊上取設備號,并令i 節(jié)點號為1。然后重新// 掃描整個i 節(jié)點表,取該被安裝文件系統(tǒng)的根節(jié)點。	  iput (inode);	  dev = super_block[i].s_dev;	  nr = ROOT_INO;	  inode = inode_table;	  continue;	}// 已經(jīng)找到相應的i 節(jié)點,因此放棄臨時申請的空閑節(jié)點,返回該找到的i 節(jié)點。      if (empty)	iput (empty);      return inode;    }// 如果在i 節(jié)點表中沒有找到指定的i 節(jié)點,則利用前面申請的空閑i 節(jié)點在i 節(jié)點表中建立該節(jié)點。// 并從相應設備上讀取該i 節(jié)點信息。返回該i 節(jié)點。  if (!empty)    return (NULL);  inode = empty;  inode->i_dev = dev;  inode->i_num = nr;  read_inode (inode);  return inode;}//// 從設備上讀取指定i 節(jié)點的信息到內存中(緩沖區(qū)中)。static voidread_inode (struct m_inode *inode){  struct super_block *sb;  struct buffer_head *bh;  int block;// 首先鎖定該i 節(jié)點,取該節(jié)點所在設備的超級塊。  lock_inode (inode);  if (!(sb = get_super (inode->i_dev)))    panic ("trying to read inode without dev");// 該i 節(jié)點所在的邏輯塊號 = (啟動塊+超級塊) + i 節(jié)點位圖占用的塊數(shù) + 邏輯塊位圖占用的塊數(shù) +// (i 節(jié)點號-1)/每塊含有的i 節(jié)點數(shù)。  block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks +    (inode->i_num - 1) / INODES_PER_BLOCK;// 從設備上讀取該i 節(jié)點所在的邏輯塊,并將該inode 指針指向對應i 節(jié)點信息。  if (!(bh = bread (inode->i_dev, block)))    panic ("unable to read i-node block");  *(struct d_inode *) inode =    ((struct d_inode *) bh->b_data)[(inode->i_num - 1) % INODES_PER_BLOCK];// 最后釋放讀入的緩沖區(qū),并解鎖該i 節(jié)點。  brelse (bh);  unlock_inode (inode);}//// 將指定i 節(jié)點信息寫入設備(寫入緩沖區(qū)相應的緩沖塊中,待緩沖區(qū)刷新時會寫入盤中)。static voidwrite_inode (struct m_inode *inode){  struct super_block *sb;  struct buffer_head *bh;  int block;// 首先鎖定該i 節(jié)點,如果該i 節(jié)點沒有被修改過或者該i 節(jié)點的設備號等于零,則解鎖該i 節(jié)點,// 并退出。  lock_inode (inode);  if (!inode->i_dirt || !inode->i_dev)    {      unlock_inode (inode);      return;    }// 獲取該i 節(jié)點的超級塊。  if (!(sb = get_super (inode->i_dev)))    panic ("trying to write inode without device");// 該i 節(jié)點所在的邏輯塊號 = (啟動塊+超級塊) + i 節(jié)點位圖占用的塊數(shù) + 邏輯塊位圖占用的塊數(shù) +// (i 節(jié)點號-1)/每塊含有的i 節(jié)點數(shù)。  block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks +    (inode->i_num - 1) / INODES_PER_BLOCK;// 從設備上讀取該i 節(jié)點所在的邏輯塊。  if (!(bh = bread (inode->i_dev, block)))    panic ("unable to read i-node block");// 將該i 節(jié)點信息復制到邏輯塊對應該i 節(jié)點的項中。  ((struct d_inode *) bh->b_data)    [(inode->i_num - 1) % INODES_PER_BLOCK] = *(struct d_inode *) inode;// 置緩沖區(qū)已修改標志,而i 節(jié)點修改標志置零。然后釋放該含有i 節(jié)點的緩沖區(qū),并解鎖該i 節(jié)點。  bh->b_dirt = 1;  inode->i_dirt = 0;  brelse (bh);  unlock_inode (inode);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久人人做人人爰| 337p日本欧洲亚洲大胆精品 | 91精品中文字幕一区二区三区| 精品亚洲成a人| 亚洲日本成人在线观看| 91精品国产福利在线观看 | 一本一道波多野结衣一区二区| 日本欧美一区二区三区| 亚洲天堂成人在线观看| 欧美成人精品1314www| 一本大道久久a久久精品综合| 久久99精品久久久| 亚洲综合小说图片| 国产精品久久久久久久久快鸭 | 一区二区三区四区蜜桃| 久久女同互慰一区二区三区| 欧美日韩午夜在线| 91在线精品秘密一区二区| 麻豆成人免费电影| 亚洲国产aⅴ天堂久久| 综合色天天鬼久久鬼色| 久久一留热品黄| 在线综合+亚洲+欧美中文字幕| 91麻豆国产香蕉久久精品| 成人自拍视频在线观看| 精品中文av资源站在线观看| 日韩中文欧美在线| 亚洲成人av一区二区| 一区二区在线观看免费视频播放| 亚洲国产精品激情在线观看| 亚洲精品在线电影| 日韩免费性生活视频播放| 欧美日韩电影在线| 在线免费视频一区二区| 91老师国产黑色丝袜在线| 一本到高清视频免费精品| 国产酒店精品激情| 韩国三级在线一区| 国内精品伊人久久久久av一坑| 日本欧美一区二区| 奇米在线7777在线精品 | 国产99精品视频| 国产在线不卡视频| 国产麻豆视频一区| 国产精品亚洲人在线观看| 国产精品影视网| 国产激情精品久久久第一区二区 | 国产乱码精品一区二区三区av | 亚洲国产aⅴ天堂久久| 亚洲午夜一区二区| 五月天久久比比资源色| 婷婷开心久久网| 日本午夜一区二区| 国产美女精品人人做人人爽 | 97久久久精品综合88久久| 99久久伊人网影院| 97久久超碰国产精品电影| 97久久精品人人做人人爽| 色88888久久久久久影院按摩| 欧洲精品在线观看| 91精品在线观看入口| 日韩欧美自拍偷拍| 国产色综合久久| 亚洲免费观看高清完整版在线观看 | 欧美高清精品3d| 91精品国产综合久久久久久 | 色婷婷av一区二区三区软件| 欧美日韩国产小视频在线观看| 欧美片网站yy| 欧美α欧美αv大片| 国产情人综合久久777777| 自拍偷自拍亚洲精品播放| 亚洲国产婷婷综合在线精品| 美女高潮久久久| 成人精品一区二区三区中文字幕 | 久久久久国产成人精品亚洲午夜| 欧美激情一区二区三区蜜桃视频 | 国产成人精品影院| 欧洲精品一区二区三区在线观看| 日韩一区二区三区四区五区六区| 久久免费视频一区| 一区二区三区日韩精品| 捆绑变态av一区二区三区| jiyouzz国产精品久久| 777午夜精品免费视频| 国产亚洲欧美色| 亚洲国产精品麻豆| 国产一区二区免费看| 91亚洲精品久久久蜜桃| 日韩精品在线一区二区| 亚洲精品中文在线观看| 国内精品视频一区二区三区八戒| 日本二三区不卡| 久久日一线二线三线suv| 亚洲激情欧美激情| 国产乱码一区二区三区| 欧美久久久久久蜜桃| 国产精品国产三级国产aⅴ入口 | 日韩一区精品字幕| www.欧美精品一二区| 日韩一区二区三区视频| 亚洲丝袜自拍清纯另类| 激情五月婷婷综合| 欧美系列一区二区| 亚洲天堂福利av| 国产乱子轮精品视频| 在线播放中文一区| 亚洲欧美日韩国产另类专区| 国产激情视频一区二区在线观看| 欧美电影在哪看比较好| 亚洲同性同志一二三专区| 激情六月婷婷综合| 91精品国产91热久久久做人人 | xf在线a精品一区二区视频网站| 一区二区三区日韩精品| 99久久免费视频.com| 国产婷婷一区二区| 国内精品国产成人国产三级粉色 | 亚洲午夜精品17c| 国产乱子伦一区二区三区国色天香| 欧美另类一区二区三区| 一级女性全黄久久生活片免费| 国产精品一区二区三区乱码| 制服丝袜亚洲网站| 亚洲国产日韩一级| 91国偷自产一区二区三区成为亚洲经典| 久久影院午夜论| 经典三级视频一区| 日韩欧美久久一区| 日韩电影免费在线观看网站| 色婷婷av一区二区三区之一色屋| 国产精品日日摸夜夜摸av| 国产一区二三区| 日韩欧美国产精品| 蜜桃视频第一区免费观看| 欧美日韩免费一区二区三区视频| 一区二区高清在线| 欧美系列日韩一区| 视频一区国产视频| 正在播放亚洲一区| 美女视频黄 久久| 日韩欧美第一区| 精品一区二区三区久久| 亚洲精品一区二区三区影院| 国产一区二区三区在线看麻豆| 精品国产乱码久久久久久1区2区| 久久国产视频网| 久久久国产午夜精品| 成人午夜私人影院| 国产精品久久综合| 色哟哟一区二区| 亚洲成在人线免费| 日韩一级大片在线观看| 韩国理伦片一区二区三区在线播放| 久久蜜桃一区二区| 成人av先锋影音| 亚洲精品免费播放| 欧美日韩国产美女| 精品一区二区三区久久久| 中文字幕av资源一区| 色婷婷综合久色| 午夜精品福利在线| 精品国产一二三| 成人av第一页| 亚洲国产精品久久艾草纯爱 | 欧美一区二区三区在线看| 久99久精品视频免费观看| 久久网站热最新地址| 成人高清免费观看| 亚洲成a人v欧美综合天堂下载| 日韩一区二区在线播放| 国产99久久久久久免费看农村| 亚洲人吸女人奶水| 欧美一区日韩一区| 成人午夜视频福利| 亚洲成人资源网| 久久久九九九九| 欧美亚一区二区| 狠狠色丁香婷婷综合| 日韩毛片精品高清免费| 91精品久久久久久久91蜜桃| 国产乱子伦一区二区三区国色天香 | 色成年激情久久综合| 免费看日韩a级影片| 中文字幕一区二区三区四区| 欧美日韩国产天堂| 处破女av一区二区| 日韩国产欧美在线视频| 国产精品天天看| 欧美一区二区三区在线观看| caoporen国产精品视频| 日韩精品一二区| 亚洲欧美成人一区二区三区| 欧美tickle裸体挠脚心vk| 日韩欧美国产电影| 日本精品一级二级| 国产黄色精品网站| 日韩激情av在线| 亚洲精品日韩综合观看成人91| 久久综合久久综合九色|