ceph: fix null pointer deref on anon root dentry release
authorSage Weil <sage@newdream.net>
Thu, 26 Aug 2010 23:12:01 +0000 (16:12 -0700)
committerSage Weil <sage@newdream.net>
Sat, 11 Sep 2010 17:52:47 +0000 (10:52 -0700)
commitca04d9c3ec721e474f00992efc1b1afb625507f5
tree9dfe95fe2a08ff008888a754db10f31ac04fbea4
parent2bfc96a127bc1cc94d26bfaa40159966064f9c8c
ceph: fix null pointer deref on anon root dentry release

When we release a root dentry, particularly after a splice, the parent
(actually our) inode was evaluating to NULL and was getting dereferenced
by ceph_snap().  This is reproduced by something as simple as

 mount -t ceph monhost:/a/b mnt
 mount -t ceph monhost:/a mnt2
 ls mnt2

A splice_dentry() would kill the old 'b' inode's root dentry, and we'd
crash while releasing it.

Fix by checking for both the ROOT and NULL cases explicitly.  We only need
to invalidate the parent dir when we have a correct parent to invalidate.

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/dir.c