aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@redhat.com>2011-01-31 17:58:10 -0500
committerJ. Bruce Fields <bfields@redhat.com>2011-02-14 10:35:18 -0500
commitedab9782b5a16abb8d139d261e81e13ef0be35a9 (patch)
tree44d843dbac80823b0d9f66d43151956ada711f1f /fs/nfsd
parentdd239cc05f0ad9f582dd83d88a4fb5edcc57a026 (diff)
nfsd4: split lease setting into separate function
Splitting some code into a separate function which we'll be adding some more to. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd')
-rw-r--r--fs/nfsd/nfs4state.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 099d6fa64f7f..dbb2141cf88f 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -2659,6 +2659,23 @@ static struct file_lock *nfs4_alloc_init_lease(struct nfs4_delegation *dp, int f
2659 return fl; 2659 return fl;
2660} 2660}
2661 2661
2662static int nfs4_setlease(struct nfs4_delegation *dp, int flag)
2663{
2664 struct file_lock *fl;
2665 int status;
2666
2667 fl = nfs4_alloc_init_lease(dp, flag);
2668 if (!fl)
2669 return -ENOMEM;
2670 status = vfs_setlease(dp->dl_vfs_file, fl->fl_type, &fl);
2671 if (status) {
2672 dp->dl_flock = NULL;
2673 locks_free_lock(fl);
2674 return -ENOMEM;
2675 }
2676 return 0;
2677}
2678
2662/* 2679/*
2663 * Attempt to hand out a delegation. 2680 * Attempt to hand out a delegation.
2664 */ 2681 */
@@ -2668,7 +2685,6 @@ nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, struct nfs4_sta
2668 struct nfs4_delegation *dp; 2685 struct nfs4_delegation *dp;
2669 struct nfs4_stateowner *sop = stp->st_stateowner; 2686 struct nfs4_stateowner *sop = stp->st_stateowner;
2670 int cb_up; 2687 int cb_up;
2671 struct file_lock *fl;
2672 int status, flag = 0; 2688 int status, flag = 0;
2673 2689
2674 cb_up = nfsd4_cb_channel_good(sop->so_client); 2690 cb_up = nfsd4_cb_channel_good(sop->so_client);
@@ -2701,19 +2717,9 @@ nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, struct nfs4_sta
2701 dp = alloc_init_deleg(sop->so_client, stp, fh, flag); 2717 dp = alloc_init_deleg(sop->so_client, stp, fh, flag);
2702 if (dp == NULL) 2718 if (dp == NULL)
2703 goto out_no_deleg; 2719 goto out_no_deleg;
2704 status = -ENOMEM; 2720 status = nfs4_setlease(dp, flag);
2705 fl = nfs4_alloc_init_lease(dp, flag); 2721 if (status)
2706 if (!fl)
2707 goto out_free;
2708 /* vfs_setlease checks to see if delegation should be handed out.
2709 * the lock_manager callback fl_change is used
2710 */
2711 if ((status = vfs_setlease(fl->fl_file, fl->fl_type, &fl))) {
2712 dprintk("NFSD: setlease failed [%d], no delegation\n", status);
2713 dp->dl_flock = NULL;
2714 locks_free_lock(fl);
2715 goto out_free; 2722 goto out_free;
2716 }
2717 2723
2718 memcpy(&open->op_delegate_stateid, &dp->dl_stateid, sizeof(dp->dl_stateid)); 2724 memcpy(&open->op_delegate_stateid, &dp->dl_stateid, sizeof(dp->dl_stateid));
2719 2725