Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 774ac21d authored by Sage Weil's avatar Sage Weil
Browse files

ceph: initialize root dentry



Set up d_fsdata on the root dentry.  This fixes a NULL pointer dereference
in ceph_d_prune on umount.  It also means we can eventually strip out all
of the conditional checks on d_fsdata because it is now set unconditionally
(prior to setting up the d_ops).

Fix the ceph_d_prune debug print while we're here.

Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent 15a2015f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1143,7 +1143,7 @@ static void ceph_d_prune(struct dentry *dentry)
{
	struct ceph_dentry_info *di;

	dout("d_release %p\n", dentry);
	dout("ceph_d_prune %p\n", dentry);

	/* do we have a valid parent? */
	if (!dentry->d_parent || IS_ROOT(dentry))
+4 −2
Original line number Diff line number Diff line
@@ -638,10 +638,12 @@ static struct dentry *open_root_dentry(struct ceph_fs_client *fsc,
	if (err == 0) {
		dout("open_root_inode success\n");
		if (ceph_ino(req->r_target_inode) == CEPH_INO_ROOT &&
		    fsc->sb->s_root == NULL)
		    fsc->sb->s_root == NULL) {
			root = d_alloc_root(req->r_target_inode);
		else
			ceph_init_dentry(root);
		} else {
			root = d_obtain_alias(req->r_target_inode);
		}
		req->r_target_inode = NULL;
		dout("open_root_inode success, root dentry is %p\n", root);
	} else {