[PATCH] files: files struct with RCU
Patch to eliminate struct files_struct.file_lock spinlock on the reader side and use rcu refcounting rcuref_xxx api for the f_count refcounter. The updates to the fdtable are done by allocating a new fdtable structure and setting files->fdt to point to the new structure. The fdtable structure is protected by RCU thereby allowing lock-free lookup. For fd arrays/sets that are vmalloced, we use keventd to free them since RCU callbacks can't sleep. A global list of fdtable to be freed is not scalable, so we use a per-cpu list. If keventd is already handling the current cpu's work, we use a timer to defer queueing of that work. Since the last publication, this patch has been re-written to avoid using explicit memory barriers and use rcu_assign_pointer(), rcu_dereference() premitives instead. This required that the fd information is kept in a separate structure (fdtable) and updated atomically. Signed-off-by:Dipankar Sarma <dipankar@in.ibm.com> Signed-off-by:
Andrew Morton <akpm@osdl.org> Signed-off-by:
Linus Torvalds <torvalds@osdl.org>
Showing
- fs/aio.c 2 additions, 1 deletionfs/aio.c
- fs/fcntl.c 10 additions, 3 deletionsfs/fcntl.c
- fs/file.c 258 additions, 131 deletionsfs/file.c
- fs/file_table.c 29 additions, 11 deletionsfs/file_table.c
- fs/open.c 4 additions, 4 deletionsfs/open.c
- include/linux/file.h 9 additions, 2 deletionsinclude/linux/file.h
- include/linux/fs.h 3 additions, 1 deletioninclude/linux/fs.h
- include/linux/init_task.h 5 additions, 0 deletionsinclude/linux/init_task.h
- kernel/exit.c 8 additions, 7 deletionskernel/exit.c
- kernel/fork.c 17 additions, 6 deletionskernel/fork.c
Loading
Please register or sign in to comment