Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

hostfs_lookup: switch to d_splice_alias()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro 50f30740 ce397d21

+9 -21
+9 -21
fs/hostfs/hostfs_kern.c
··· 610 610 int err; 611 611 612 612 inode = hostfs_iget(ino->i_sb); 613 - if (IS_ERR(inode)) { 614 - err = PTR_ERR(inode); 613 + if (IS_ERR(inode)) 615 614 goto out; 616 - } 617 615 618 616 err = -ENOMEM; 619 617 name = dentry_name(dentry); 620 - if (name == NULL) 621 - goto out_put; 622 - 623 - err = read_name(inode, name); 624 - 625 - __putname(name); 626 - if (err == -ENOENT) { 627 - iput(inode); 628 - inode = NULL; 618 + if (name) { 619 + err = read_name(inode, name); 620 + __putname(name); 629 621 } 630 - else if (err) 631 - goto out_put; 632 - 633 - d_add(dentry, inode); 634 - return NULL; 635 - 636 - out_put: 637 - iput(inode); 622 + if (err) { 623 + iput(inode); 624 + inode = (err == -ENOENT) ? NULL : ERR_PTR(err); 625 + } 638 626 out: 639 - return ERR_PTR(err); 627 + return d_splice_alias(inode, dentry); 640 628 } 641 629 642 630 static int hostfs_link(struct dentry *to, struct inode *ino,