static void delayed_fput(struct work_struct *unused) { LIST_HEAD(head); spin_lock_irq(&delayed_fput_lock); list_splice_init(&delayed_fput_list, &head); spin_unlock_irq(&delayed_fput_lock); while (!list_empty(&head)) { struct file *f = list_first_entry(&head, struct file, f_u.fu_list); list_del_init(&f->f_u.fu_list); __fput(f); } }
void fput(struct file *file) { if (atomic_long_dec_and_test(&file->f_count)) __fput(file); }