diff options
Diffstat (limited to 'fs/nfs/direct.c')
| -rw-r--r-- | fs/nfs/direct.c | 9 | 
1 files changed, 5 insertions, 4 deletions
| diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index ad2775d3e219..9a4cbfc85d81 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c @@ -490,6 +490,7 @@ static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq)  			dreq->error = -EIO;  			spin_unlock(cinfo.lock);  		} +		nfs_release_request(req);  	}  	nfs_pageio_complete(&desc); @@ -523,9 +524,9 @@ static void nfs_direct_commit_complete(struct nfs_commit_data *data)  		nfs_list_remove_request(req);  		if (dreq->flags == NFS_ODIRECT_RESCHED_WRITES) {  			/* Note the rewrite will go through mds */ -			kref_get(&req->wb_kref);  			nfs_mark_request_commit(req, NULL, &cinfo); -		} +		} else +			nfs_release_request(req);  		nfs_unlock_and_release_request(req);  	} @@ -716,12 +717,12 @@ static void nfs_direct_write_completion(struct nfs_pgio_header *hdr)  			if (dreq->flags == NFS_ODIRECT_RESCHED_WRITES)  				bit = NFS_IOHDR_NEED_RESCHED;  			else if (dreq->flags == 0) { -				memcpy(&dreq->verf, &req->wb_verf, +				memcpy(&dreq->verf, hdr->verf,  				       sizeof(dreq->verf));  				bit = NFS_IOHDR_NEED_COMMIT;  				dreq->flags = NFS_ODIRECT_DO_COMMIT;  			} else if (dreq->flags == NFS_ODIRECT_DO_COMMIT) { -				if (memcmp(&dreq->verf, &req->wb_verf, sizeof(dreq->verf))) { +				if (memcmp(&dreq->verf, hdr->verf, sizeof(dreq->verf))) {  					dreq->flags = NFS_ODIRECT_RESCHED_WRITES;  					bit = NFS_IOHDR_NEED_RESCHED;  				} else | 
