'Why can the posix thread id be NULL in Linux kernel function filp_close?

Below is excerpted from linux kernel:

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

The documentation says id is the posix thread id, and it should be current->files.

However, I found many usages in Linux kernel, e.g. acct_on, use it as filp_close(filp, NULL)

My questions are:

Why is NULL acceptable when calling filp_close?

What is the intent of the argument id?



Solution 1:[1]

According to this discussion, formal description of fl_owner_t would be

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. 

but actually this is opaque pointer

legacy typedef, should eventually go away

which refers to process file descriptor table (struct files_struct).

As for filp_close function, only fs/file.c source uses non-NULL id parameter. All other users create filp by hands (using filp_open or file_open_name) and pass id as NULL.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1