linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] NFSv4.x: fix lock recovery during delegation recall
@ 2018-10-04 18:26 Olga Kornievskaia
  0 siblings, 0 replies; 3+ messages in thread
From: Olga Kornievskaia @ 2018-10-04 18:26 UTC (permalink / raw)
  To: trond.myklebust, anna.schumaker; +Cc: linux-nfs

From: Olga Kornievskaia <kolga@netapp.com>

Running "./nfstest_delegation --runtest recall26" uncovers that
client doesn't recover the lock when we have an appending open,
where the initial open got a write delegation.

Instead of checking for the passed in open context against
the file lock's open context. Check that the state is the same.

Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
---
 fs/nfs/delegation.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
index 76d205d..07b8395 100644
--- a/fs/nfs/delegation.c
+++ b/fs/nfs/delegation.c
@@ -93,7 +93,7 @@ int nfs4_check_delegation(struct inode *inode, fmode_t flags)
 	return nfs4_do_check_delegation(inode, flags, false);
 }
 
-static int nfs_delegation_claim_locks(struct nfs_open_context *ctx, struct nfs4_state *state, const nfs4_stateid *stateid)
+static int nfs_delegation_claim_locks(struct nfs4_state *state, const nfs4_stateid *stateid)
 {
 	struct inode *inode = state->inode;
 	struct file_lock *fl;
@@ -108,7 +108,7 @@ static int nfs_delegation_claim_locks(struct nfs_open_context *ctx, struct nfs4_
 	spin_lock(&flctx->flc_lock);
 restart:
 	list_for_each_entry(fl, list, fl_list) {
-		if (nfs_file_open_context(fl->fl_file) != ctx)
+		if (nfs_file_open_context(fl->fl_file)->state != state)
 			continue;
 		spin_unlock(&flctx->flc_lock);
 		status = nfs4_lock_delegation_recall(fl, state, stateid);
@@ -156,7 +156,7 @@ static int nfs_delegation_claim_opens(struct inode *inode,
 		seq = raw_seqcount_begin(&sp->so_reclaim_seqcount);
 		err = nfs4_open_delegation_recall(ctx, state, stateid, type);
 		if (!err)
-			err = nfs_delegation_claim_locks(ctx, state, stateid);
+			err = nfs_delegation_claim_locks(state, stateid);
 		if (!err && read_seqcount_retry(&sp->so_reclaim_seqcount, seq))
 			err = -EAGAIN;
 		mutex_unlock(&sp->so_delegreturn_mutex);
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 1/1] NFSv4.x: fix lock recovery during delegation recall
@ 2018-10-04 18:45 Olga Kornievskaia
  2018-10-05 13:35 ` Trond Myklebust
  0 siblings, 1 reply; 3+ messages in thread
From: Olga Kornievskaia @ 2018-10-04 18:45 UTC (permalink / raw)
  To: trond.myklebust, anna.schumaker; +Cc: linux-nfs

From: Olga Kornievskaia <kolga@netapp.com>

Running "./nfstest_delegation --runtest recall26" uncovers that
client doesn't recover the lock when we have an appending open,
where the initial open got a write delegation.

Instead of checking for the passed in open context against
the file lock's open context. Check that the state is the same.

Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
---
 fs/nfs/delegation.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
index 76d205d..07b8395 100644
--- a/fs/nfs/delegation.c
+++ b/fs/nfs/delegation.c
@@ -93,7 +93,7 @@ int nfs4_check_delegation(struct inode *inode, fmode_t flags)
 	return nfs4_do_check_delegation(inode, flags, false);
 }
 
-static int nfs_delegation_claim_locks(struct nfs_open_context *ctx, struct nfs4_state *state, const nfs4_stateid *stateid)
+static int nfs_delegation_claim_locks(struct nfs4_state *state, const nfs4_stateid *stateid)
 {
 	struct inode *inode = state->inode;
 	struct file_lock *fl;
@@ -108,7 +108,7 @@ static int nfs_delegation_claim_locks(struct nfs_open_context *ctx, struct nfs4_
 	spin_lock(&flctx->flc_lock);
 restart:
 	list_for_each_entry(fl, list, fl_list) {
-		if (nfs_file_open_context(fl->fl_file) != ctx)
+		if (nfs_file_open_context(fl->fl_file)->state != state)
 			continue;
 		spin_unlock(&flctx->flc_lock);
 		status = nfs4_lock_delegation_recall(fl, state, stateid);
@@ -156,7 +156,7 @@ static int nfs_delegation_claim_opens(struct inode *inode,
 		seq = raw_seqcount_begin(&sp->so_reclaim_seqcount);
 		err = nfs4_open_delegation_recall(ctx, state, stateid, type);
 		if (!err)
-			err = nfs_delegation_claim_locks(ctx, state, stateid);
+			err = nfs_delegation_claim_locks(state, stateid);
 		if (!err && read_seqcount_retry(&sp->so_reclaim_seqcount, seq))
 			err = -EAGAIN;
 		mutex_unlock(&sp->so_delegreturn_mutex);
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/1] NFSv4.x: fix lock recovery during delegation recall
  2018-10-04 18:45 [PATCH 1/1] NFSv4.x: fix lock recovery during delegation recall Olga Kornievskaia
@ 2018-10-05 13:35 ` Trond Myklebust
  0 siblings, 0 replies; 3+ messages in thread
From: Trond Myklebust @ 2018-10-05 13:35 UTC (permalink / raw)
  To: anna.schumaker@netapp.com, olga.kornievskaia@gmail.com
  Cc: linux-nfs@vger.kernel.org

T24gVGh1LCAyMDE4LTEwLTA0IGF0IDE0OjQ1IC0wNDAwLCBPbGdhIEtvcm5pZXZza2FpYSB3cm90
ZToNCj4gRnJvbTogT2xnYSBLb3JuaWV2c2thaWEgPGtvbGdhQG5ldGFwcC5jb20+DQo+IA0KPiBS
dW5uaW5nICIuL25mc3Rlc3RfZGVsZWdhdGlvbiAtLXJ1bnRlc3QgcmVjYWxsMjYiIHVuY292ZXJz
IHRoYXQNCj4gY2xpZW50IGRvZXNuJ3QgcmVjb3ZlciB0aGUgbG9jayB3aGVuIHdlIGhhdmUgYW4g
YXBwZW5kaW5nIG9wZW4sDQo+IHdoZXJlIHRoZSBpbml0aWFsIG9wZW4gZ290IGEgd3JpdGUgZGVs
ZWdhdGlvbi4NCj4gDQo+IEluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIHRoZSBwYXNzZWQgaW4gb3Bl
biBjb250ZXh0IGFnYWluc3QNCj4gdGhlIGZpbGUgbG9jaydzIG9wZW4gY29udGV4dC4gQ2hlY2sg
dGhhdCB0aGUgc3RhdGUgaXMgdGhlIHNhbWUuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBPbGdhIEtv
cm5pZXZza2FpYSA8a29sZ2FAbmV0YXBwLmNvbT4NCj4gLS0tDQo+ICBmcy9uZnMvZGVsZWdhdGlv
bi5jIHwgNiArKystLS0NCj4gIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVs
ZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL2RlbGVnYXRpb24uYyBiL2ZzL25m
cy9kZWxlZ2F0aW9uLmMNCj4gaW5kZXggNzZkMjA1ZC4uMDdiODM5NSAxMDA2NDQNCj4gLS0tIGEv
ZnMvbmZzL2RlbGVnYXRpb24uYw0KPiArKysgYi9mcy9uZnMvZGVsZWdhdGlvbi5jDQo+IEBAIC05
Myw3ICs5Myw3IEBAIGludCBuZnM0X2NoZWNrX2RlbGVnYXRpb24oc3RydWN0IGlub2RlICppbm9k
ZSwNCj4gZm1vZGVfdCBmbGFncykNCj4gIAlyZXR1cm4gbmZzNF9kb19jaGVja19kZWxlZ2F0aW9u
KGlub2RlLCBmbGFncywgZmFsc2UpOw0KPiAgfQ0KPiAgDQo+IC1zdGF0aWMgaW50IG5mc19kZWxl
Z2F0aW9uX2NsYWltX2xvY2tzKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsDQo+IHN0cnVj
dCBuZnM0X3N0YXRlICpzdGF0ZSwgY29uc3QgbmZzNF9zdGF0ZWlkICpzdGF0ZWlkKQ0KPiArc3Rh
dGljIGludCBuZnNfZGVsZWdhdGlvbl9jbGFpbV9sb2NrcyhzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3Rh
dGUsDQo+IGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCkNCj4gIHsNCj4gIAlzdHJ1Y3QgaW5v
ZGUgKmlub2RlID0gc3RhdGUtPmlub2RlOw0KPiAgCXN0cnVjdCBmaWxlX2xvY2sgKmZsOw0KPiBA
QCAtMTA4LDcgKzEwOCw3IEBAIHN0YXRpYyBpbnQgbmZzX2RlbGVnYXRpb25fY2xhaW1fbG9ja3Mo
c3RydWN0DQo+IG5mc19vcGVuX2NvbnRleHQgKmN0eCwgc3RydWN0IG5mczRfDQo+ICAJc3Bpbl9s
b2NrKCZmbGN0eC0+ZmxjX2xvY2spOw0KPiAgcmVzdGFydDoNCj4gIAlsaXN0X2Zvcl9lYWNoX2Vu
dHJ5KGZsLCBsaXN0LCBmbF9saXN0KSB7DQo+IC0JCWlmIChuZnNfZmlsZV9vcGVuX2NvbnRleHQo
ZmwtPmZsX2ZpbGUpICE9IGN0eCkNCj4gKwkJaWYgKG5mc19maWxlX29wZW5fY29udGV4dChmbC0+
ZmxfZmlsZSktPnN0YXRlICE9IHN0YXRlKQ0KPiAgCQkJY29udGludWU7DQo+ICAJCXNwaW5fdW5s
b2NrKCZmbGN0eC0+ZmxjX2xvY2spOw0KPiAgCQlzdGF0dXMgPSBuZnM0X2xvY2tfZGVsZWdhdGlv
bl9yZWNhbGwoZmwsIHN0YXRlLA0KPiBzdGF0ZWlkKTsNCj4gQEAgLTE1Niw3ICsxNTYsNyBAQCBz
dGF0aWMgaW50IG5mc19kZWxlZ2F0aW9uX2NsYWltX29wZW5zKHN0cnVjdA0KPiBpbm9kZSAqaW5v
ZGUsDQo+ICAJCXNlcSA9IHJhd19zZXFjb3VudF9iZWdpbigmc3AtPnNvX3JlY2xhaW1fc2VxY291
bnQpOw0KPiAgCQllcnIgPSBuZnM0X29wZW5fZGVsZWdhdGlvbl9yZWNhbGwoY3R4LCBzdGF0ZSwg
c3RhdGVpZCwNCj4gdHlwZSk7DQo+ICAJCWlmICghZXJyKQ0KPiAtCQkJZXJyID0gbmZzX2RlbGVn
YXRpb25fY2xhaW1fbG9ja3MoY3R4LCBzdGF0ZSwNCj4gc3RhdGVpZCk7DQo+ICsJCQllcnIgPSBu
ZnNfZGVsZWdhdGlvbl9jbGFpbV9sb2NrcyhzdGF0ZSwNCj4gc3RhdGVpZCk7DQo+ICAJCWlmICgh
ZXJyICYmIHJlYWRfc2VxY291bnRfcmV0cnkoJnNwLQ0KPiA+c29fcmVjbGFpbV9zZXFjb3VudCwg
c2VxKSkNCj4gIAkJCWVyciA9IC1FQUdBSU47DQo+ICAJCW11dGV4X3VubG9jaygmc3AtPnNvX2Rl
bGVncmV0dXJuX211dGV4KTsNCg0KVGhhbmtzISBUaGF0IGxvb2tzIGdvb2QgdG8gbWUuDQoNCi0t
IA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1haW50YWluZXIsIEhhbW1lcnNw
YWNlDQp0cm9uZC5teWtsZWJ1c3RAaGFtbWVyc3BhY2UuY29tDQoNCg0K

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-10-05 20:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-04 18:45 [PATCH 1/1] NFSv4.x: fix lock recovery during delegation recall Olga Kornievskaia
2018-10-05 13:35 ` Trond Myklebust
  -- strict thread matches above, loose matches on Subject: below --
2018-10-04 18:26 Olga Kornievskaia

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).