トップページ

Linux 日記
  Linux日記08~
  Linux日記2006
  Linux日記2005
  Linux日記2004
  Linux日記2003
  Linux日記2002
  Linuxカーネル
   メモ
    ext3 メモ
    quota メモ
    OV511 メモ
  + 勉強会 ... (6p)

アートでいこう(笑)!
  イラスト日記08〜
  イラスト日記2005
  イラスト日記2004
  イラスト日記2003
  アイコン描こうぜ

UCC(梅丘自転車部)
  活動ログ2003
  活動ログ2001
  活動ログ2000
  その他
  ワシの愛車

自動車関連
  FD3S日記05~
  S202日記2004
  S202日記2003
  S202日記2002
  S202給油等記録
  S202掲示板 (15hr)

自宅前カメラ
EZweb/PCSV用
プロフィール
社会科ノート 2004
社会科ノート 2003
全角半角変換
自家用リンク
視聴予定表
メモ

W/O index
ext3 メモ
[ カーネル側 ]

/usr/src/linux/fs/ext3/inode.c(0):

/usr/src/linux/fs/ext3/file.c(/ext3_file_inode_operations =/):
/usr/src/linux/fs/ext3/file.c(/ext3_file_operations =/):
  /usr/src/linux/fs/ext3/file.c(/ext3_file_write .*buf,/): 定義
  /usr/src/linux/fs/ext3/file.c(/will_journal_data =/):
    /usr/src/linux/include/linux/ext3_fs.h(/ext3_should_journal_data/):
     ext3_should_journal_data() 定義。この調子だと、大抵真だな
  /usr/src/linux/fs/ext3/file.c(/handle = ext3_journal_start/):
   ジャーナリングのハンドル
  /usr/src/linux/fs/ext3/file.c(/journal_get_write_access/):
  /usr/src/linux/fs/ext3/file.c(/journal_dirty_metadata/):
    /usr/src/linux/fs/jfs/transaction.c(/int journal_dirty_metadata/):
  データの書き出しループ
    ext3 のトランザクション限界を越えて、
      /usr/src/linux/fs/ext3/file.c(/if (journal_extend(handle, needed))/):
       ジャーナリングファイルの拡大に失敗したとき
        /usr/src/linux/fs/ext3/file.c(/ext3_mark_inode_dirty/):
         dirty マークをつけて、
        /usr/src/linux/fs/ext3/file.c(/ext3_journal_stop/): 一旦停止
        /usr/src/linux/fs/ext3/file.c(/handle = ext3_journal_start/handle = ext3_journal_start/):
         再スタート
    /usr/src/linux/fs/ext3/file.c(/bh = ext3_getblk/): ?

/usr/src/linux/fs/ext3/dir.c(/ext3_dir_inode_operations =/):
/usr/src/linux/fs/ext3/dir.c(/ext3_dir_operations =/):

write は重い。rename あたりから見たほうが、ジャーナリングそのものは
 わかりやすいはずだ。
/usr/src/linux/fs/ext3/namei.c(/ext3_rename/):
  /usr/src/linux/fs/ext3/namei.c(/ext3_rename/ext3_journal_start/):
   ジャーナル開始
  /usr/src/linux/fs/ext3/namei.c(/ext3_rename/journal_get_write_access(handle, old_bh)/):
   バッファへのジャーナル書きこみだ
  /usr/src/linux/fs/ext3/namei.c(/ext3_rename/urnal_get_write_access(handle, new_bh)/): 同上
  /usr/src/linux/fs/ext3/namei.c(/ext3_rename/ext3_delete_entry/): 古いの死ねっ
  /usr/src/linux/fs/ext3/namei.c(/ext3_rename/ext3_mark_inode_dirty(handle, old_dir)/):
   i-node を求めて、その bh に journal_dirty_metadata()
    /usr/src/linux/include/linux/ext3_jfs.h(/ext3_mark_inode_dirty/):
  /usr/src/linux/fs/ext3/namei.c(/ext3_rename/journal_dirty_metadata(handle, old_bh)/):
  /usr/src/linux/fs/ext3/namei.c(/ext3_rename/journal_dirty_metadata(handle, new_bh)/):
  /usr/src/linux/fs/ext3/namei.c(/ext3_rename/ext3_journal_stop/): ジャーナル終了
ようわからん。

ので、やっぱり unlink から見よう。
/usr/src/linux/fs/ext2/namei.c(/ext2_unlink/):
/usr/src/linux/fs/ext3/namei.c(/ext3_unlink/): struct inode * dir は、
 親ディレクトリ実体。struct dentry *dentry は、消去対象のファイル実体に
 リンクされた、ディレクトリエントリ
  /usr/src/linux/fs/ext3/namei.c(/ext3_unlink/ext3_journal_start/):
   ※ジャーナリングスタート
  /usr/src/linux/fs/ext3/namei.c(/ext3_unlink/ext3_find_entry (dir/):
   親ディレクトリのディレクトリエントリを取得
  /usr/src/linux/fs/ext3/namei.c(/ext3_unlink/ext3_delete_entry/):
   ※親ディレクトリのエントリを削除
  /usr/src/linux/fs/ext3/namei.c(/ext3_unlink/ext3_mark_inode_dirty(handle, dir)/):
   ※親ディレクトリの遅延書きこみを要求
  /usr/src/linux/fs/ext3/namei.c(/ext3_unlink/--/):
   削除対象の参照数を dec
  /usr/src/linux/fs/ext3/namei.c(/ext3_unlink/ext3_mark_inode_dirty(handle, inode)/):
   ※削除対象の遅延書きこみを要求
  /usr/src/linux/fs/ext3/namei.c(/ext3_unlink/ext3_journal_stop/):
   ※ジャーナリング終了
  
/usr/src/linux/include/linux/ext3_jfs.h(/ext3_journal_start/):
  
/usr/src/linux/include/linux/ext3_fs.h(0):

/usr/src/linux/include/linux/fs.h(0):

[ e2fsprogs 側 ]
/home/knaka/rpm/BUILD/e2fsprogs-1.20/lib/ext2fs/mkjournal.c(/ext2fs_add_journal_inode/):
 マウント中ならば .journal ファイルに、さもなければ EXT2_JOURNAL_INO を
 持つファイルにジャーナルファイルを作る
  /home/knaka/rpm/BUILD/e2fsprogs-1.20/include/linux/ext2_fs.h(/define EXT2_JOURNAL_INO/):
/home/knaka/rpm/BUILD/e2fsprogs-1.20/lib/ext2fs/block.c(/ext2fs_block_iterate2/):
 マウントされていなのであるから、i ノード指定でファイルに書くことも可能だ

操作対象のデータを「データ」と呼び、それに付随する情報を「メタデータ」と
呼ぶ。i ノードの持つデータも、メタデータの一種。
buffer head (BH) は、バッファ内のデータに対するメタデータと考えてよい?


- ご意見・ご要望は、サイト管理者(那賀樹一郎 (Kiichiro NAKA) <knaka@ayutaya.com>)までお願いします。
- このサイトは、Turbolinux 上の Mozilla w3m でテストされています。Internet Explorer では未確認です
- 言うまでもありませんが、当サイトはリンクフリーです
- W3C の HTML チェックをかけたところ、ズタボロでした。頑張ったけど、ダメだこりゃ……