|
|
||
|
|
グループについてLinux kernel のソースコードメモです カーネルの関数・構造体のソースを読んだ時は、忘れずにコピペ。関数名・構造体名をキーワードにする。 何も説明を書かなくてもキーワードは作成する。 定義されているファイルのパスもコピペ。 ファイルパスに対応するキーワードが無ければ先に作成しておく。内容は空欄でも良い。理想は関数・構造体の列挙。 そうすることによって自動で集約されていく。 参考は読学のススメ。 ただしこのグループの場合はctagsのようにコードを追えることを優先している。 注意点:Debian3.1 の kernel2.6.8-3-686 を元に読んでいて、現在(20080326)id:n314 の環境はDebian4.0(etch)の kernel-2.6.18-6-686 を元に読んでいる。環境依存があるかもしれない。気付いたところから最新情報に更新していくのでバージョンが混ざっている。 vfs_createfs/namei.c ファイルシステムの i_op->create を呼び出して dentry に対応する i-node を作成する。 int vfs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd) { int er... open_nameifs/namei.c pathname から struct nameidata を設定する。 /* * open_namei() * * namei for open - this is in fact almost the whole open-routine. * * Note that the low bits of "flag" aren't the same as in the open * system call - ... sys_openfs/open.c open()システムコールによって呼び出される asmlinkage long sys_open(const char __user * filename, int flags, int mode) { char * tmp; int fd, error; #if BITS_PER_LONG != 32 flags |= O_LARGEFILE; ... struct open_intentinclude/linux/namei.h open_namei()で利用するためのデータ。 struct open_intent { int flags; オープン時のフラグ int create_mode; ファイル作成時のモード struct file *file; ... struct address_space_operationsinclude/linux/fs.h ページキャッシュ操作関数群。 struct address_space_operations { int (*writepage)(struct page *page, struct writeback_control *wbc); ページキャッシュの書き込みを行う関数 ... block_prepare_writefs/buffer.c 標準のa_ops->prepare_write。 解説はこちらを見ると分かり易い。 http://wiki.bit-hive.com/linuxkernelmemo/pg/block_prepare_write() int block_prepare_write(struct page *page, unsigned from, unsigned to, ... __generic_file_write_nolockmm/filemap.c struct kiocbを初期化して内部非同期書き込み関数を呼び出す。 static ssize_t __generic_file_write_nolock(struct file *file, const struct iovec *iov, unsigned long nr_segs, loff_t ... __generic_file_aio_write_nolockmm/filemap.c ページキャッシュへの書き込み関数。 エラーチェックを行いgeneric_file_buffered_write()を呼び出す。 static ssize_t __generic_file_aio_write_nolock(struct kiocb *iocb, const struct iovec *iov, ... generic_file_buffered_writemm/filemap.c ページキャッシュへの書き込み関数本体。 struct address_space_operationsのページキャッシュ書き込み関数を呼び出す。 ssize_t generic_file_buffered_write(struct kiocb *iocb, const struct iovec ... |