nfs: fix error handling in lock_and_join_requests
[linux-2.6-block.git] / fs / nfs / write.c
index e3b5cf28bdc5c2dbfba5d3c16b06b5724afe6c60..e056f617adf2f927bcc86b8cda118479a9588bee 100644 (file)
@@ -241,7 +241,7 @@ static bool nfs_page_group_covers_page(struct nfs_page *req)
        unsigned int pos = 0;
        unsigned int len = nfs_page_length(req->wb_page);
 
-       nfs_page_group_lock(req, true);
+       nfs_page_group_lock(req, false);
 
        do {
                tmp = nfs_page_group_search_locked(req->wb_head, pos);
@@ -479,9 +479,12 @@ try_again:
        }
 
        /* lock each request in the page group */
-       ret = nfs_page_group_lock(head, false);
-       if (ret < 0)
+       ret = nfs_page_group_lock(head, true);
+       if (ret < 0) {
+               spin_unlock(&inode->i_lock);
+               nfs_release_request(head);
                return ERR_PTR(ret);
+       }
        subreq = head;
        do {
                /*