LINUX: Sometimes let dentry_open handle refcounts
authorAndrew Deason <adeason@sinenomine.net>
Wed, 17 Apr 2013 23:04:58 +0000 (18:04 -0500)
committerDerrick Brashear <shadow@your-file-system.com>
Sat, 20 Apr 2013 15:24:23 +0000 (08:24 -0700)
commite31240732cbe449fedea5095037ac08d1d513fa9
tree318c8f7c642ea86a5a4d76c76587b65347798dc8
parenta373f0b7461158c8f17bad9a5d0511d67c765a0a
LINUX: Sometimes let dentry_open handle refcounts

When Linux changed dentry_open to use a 'path' argument, they also
changed it so dentry_open handles incrementing the relevant ref
counts. So now, sometimes we need to inc the dentry and vfsmount
refcounts ourselves, and sometimes we need to leave them alone.

To accommodate this, change afs_dentry_open to also handle refcounting
itself, and 'get' the given dentry and vfsmount if necessary.

Also note that currently, afs_linux_raw_open can call afs_dentry_open
twice in the case of an error, but it does not dget(dp). This means
that dp could be undercounted, since dentry_open on older kernels will
dec the refcount on the given dentry in the case of an error. This
change should also fix this so dp is not undercounted in that case.

FIXES 131613

Change-Id: I0e9deb7ce57633ff65b76d2444a0416ecbe329fd
Reviewed-on: http://gerrit.openafs.org/9801
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
Reviewed-by: Marc Dionne <marc.c.dionne@gmail.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
src/afs/LINUX/osi_compat.h
src/afs/LINUX/osi_file.c