Merge commit 'v2.6.39-rc2' into spi/merge
[deliverable/linux.git] / fs / ceph / file.c
index 7d0e4a82d898a83f2695eead6ffc767689ffe140..159b512d5a271379abf0bde217fd46feeb38c79b 100644 (file)
@@ -564,11 +564,19 @@ more:
                         * start_request so that a tid has been assigned.
                         */
                        spin_lock(&ci->i_unsafe_lock);
-                       list_add(&req->r_unsafe_item, &ci->i_unsafe_writes);
+                       list_add_tail(&req->r_unsafe_item,
+                                     &ci->i_unsafe_writes);
                        spin_unlock(&ci->i_unsafe_lock);
                        ceph_get_cap_refs(ci, CEPH_CAP_FILE_WR);
                }
+               
                ret = ceph_osdc_wait_request(&fsc->client->osdc, req);
+               if (ret < 0 && req->r_safe_callback) {
+                       spin_lock(&ci->i_unsafe_lock);
+                       list_del_init(&req->r_unsafe_item);
+                       spin_unlock(&ci->i_unsafe_lock);
+                       ceph_put_cap_refs(ci, CEPH_CAP_FILE_WR);
+               }
        }
 
        if (file->f_flags & O_DIRECT)
This page took 0.024627 seconds and 5 git commands to generate.