On Mon, Aug 27, 2007 at 01:10:56PM -0500, Dean Nelson wrote: > > Does it? Well, then open the file in question and start doing close(dup(fd)) > > in a loop. Won't take long for an oops... > > Actually it won't oops. And that's because when the file is opened, > xpmem_open() creates a structure for that thread group, and when > xpmem_flush() is called on the close() it first looks for that structure > and if it finds it then it does what it needs to do (which includes the > put_task_struct() call) and then finishes off by destroying the structure. > So for subsequent closes xpmem_flush() returns without calling > put_task_struct(). Your refcounting is totally broken. fds can be passed around in the same process group (which btw is not something driver should look at because there are variants of different kinds of process groups depending on clone flags), and your driver is going boom in most of the case. We don't export the routines to acquire reference to task structs for a reason, and this piece of junk called xpmem is not going to change it. - To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |