2015-09-07 1 views
1

Ниже приводится выдержка из ядра Linux:Почему идентификатор потока posix может быть NULL в функции ядра Linux filp_close?

/* 
* "id" is the POSIX thread ID. We use the 
* files pointer for this.. 
*/ 
int filp_close(struct file *filp, fl_owner_t id) 

В документации сказано id является POSIX идентификатор потока, и это должно быть current->files.

Однако, я нашел много обычаев в ядре Linux, например. acct_on, использовать его в качестве filp_close(filp, NULL)

Мои вопросы:

Почему NULL приемлемо при вызове filp_close?

Какова цель аргумента id?

ответ

1

В соответствии с этим discussion, формальное описание fl_owner_t будет

A generic "file lock owner" value. This is set differently for different 
types of locks. 

The POSIX file lock owner is determined by the "struct files_struct" in the 
thread group. 

Flock (BSD) locks, OFD locks and leases set the fl_owner to the 
file description pointer. 

но на самом деле это является непрозрачным указателем

legacy typedef, should eventually go away 

, который относится к обработке дескриптора файла таблицы (struct files_struct).

Что касается filp_close функция, только fs/file.c источник использует не-NULL id параметр. Все остальные пользователи создают filp руками (используя filp_open или file_open_name) и проходят id как NULL.