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

convert rpc_pipefs

Just use d_make_persistent() + dput() (and fold the latter into
simple_finish_creating()) and that's it...

NOTE: pipe->dentry is a borrowed reference - it does not contribute
to dentry refcount.

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

Al Viro 946e2256 2a3d4047

+12 -15
+12 -15
net/sunrpc/rpc_pipe.c
··· 536 536 537 537 inode = rpc_get_inode(dir->i_sb, S_IFREG | mode); 538 538 if (unlikely(!inode)) { 539 - dput(dentry); 540 - inode_unlock(dir); 539 + simple_done_creating(dentry); 541 540 return -ENOMEM; 542 541 } 543 542 inode->i_ino = iunique(dir->i_sb, 100); 544 543 if (i_fop) 545 544 inode->i_fop = i_fop; 546 545 rpc_inode_setowner(inode, private); 547 - d_instantiate(dentry, inode); 546 + d_make_persistent(dentry, inode); 548 547 fsnotify_create(dir, dentry); 549 - inode_unlock(dir); 548 + simple_done_creating(dentry); 550 549 return 0; 551 550 } 552 551 ··· 562 563 563 564 inode = rpc_get_inode(dir->i_sb, S_IFDIR | mode); 564 565 if (unlikely(!inode)) { 565 - dput(dentry); 566 - inode_unlock(dir); 566 + simple_done_creating(dentry); 567 567 return ERR_PTR(-ENOMEM); 568 568 } 569 569 570 570 inode->i_ino = iunique(dir->i_sb, 100); 571 571 inc_nlink(dir); 572 - d_instantiate(dentry, inode); 572 + d_make_persistent(dentry, inode); 573 573 fsnotify_mkdir(dir, dentry); 574 - inode_unlock(dir); 574 + simple_done_creating(dentry); 575 575 576 - return dentry; 576 + return dentry; // borrowed 577 577 } 578 578 579 579 static int rpc_populate(struct dentry *parent, ··· 655 657 656 658 inode = rpc_get_inode(dir->i_sb, umode); 657 659 if (unlikely(!inode)) { 658 - dput(dentry); 659 - inode_unlock(dir); 660 + simple_done_creating(dentry); 660 661 err = -ENOMEM; 661 662 goto failed; 662 663 } ··· 665 668 rpci->private = private; 666 669 rpci->pipe = pipe; 667 670 rpc_inode_setowner(inode, private); 668 - d_instantiate(dentry, inode); 669 - pipe->dentry = dentry; 671 + pipe->dentry = dentry; // borrowed 672 + d_make_persistent(dentry, inode); 670 673 fsnotify_create(dir, dentry); 671 - inode_unlock(dir); 674 + simple_done_creating(dentry); 672 675 return 0; 673 676 674 677 failed: ··· 1203 1206 sb); 1204 1207 mutex_unlock(&sn->pipefs_sb_lock); 1205 1208 out: 1206 - kill_litter_super(sb); 1209 + kill_anon_super(sb); 1207 1210 put_net(net); 1208 1211 } 1209 1212