ホームページ > 運用・保守 > Linuxの運用と保守 > Linuxのファイルシステムのtruncate.cソースコードの分析

Linuxのファイルシステムのtruncate.cソースコードの分析

WBOY
リリース: 2023-05-21 18:01:12
転載
1302 人が閲覧しました

Linux-0.11 ファイルシステム truncate.c の詳細説明

free_ind

static void free_ind(int dev,int block)
ログイン後にコピー

この関数の機能は、すべてのワンタイム間接ブロックを解放することです

この関数は、まず間接ブロックを bh に読み込み、512 個のディスク ブロック番号が bh ブロックに格納されます。

struct buffer_head * bh;
unsigned short * p;
int i;

if (!block)
    return;
if ((bh=bread(dev,block))) {
ログイン後にコピー

次に、512 個のディスク ブロック番号が調べられ、ディスク ブロック番号が 0 でない場合は、free_block (bitmap.c 内) を呼び出してディスク ブロックを解放します。トラバーサルが完了すると、間接ブロックの bh ブロック参照カウントが 1 減らされます。最後に、この 1 回限りの間接ブロックも解放されます。

for (i=0;i<512;i++,p++)
    if (*p)
        free_block(dev,*p);
brelse(bh);
free_block(dev,block);
ログイン後にコピー

free_dind

static void free_dind(int dev,int block)
ログイン後にコピー

この関数の機能は、すべての二次間接ブロックを解放することです

この関数は、最初にディスク ブロック番号の有効性を検証します。

struct buffer_head * bh;
unsigned short * p;
int i;

if (!block)
    return;
ログイン後にコピー

次に、セカンダリ間接ブロックを bh に読み取ります。bh ブロックには、512 個のプライマリ間接ブロックのディスク ブロック番号が格納されます。

次に、512 個のワンタイム間接ブロックのディスク ブロック番号が調べられます。ディスク ブロック番号が 0 でない場合は、free_ind を呼び出して、ワンタイム間接ブロックのすべてのブロックを解放します。間接ブロック。トラバーサルが完了すると、2 次間接ブロックの bh ブロック参照カウントが 1 減らされます。最後に、この 2 次間接ブロックも解放されます。

if ((bh=bread(dev,block))) {
    p = (unsigned short *) bh->b_data;
    for (i=0;i<512;i++,p++)
        if (*p)
            free_ind(dev,*p);
    brelse(bh);
}
free_block(dev,block);
ログイン後にコピー

truncate

void truncate(struct m_inode * inode)
ログイン後にコピー

この関数の機能は、inode が占有しているディスク領域を解放することです。ファイルリンク数が0の場合、iput関数(inode.c)がこの関数を呼び出します。

コードは最初に、通常のファイルまたはディレクトリ ファイルでないかどうかをチェックし、スキップします。

int i;

if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)))
    return;
ログイン後にコピー

直接参照されているブロックを解放します。

for (i=0;i<7;i++)
    if (inode->i_zone[i]) {
        free_block(inode->i_dev,inode->i_zone[i]);
        inode->i_zone[i]=0;
    }
ログイン後にコピー

プライマリ間接ブロックとセカンダリ間接ブロックを解放します。

free_ind(inode->i_dev,inode->i_zone[7]);
free_dind(inode->i_dev,inode->i_zone[8]);
ログイン後にコピー

プライマリ間接ブロックとセカンダリ間接ブロックのアドレスを 0 に設定します。 i ノードのサイズを 0 に設定し、ダーティ データを含むように i ノードを設定し、最後に i ノードの変更時刻と作成時刻を現在時刻に変更します。

rree

以上がLinuxのファイルシステムのtruncate.cソースコードの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート