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

appletalk: use remove_proc_subtree to simplify procfs code

Use remove_proc_subtree to remove the whole subtree
on cleanup.Also do some cleanup.

Signed-off-by: YueHaibing <yuehaibing@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

YueHaibing and committed by
David S. Miller
e2bcd8b0 084e5bb1

+17 -39
+17 -39
net/appletalk/atalk_proc.c
··· 210 210 .show = atalk_seq_socket_show, 211 211 }; 212 212 213 - static struct proc_dir_entry *atalk_proc_dir; 214 - 215 213 int __init atalk_proc_init(void) 216 214 { 217 - struct proc_dir_entry *p; 218 - int rc = -ENOMEM; 215 + if (!proc_mkdir("atalk", init_net.proc_net)) 216 + return -ENOMEM; 219 217 220 - atalk_proc_dir = proc_mkdir("atalk", init_net.proc_net); 221 - if (!atalk_proc_dir) 218 + if (!proc_create_seq("atalk/interface", 0444, init_net.proc_net, 219 + &atalk_seq_interface_ops)) 222 220 goto out; 223 221 224 - p = proc_create_seq("interface", 0444, atalk_proc_dir, 225 - &atalk_seq_interface_ops); 226 - if (!p) 227 - goto out_interface; 222 + if (!proc_create_seq("atalk/route", 0444, init_net.proc_net, 223 + &atalk_seq_route_ops)) 224 + goto out; 228 225 229 - p = proc_create_seq("route", 0444, atalk_proc_dir, 230 - &atalk_seq_route_ops); 231 - if (!p) 232 - goto out_route; 226 + if (!proc_create_seq("atalk/socket", 0444, init_net.proc_net, 227 + &atalk_seq_socket_ops)) 228 + goto out; 233 229 234 - p = proc_create_seq("socket", 0444, atalk_proc_dir, 235 - &atalk_seq_socket_ops); 236 - if (!p) 237 - goto out_socket; 230 + if (!proc_create_seq_private("atalk/arp", 0444, init_net.proc_net, 231 + &aarp_seq_ops, 232 + sizeof(struct aarp_iter_state), NULL)) 233 + goto out; 238 234 239 - p = proc_create_seq_private("arp", 0444, atalk_proc_dir, &aarp_seq_ops, 240 - sizeof(struct aarp_iter_state), NULL); 241 - if (!p) 242 - goto out_arp; 243 - 244 - rc = 0; 245 235 out: 246 - return rc; 247 - out_arp: 248 - remove_proc_entry("socket", atalk_proc_dir); 249 - out_socket: 250 - remove_proc_entry("route", atalk_proc_dir); 251 - out_route: 252 - remove_proc_entry("interface", atalk_proc_dir); 253 - out_interface: 254 - remove_proc_entry("atalk", init_net.proc_net); 255 - goto out; 236 + remove_proc_subtree("atalk", init_net.proc_net); 237 + return -ENOMEM; 256 238 } 257 239 258 240 void __exit atalk_proc_exit(void) 259 241 { 260 - remove_proc_entry("interface", atalk_proc_dir); 261 - remove_proc_entry("route", atalk_proc_dir); 262 - remove_proc_entry("socket", atalk_proc_dir); 263 - remove_proc_entry("arp", atalk_proc_dir); 264 - remove_proc_entry("atalk", init_net.proc_net); 242 + remove_proc_subtree("atalk", init_net.proc_net); 265 243 }