nfsd: fail init on /proc/fs/nfs/exports creation failure
I assume the reason failure of creation was ignored here was just to continue support embedded systems that want nfsd but not proc. However, in cases where proc is supported it would be clearer to fail entirely than to come up with some features disabled. Acked-by: NeilBrown <neilb@suse.de> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
parent
440bcc5920
commit
e331f606a8
1 changed files with 28 additions and 9 deletions
|
@ -674,6 +674,27 @@ static struct file_system_type nfsd_fs_type = {
|
||||||
.kill_sb = kill_litter_super,
|
.kill_sb = kill_litter_super,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_PROC_FS
|
||||||
|
static int create_proc_exports_entry(void)
|
||||||
|
{
|
||||||
|
struct proc_dir_entry *entry;
|
||||||
|
|
||||||
|
entry = proc_mkdir("fs/nfs", NULL);
|
||||||
|
if (!entry)
|
||||||
|
return -ENOMEM;
|
||||||
|
entry = create_proc_entry("fs/nfs/exports", 0, NULL);
|
||||||
|
if (!entry)
|
||||||
|
return -ENOMEM;
|
||||||
|
entry->proc_fops = &exports_operations;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else /* CONFIG_PROC_FS */
|
||||||
|
static int create_proc_exports_entry(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int __init init_nfsd(void)
|
static int __init init_nfsd(void)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
|
@ -689,23 +710,21 @@ static int __init init_nfsd(void)
|
||||||
nfsd_export_init(); /* Exports table */
|
nfsd_export_init(); /* Exports table */
|
||||||
nfsd_lockd_init(); /* lockd->nfsd callbacks */
|
nfsd_lockd_init(); /* lockd->nfsd callbacks */
|
||||||
nfsd_idmap_init(); /* Name to ID mapping */
|
nfsd_idmap_init(); /* Name to ID mapping */
|
||||||
if (proc_mkdir("fs/nfs", NULL)) {
|
retval = create_proc_exports_entry();
|
||||||
struct proc_dir_entry *entry;
|
if (retval)
|
||||||
entry = create_proc_entry("fs/nfs/exports", 0, NULL);
|
goto out_free_idmap;
|
||||||
if (entry)
|
|
||||||
entry->proc_fops = &exports_operations;
|
|
||||||
}
|
|
||||||
retval = register_filesystem(&nfsd_fs_type);
|
retval = register_filesystem(&nfsd_fs_type);
|
||||||
if (retval)
|
if (retval)
|
||||||
goto out_free_all;
|
goto out_free_all;
|
||||||
return 0;
|
return 0;
|
||||||
out_free_all:
|
out_free_all:
|
||||||
nfsd_idmap_shutdown();
|
|
||||||
nfsd_export_shutdown();
|
|
||||||
nfsd_reply_cache_shutdown();
|
|
||||||
remove_proc_entry("fs/nfs/exports", NULL);
|
remove_proc_entry("fs/nfs/exports", NULL);
|
||||||
remove_proc_entry("fs/nfs", NULL);
|
remove_proc_entry("fs/nfs", NULL);
|
||||||
|
nfsd_idmap_shutdown();
|
||||||
|
out_free_idmap:
|
||||||
nfsd_lockd_shutdown();
|
nfsd_lockd_shutdown();
|
||||||
|
nfsd_export_shutdown();
|
||||||
|
nfsd_reply_cache_shutdown();
|
||||||
out_free_stat:
|
out_free_stat:
|
||||||
nfsd_stat_shutdown();
|
nfsd_stat_shutdown();
|
||||||
nfsd4_free_slabs();
|
nfsd4_free_slabs();
|
||||||
|
|
Loading…
Reference in a new issue