diff options
author | Alexander Viro <aviro@redhat.com> | 2006-01-14 23:29:55 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-14 23:38:17 +0300 |
commit | 7c7dce9209161eb260cdf9e9172f72c3a02379e6 (patch) | |
tree | 81135190b6aadfc9126dcbff63710cd97fe5b6a1 /fs/char_dev.c | |
parent | 12dbf3fc4d06d2c0c4c44dc0612df04248b3cfd3 (diff) | |
download | linux-7c7dce9209161eb260cdf9e9172f72c3a02379e6.tar.xz |
[PATCH] Fix double decrement of mqueue_mnt->mnt_count in sys_mq_open
Fixed the refcounting on failure exits in sys_mq_open() and
cleaned the logics up. Rules are actually pretty simple - dentry_open()
expects vfsmount and dentry to be pinned down and it either transfers
them into created struct file or drops them. Old code had been very
confused in that area - if dentry_open() had failed either in do_open()
or do_create(), we ended up dentry and mqueue_mnt dropped twice, once
by dentry_open() cleanup and then by sys_mq_open().
Fix consists of making the rules for do_create() and do_open()
same as for dentry_open() and updating the sys_mq_open() accordingly;
that actually leads to more straightforward code and less work on
normal path.
Signed-off-by: Al Viro <aviro@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/char_dev.c')
0 files changed, 0 insertions, 0 deletions