summaryrefslogtreecommitdiffstats
path: root/net/sunrpc/cache.c
diff options
context:
space:
mode:
authorKinglong Mee <kinglongmee@gmail.com>2017-02-07 08:47:16 -0500
committerAnna Schumaker <Anna.Schumaker@Netapp.com>2017-02-08 17:02:45 -0500
commit863d7d9c2e0cbbde6cd15f87c4431dd806f2d917 (patch)
treec99169539a6a1c92201ebd0bec23c9d6cee2e270 /net/sunrpc/cache.c
parent2864486bd0fdd14431058650c91fcb9fba605d43 (diff)
sunrpc/nfs: cleanup procfs/pipefs entry in cache_detail
Record flush/channel/content entries is useless, remove them. Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'net/sunrpc/cache.c')
-rw-r--r--net/sunrpc/cache.c49
1 files changed, 17 insertions, 32 deletions
diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
index 8147e8d56eb2..688ef8cbac62 100644
--- a/net/sunrpc/cache.c
+++ b/net/sunrpc/cache.c
@@ -1600,21 +1600,12 @@ static const struct file_operations cache_flush_operations_procfs = {
1600 .llseek = no_llseek, 1600 .llseek = no_llseek,
1601}; 1601};
1602 1602
1603static void remove_cache_proc_entries(struct cache_detail *cd, struct net *net) 1603static void remove_cache_proc_entries(struct cache_detail *cd)
1604{ 1604{
1605 struct sunrpc_net *sn; 1605 if (cd->procfs) {
1606 1606 proc_remove(cd->procfs);
1607 if (cd->u.procfs.proc_ent == NULL) 1607 cd->procfs = NULL;
1608 return; 1608 }
1609 if (cd->u.procfs.flush_ent)
1610 remove_proc_entry("flush", cd->u.procfs.proc_ent);
1611 if (cd->u.procfs.channel_ent)
1612 remove_proc_entry("channel", cd->u.procfs.proc_ent);
1613 if (cd->u.procfs.content_ent)
1614 remove_proc_entry("content", cd->u.procfs.proc_ent);
1615 cd->u.procfs.proc_ent = NULL;
1616 sn = net_generic(net, sunrpc_net_id);
1617 remove_proc_entry(cd->name, sn->proc_net_rpc);
1618} 1609}
1619 1610
1620#ifdef CONFIG_PROC_FS 1611#ifdef CONFIG_PROC_FS
@@ -1624,38 +1615,30 @@ static int create_cache_proc_entries(struct cache_detail *cd, struct net *net)
1624 struct sunrpc_net *sn; 1615 struct sunrpc_net *sn;
1625 1616
1626 sn = net_generic(net, sunrpc_net_id); 1617 sn = net_generic(net, sunrpc_net_id);
1627 cd->u.procfs.proc_ent = proc_mkdir(cd->name, sn->proc_net_rpc); 1618 cd->procfs = proc_mkdir(cd->name, sn->proc_net_rpc);
1628 if (cd->u.procfs.proc_ent == NULL) 1619 if (cd->procfs == NULL)
1629 goto out_nomem; 1620 goto out_nomem;
1630 cd->u.procfs.channel_ent = NULL;
1631 cd->u.procfs.content_ent = NULL;
1632 1621
1633 p = proc_create_data("flush", S_IFREG|S_IRUSR|S_IWUSR, 1622 p = proc_create_data("flush", S_IFREG|S_IRUSR|S_IWUSR,
1634 cd->u.procfs.proc_ent, 1623 cd->procfs, &cache_flush_operations_procfs, cd);
1635 &cache_flush_operations_procfs, cd);
1636 cd->u.procfs.flush_ent = p;
1637 if (p == NULL) 1624 if (p == NULL)
1638 goto out_nomem; 1625 goto out_nomem;
1639 1626
1640 if (cd->cache_request || cd->cache_parse) { 1627 if (cd->cache_request || cd->cache_parse) {
1641 p = proc_create_data("channel", S_IFREG|S_IRUSR|S_IWUSR, 1628 p = proc_create_data("channel", S_IFREG|S_IRUSR|S_IWUSR,
1642 cd->u.procfs.proc_ent, 1629 cd->procfs, &cache_file_operations_procfs, cd);
1643 &cache_file_operations_procfs, cd);
1644 cd->u.procfs.channel_ent = p;
1645 if (p == NULL) 1630 if (p == NULL)
1646 goto out_nomem; 1631 goto out_nomem;
1647 } 1632 }
1648 if (cd->cache_show) { 1633 if (cd->cache_show) {
1649 p = proc_create_data("content", S_IFREG|S_IRUSR, 1634 p = proc_create_data("content", S_IFREG|S_IRUSR,
1650 cd->u.procfs.proc_ent, 1635 cd->procfs, &content_file_operations_procfs, cd);
1651 &content_file_operations_procfs, cd);
1652 cd->u.procfs.content_ent = p;
1653 if (p == NULL) 1636 if (p == NULL)
1654 goto out_nomem; 1637 goto out_nomem;
1655 } 1638 }
1656 return 0; 1639 return 0;
1657out_nomem: 1640out_nomem:
1658 remove_cache_proc_entries(cd, net); 1641 remove_cache_proc_entries(cd);
1659 return -ENOMEM; 1642 return -ENOMEM;
1660} 1643}
1661#else /* CONFIG_PROC_FS */ 1644#else /* CONFIG_PROC_FS */
@@ -1684,7 +1667,7 @@ EXPORT_SYMBOL_GPL(cache_register_net);
1684 1667
1685void cache_unregister_net(struct cache_detail *cd, struct net *net) 1668void cache_unregister_net(struct cache_detail *cd, struct net *net)
1686{ 1669{
1687 remove_cache_proc_entries(cd, net); 1670 remove_cache_proc_entries(cd);
1688 sunrpc_destroy_cache_detail(cd); 1671 sunrpc_destroy_cache_detail(cd);
1689} 1672}
1690EXPORT_SYMBOL_GPL(cache_unregister_net); 1673EXPORT_SYMBOL_GPL(cache_unregister_net);
@@ -1843,15 +1826,17 @@ int sunrpc_cache_register_pipefs(struct dentry *parent,
1843 struct dentry *dir = rpc_create_cache_dir(parent, name, umode, cd); 1826 struct dentry *dir = rpc_create_cache_dir(parent, name, umode, cd);
1844 if (IS_ERR(dir)) 1827 if (IS_ERR(dir))
1845 return PTR_ERR(dir); 1828 return PTR_ERR(dir);
1846 cd->u.pipefs.dir = dir; 1829 cd->pipefs = dir;
1847 return 0; 1830 return 0;
1848} 1831}
1849EXPORT_SYMBOL_GPL(sunrpc_cache_register_pipefs); 1832EXPORT_SYMBOL_GPL(sunrpc_cache_register_pipefs);
1850 1833
1851void sunrpc_cache_unregister_pipefs(struct cache_detail *cd) 1834void sunrpc_cache_unregister_pipefs(struct cache_detail *cd)
1852{ 1835{
1853 rpc_remove_cache_dir(cd->u.pipefs.dir); 1836 if (cd->pipefs) {
1854 cd->u.pipefs.dir = NULL; 1837 rpc_remove_cache_dir(cd->pipefs);
1838 cd->pipefs = NULL;
1839 }
1855} 1840}
1856EXPORT_SYMBOL_GPL(sunrpc_cache_unregister_pipefs); 1841EXPORT_SYMBOL_GPL(sunrpc_cache_unregister_pipefs);
1857 1842