Messages in this thread | | | Subject | Re: fs_struct refcounting: spinlock vs atomic | From | Enrico Weigelt <> | Date | Thu, 15 Feb 2018 14:46:19 +0100 |
| |
On 15.02.2018 10:14, Richard Weinberger wrote: > On Wed, Feb 14, 2018 at 10:13 PM, Enrico Weigelt <lkml@metux.net> wrote: >> Hi folks, >> >> >> in fork.c, a spinlock is held for fs_struct refcounting, while other >> places - eg. switch_task_namespaces uses atomic_dec_and_test() on >> the nsproxy. >> >> What's the exact difference here ? Could the atomic counting also used >> for fs_struct ? > > Well, the spinlock protects more than just the counter. So atomic won't do it.
Okay. Is that needed in that case ?
See unshare() syscall:
if (new_fs) { fs = current->fs; spin_lock(&fs->lock); current->fs = new_fs; if (--fs->users) new_fs = NULL; else new_fs = fs; spin_unlock(&fs->lock); }
Seems to me, that we're just refcounting here, and once it went dont to zero, nobody else can access it anymore.
--mtx
-- Enrico Weigelt, metux IT consult Free software and Linux embedded engineering info@metux.net -- +49-151-27565287
| |