linux-2.6.33/fget_light()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#u41288d2]
#backlinks
*説明 [#v65b8885]
-パス: [[linux-2.6.33/fs/file_table.c]]
-ファイルディスクリプタからファイル構造体を得る。
--FIXME: 説明
--fput_light() と対にして使う。
--[[linux-2.6.33/fput_light()]]
**引数 [#h1687e98]
-unsigned int fd
--ファイルディスクリプタ
-int *fput_needed
--fput を発行する必要があるか否か、が返ってくる
**返り値 [#wd511462]
-struct file *
--ファイル
**参考 [#n4c6f5b5]
*実装 [#vcd6d128]
/*
* Lightweight file lookup - no refcnt increment if fd t...
* You can use this only if it is guranteed that the cur...
* holds a refcnt to that file. That check has to be don...
* and a flag is returned to be passed to the correspond...
* There must not be a cloning between an fget_light/fpu...
*/
struct file *fget_light(unsigned int fd, int *fput_needed)
{
struct file *file;
-ファイル
--[[linux-2.6.33/file]]
struct files_struct *files = current->files;
-
--[[linux-2.6.33/files_struct]]
*fput_needed = 0;
if (likely((atomic_read(&files->count) == 1))) {
-現在開いているファイルのテーブルの利用数が、
1だった(=つまり自分しか利用していない)場合。
-多くの場合、こちらに来ることを期待している。
--[[linux-2.6.33/likely()]]
--[[linux-2.6.33/atomic_read()]]
file = fcheck_files(files, fd);
-
--[[linux-2.6.33/fcheck_files()]]
} else {
rcu_read_lock();
-
--[[linux-2.6.33/rcu_read_lock()]]
file = fcheck_files(files, fd);
-
--[[linux-2.6.33/fcheck_files()]]
if (file) {
if (atomic_long_inc_not_zero(&file->f_count))
*fput_needed = 1;
else
/* Didn't get the reference, someone's freed */
file = NULL;
-
--[[linux-2.6.33/atomic_long_inc_not_zero()]]
}
rcu_read_unlock();
-
--[[linux-2.6.33/rcu_read_unlock()]]
}
return file;
}
*コメント [#s720c8b8]
終了行:
*参照元 [#u41288d2]
#backlinks
*説明 [#v65b8885]
-パス: [[linux-2.6.33/fs/file_table.c]]
-ファイルディスクリプタからファイル構造体を得る。
--FIXME: 説明
--fput_light() と対にして使う。
--[[linux-2.6.33/fput_light()]]
**引数 [#h1687e98]
-unsigned int fd
--ファイルディスクリプタ
-int *fput_needed
--fput を発行する必要があるか否か、が返ってくる
**返り値 [#wd511462]
-struct file *
--ファイル
**参考 [#n4c6f5b5]
*実装 [#vcd6d128]
/*
* Lightweight file lookup - no refcnt increment if fd t...
* You can use this only if it is guranteed that the cur...
* holds a refcnt to that file. That check has to be don...
* and a flag is returned to be passed to the correspond...
* There must not be a cloning between an fget_light/fpu...
*/
struct file *fget_light(unsigned int fd, int *fput_needed)
{
struct file *file;
-ファイル
--[[linux-2.6.33/file]]
struct files_struct *files = current->files;
-
--[[linux-2.6.33/files_struct]]
*fput_needed = 0;
if (likely((atomic_read(&files->count) == 1))) {
-現在開いているファイルのテーブルの利用数が、
1だった(=つまり自分しか利用していない)場合。
-多くの場合、こちらに来ることを期待している。
--[[linux-2.6.33/likely()]]
--[[linux-2.6.33/atomic_read()]]
file = fcheck_files(files, fd);
-
--[[linux-2.6.33/fcheck_files()]]
} else {
rcu_read_lock();
-
--[[linux-2.6.33/rcu_read_lock()]]
file = fcheck_files(files, fd);
-
--[[linux-2.6.33/fcheck_files()]]
if (file) {
if (atomic_long_inc_not_zero(&file->f_count))
*fput_needed = 1;
else
/* Didn't get the reference, someone's freed */
file = NULL;
-
--[[linux-2.6.33/atomic_long_inc_not_zero()]]
}
rcu_read_unlock();
-
--[[linux-2.6.33/rcu_read_unlock()]]
}
return file;
}
*コメント [#s720c8b8]
ページ名: