]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
fs/file_table.c:fput(): add comment
authorAndrew Morton <akpm@linux-foundation.org>
Thu, 27 Jun 2013 23:51:14 +0000 (09:51 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Fri, 28 Jun 2013 06:37:22 +0000 (16:37 +1000)
A missed update to "fput: task_work_add() can fail if the caller has
passed exit_task_work()".

Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andrey Vagin <avagin@openvz.org>
Cc: David Howells <dhowells@redhat.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/file_table.c

index 08e719b884ca31320bbcded23f6963ae0268779d..b9a77ad08b4d305c149a7d891b4a95d0e3538bff 100644 (file)
@@ -313,6 +313,12 @@ void fput(struct file *file)
                        init_task_work(&file->f_u.fu_rcuhead, ____fput);
                        if (!task_work_add(task, &file->f_u.fu_rcuhead, true))
                                return;
+                       /*
+                        * After this task has run exit_task_work(),
+                        * task_work_add() will fail.  free_ipc_ns()->
+                        * shm_destroy() can do this.  Fall through to delayed
+                        * fput to avoid leaking *file.
+                        */
                }
                spin_lock_irqsave(&delayed_fput_lock, flags);
                list_add(&file->f_u.fu_list, &delayed_fput_list);