aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nfsd/nfs4recover.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c
index e37ac1c53adb..bb66037b63a0 100644
--- a/fs/nfsd/nfs4recover.c
+++ b/fs/nfsd/nfs4recover.c
@@ -480,6 +480,16 @@ nfsd4_init_recdir(struct net *net)
480 return status; 480 return status;
481} 481}
482 482
483static void
484nfsd4_shutdown_recdir(struct net *net)
485{
486 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
487
488 if (!nn->rec_file)
489 return;
490 fput(nn->rec_file);
491 nn->rec_file = NULL;
492}
483 493
484static int 494static int
485nfs4_legacy_state_init(struct net *net) 495nfs4_legacy_state_init(struct net *net)
@@ -513,10 +523,13 @@ nfsd4_load_reboot_recovery_data(struct net *net)
513 int status; 523 int status;
514 524
515 status = nfsd4_init_recdir(net); 525 status = nfsd4_init_recdir(net);
516 if (!status)
517 status = nfsd4_recdir_load(net);
518 if (status) 526 if (status)
519 printk(KERN_ERR "NFSD: Failure reading reboot recovery data\n"); 527 return status;
528
529 status = nfsd4_recdir_load(net);
530 if (status)
531 nfsd4_shutdown_recdir(net);
532
520 return status; 533 return status;
521} 534}
522 535
@@ -547,21 +560,12 @@ err:
547} 560}
548 561
549static void 562static void
550nfsd4_shutdown_recdir(struct nfsd_net *nn)
551{
552 if (!nn->rec_file)
553 return;
554 fput(nn->rec_file);
555 nn->rec_file = NULL;
556}
557
558static void
559nfsd4_legacy_tracking_exit(struct net *net) 563nfsd4_legacy_tracking_exit(struct net *net)
560{ 564{
561 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 565 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
562 566
563 nfs4_release_reclaim(nn); 567 nfs4_release_reclaim(nn);
564 nfsd4_shutdown_recdir(nn); 568 nfsd4_shutdown_recdir(net);
565 nfs4_legacy_state_shutdown(net); 569 nfs4_legacy_state_shutdown(net);
566} 570}
567 571