aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/locks.c8
-rw-r--r--fs/nfsd/nfs4state.c21
2 files changed, 2 insertions, 27 deletions
diff --git a/fs/locks.c b/fs/locks.c
index 8729347bcd1a..5cb65062281a 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -444,15 +444,9 @@ static void lease_release_private_callback(struct file_lock *fl)
444 fl->fl_file->f_owner.signum = 0; 444 fl->fl_file->f_owner.signum = 0;
445} 445}
446 446
447static int lease_mylease_callback(struct file_lock *fl, struct file_lock *try)
448{
449 return fl->fl_file == try->fl_file;
450}
451
452static const struct lock_manager_operations lease_manager_ops = { 447static const struct lock_manager_operations lease_manager_ops = {
453 .fl_break = lease_break_callback, 448 .fl_break = lease_break_callback,
454 .fl_release_private = lease_release_private_callback, 449 .fl_release_private = lease_release_private_callback,
455 .fl_mylease = lease_mylease_callback,
456 .fl_change = lease_modify, 450 .fl_change = lease_modify,
457}; 451};
458 452
@@ -1405,7 +1399,7 @@ int generic_setlease(struct file *filp, long arg, struct file_lock **flp)
1405 for (before = &inode->i_flock; 1399 for (before = &inode->i_flock;
1406 ((fl = *before) != NULL) && IS_LEASE(fl); 1400 ((fl = *before) != NULL) && IS_LEASE(fl);
1407 before = &fl->fl_next) { 1401 before = &fl->fl_next) {
1408 if (lease->fl_lmops->fl_mylease(fl, lease)) 1402 if (fl->fl_file == lease->fl_file)
1409 my_before = before; 1403 my_before = before;
1410 else if (fl->fl_type == (F_INPROGRESS | F_UNLCK)) 1404 else if (fl->fl_type == (F_INPROGRESS | F_UNLCK))
1411 /* 1405 /*
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index cbe1b81c147d..87d4c48b6069 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -2295,24 +2295,6 @@ void nfsd_break_deleg_cb(struct file_lock *fl)
2295 nfsd4_cb_recall(dp); 2295 nfsd4_cb_recall(dp);
2296} 2296}
2297 2297
2298/*
2299 * Called from setlease() with lock_flocks() held
2300 */
2301static
2302int nfsd_same_client_deleg_cb(struct file_lock *onlist, struct file_lock *try)
2303{
2304 struct nfs4_delegation *onlistd =
2305 (struct nfs4_delegation *)onlist->fl_owner;
2306 struct nfs4_delegation *tryd =
2307 (struct nfs4_delegation *)try->fl_owner;
2308
2309 if (onlist->fl_lmops != try->fl_lmops)
2310 return 0;
2311
2312 return onlistd->dl_client == tryd->dl_client;
2313}
2314
2315
2316static 2298static
2317int nfsd_change_deleg_cb(struct file_lock **onlist, int arg) 2299int nfsd_change_deleg_cb(struct file_lock **onlist, int arg)
2318{ 2300{
@@ -2324,7 +2306,6 @@ int nfsd_change_deleg_cb(struct file_lock **onlist, int arg)
2324 2306
2325static const struct lock_manager_operations nfsd_lease_mng_ops = { 2307static const struct lock_manager_operations nfsd_lease_mng_ops = {
2326 .fl_break = nfsd_break_deleg_cb, 2308 .fl_break = nfsd_break_deleg_cb,
2327 .fl_mylease = nfsd_same_client_deleg_cb,
2328 .fl_change = nfsd_change_deleg_cb, 2309 .fl_change = nfsd_change_deleg_cb,
2329}; 2310};
2330 2311
@@ -2630,7 +2611,7 @@ nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, struct nfs4_sta
2630 dp->dl_flock = fl; 2611 dp->dl_flock = fl;
2631 2612
2632 /* vfs_setlease checks to see if delegation should be handed out. 2613 /* vfs_setlease checks to see if delegation should be handed out.
2633 * the lock_manager callbacks fl_mylease and fl_change are used 2614 * the lock_manager callback fl_change is used
2634 */ 2615 */
2635 if ((status = vfs_setlease(fl->fl_file, fl->fl_type, &fl))) { 2616 if ((status = vfs_setlease(fl->fl_file, fl->fl_type, &fl))) {
2636 dprintk("NFSD: setlease failed [%d], no delegation\n", status); 2617 dprintk("NFSD: setlease failed [%d], no delegation\n", status);