Hi Sage, Today's linux-next merge of the ceph tree got a conflict in fs/ceph/super.c between commit 3c5184ef1216 ("ceph: d_alloc_root() may fail") from Linus' tree and commit 26d913cdd955 ("ceph: always initialize the dentry in open_root_dentry()") from the ceph tree. I fixed it up (see below) and can carry the fix as necessary. -- Cheers, Stephen Rothwell sfr@xxxxxxxxxxxxxxxx diff --cc fs/ceph/super.c index 48f61a1,ec74313..0000000 --- a/fs/ceph/super.c +++ b/fs/ceph/super.c @@@ -636,21 -636,14 +636,21 @@@ static struct dentry *open_root_dentry( req->r_num_caps = 2; err = ceph_mdsc_do_request(mdsc, NULL, req); if (err == 0) { + struct inode *inode = req->r_target_inode; + req->r_target_inode = NULL; dout("open_root_inode success\n"); - if (ceph_ino(req->r_target_inode) == CEPH_INO_ROOT && - fsc->sb->s_root == NULL) - root = d_alloc_root(req->r_target_inode); - else - root = d_obtain_alias(req->r_target_inode); + if (ceph_ino(inode) == CEPH_INO_ROOT && + fsc->sb->s_root == NULL) { + root = d_alloc_root(inode); + if (!root) { + iput(inode); + root = ERR_PTR(-ENOMEM); + goto out; + } - ceph_init_dentry(root); + } else { + root = d_obtain_alias(inode); + } + ceph_init_dentry(root); - req->r_target_inode = NULL; dout("open_root_inode success, root dentry is %p\n", root); } else { root = ERR_PTR(err);
Attachment:
pgpYrzefJyuXt.pgp
Description: PGP signature