Skip to content

Commit 77dcea7

Browse files
cleanup req->error setting
Signed-off-by: Damian Raczkowski <damian.raczkowski@intel.com>
1 parent 43894dd commit 77dcea7

19 files changed

+82
-81
lines changed

src/engine/engine_bf.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ static void _ocf_backfill_complete(struct ocf_request *req, int error)
4242
struct ocf_cache *cache = req->cache;
4343

4444
if (error) {
45-
req->error = error;
45+
env_atomic_cmpxchg(&req->error, 0, error);
4646
ocf_core_stats_cache_error_update(req->core, OCF_WRITE);
4747
}
4848

49-
if (req->error)
49+
if (req->error.counter)
5050
inc_fallback_pt_error_counter(req->cache);
5151

5252
/* Handle callback-caller race to let only one of the two complete the
@@ -64,7 +64,7 @@ static void _ocf_backfill_complete(struct ocf_request *req, int error)
6464
ctx_data_free(cache->owner, req->data);
6565
req->data = NULL;
6666

67-
if (req->error) {
67+
if (req->error.counter) {
6868
ocf_engine_invalidate(req);
6969
} else {
7070
ocf_req_unlock(ocf_cache_line_concurrency(cache), req);

src/engine/engine_common.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,8 @@ static void _ocf_engine_clean_end(void *private_data, int error)
366366

367367
if (error) {
368368
OCF_DEBUG_RQ(req, "Cleaning ERROR");
369-
req->error |= error;
369+
env_atomic_cmpxchg(&req->error, 0, error);
370+
370371

371372
/* End request and do not processing */
372373
ocf_req_unlock(ocf_cache_line_concurrency(req->cache),
@@ -648,7 +649,7 @@ void ocf_engine_push_req_front_cb(struct ocf_request *req,
648649
ocf_engine_cb engine_cb,
649650
bool allow_sync)
650651
{
651-
req->error = 0; /* Please explain why!!! */
652+
env_atomic_cmpxchg(&req->error, 0, 0);/* Please explain why!!! */
652653
req->engine_handler = engine_cb;
653654
ocf_engine_push_req_front(req, allow_sync);
654655
}
@@ -687,10 +688,10 @@ static int _ocf_engine_refresh(struct ocf_request *req)
687688
req->engine_handler(req);
688689
} else {
689690
ENV_WARN(true, "Inconsistent request");
690-
req->error = -OCF_ERR_INVAL;
691+
env_atomic_cmpxchg(&req->error, 0, -OCF_ERR_INVAL);
691692

692693
/* Complete request */
693-
req->complete(req, req->error);
694+
req->complete(req, req->error.counter);
694695

695696
/* Release WRITE lock of request */
696697
ocf_req_unlock(ocf_cache_line_concurrency(req->cache), req);

src/engine/engine_d2c.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,17 @@
1616

1717
static void _ocf_d2c_completion(struct ocf_request *req, int error)
1818
{
19-
req->error = error;
19+
env_atomic_cmpxchg(&req->error, 0, error);
2020

2121
OCF_DEBUG_RQ(req, "Completion");
2222

23-
if (req->error) {
23+
if (req->error.counter) {
2424
req->info.core_error = 1;
2525
ocf_core_stats_core_error_update(req->core, req->rw);
2626
}
2727

2828
/* Complete request */
29-
req->complete(req, req->error);
29+
req->complete(req, req->error.counter);
3030

3131
/* Release OCF request */
3232
ocf_req_put(req);

src/engine/engine_discard.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ static void _ocf_discard_finish_step(struct ocf_request *req)
116116
static void _ocf_discard_step_complete(struct ocf_request *req, int error)
117117
{
118118
if (error)
119-
req->error |= error;
119+
env_atomic_cmpxchg(&req->error, 0, error);
120120

121121
if (env_atomic_dec_return(&req->req_remaining))
122122
return;
@@ -126,9 +126,9 @@ static void _ocf_discard_step_complete(struct ocf_request *req, int error)
126126
/* Release WRITE lock of request */
127127
ocf_req_unlock_wr(ocf_cache_line_concurrency(req->cache), req);
128128

129-
if (req->error) {
129+
if (req->error.counter) {
130130
ocf_metadata_error(req->cache);
131-
_ocf_discard_complete_req(req, req->error);
131+
_ocf_discard_complete_req(req, req->error.counter);
132132
return;
133133
}
134134

@@ -230,7 +230,7 @@ static int _ocf_discard_step(struct ocf_request *req)
230230
}
231231
} else {
232232
OCF_DEBUG_RQ(req, "LOCK ERROR %d", lock);
233-
req->error |= lock;
233+
env_atomic_cmpxchg(&req->error, 0, lock);
234234
_ocf_discard_finish_step(req);
235235
}
236236

src/engine/engine_fast.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
static void _ocf_read_fast_complete(struct ocf_request *req, int error)
3232
{
3333
if (error) {
34-
req->error |= error;
34+
env_atomic_cmpxchg(&req->error, 0, error);
3535
ocf_core_stats_cache_error_update(req->core, OCF_READ);
3636
}
3737

@@ -42,15 +42,15 @@ static void _ocf_read_fast_complete(struct ocf_request *req, int error)
4242

4343
OCF_DEBUG_RQ(req, "HIT completion");
4444

45-
if (req->error) {
45+
if (req->error.counter) {
4646
OCF_DEBUG_RQ(req, "ERROR");
4747

4848
ocf_engine_push_req_front_pt(req);
4949
} else {
5050
ocf_req_unlock(ocf_cache_line_concurrency(req->cache), req);
5151

5252
/* Complete request */
53-
req->complete(req, req->error);
53+
req->complete(req, req->error.counter);
5454

5555
/* Free the request at the last point of the completion path */
5656
ocf_req_put(req);

src/engine/engine_inv.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
static void _ocf_invalidate_req(struct ocf_request *req, int error)
2020
{
2121
if (error) {
22-
req->error = error;
22+
env_atomic_cmpxchg(&req->error, 0, error);
2323
ocf_core_stats_cache_error_update(req->core, OCF_WRITE);
2424
}
2525

@@ -28,7 +28,7 @@ static void _ocf_invalidate_req(struct ocf_request *req, int error)
2828

2929
OCF_DEBUG_RQ(req, "Completion");
3030

31-
if (req->error)
31+
if (req->error.counter)
3232
ocf_engine_error(req, true, "Failed to flush metadata to cache");
3333

3434
ocf_req_unlock_wr(ocf_cache_line_concurrency(req->cache), req);

src/engine/engine_ops.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,20 @@
1616
static void _ocf_engine_ops_complete(struct ocf_request *req, int error)
1717
{
1818
if (error)
19-
req->error |= error;
19+
env_atomic_cmpxchg(&req->error, 0, error);
2020

2121
if (env_atomic_dec_return(&req->req_remaining))
2222
return;
2323

2424
OCF_DEBUG_RQ(req, "Completion");
2525

26-
if (req->error) {
26+
if (req->error.counter) {
2727
/* An error occured */
2828
ocf_engine_error(req, false, "Core operation failure");
2929
}
3030

3131
/* Complete requests - both to cache and to core*/
32-
req->complete(req, req->error);
32+
req->complete(req, req->error.counter);
3333

3434
/* Release OCF request */
3535
ocf_req_put(req);

src/engine/engine_pt.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,20 @@
2020
static void _ocf_read_pt_complete(struct ocf_request *req, int error)
2121
{
2222
if (error)
23-
req->error |= error;
23+
env_atomic_cmpxchg(&req->error, 0, error);
2424

2525
if (env_atomic_dec_return(&req->req_remaining))
2626
return;
2727

2828
OCF_DEBUG_RQ(req, "Completion");
2929

30-
if (req->error) {
30+
if (req->error.counter) {
3131
req->info.core_error = 1;
3232
ocf_core_stats_core_error_update(req->core, OCF_READ);
3333
}
3434

3535
/* Complete request */
36-
req->complete(req, req->error);
36+
req->complete(req, req->error.counter);
3737

3838
ocf_req_unlock_rd(ocf_cache_line_concurrency(req->cache), req);
3939

src/engine/engine_rd.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ static void _ocf_read_generic_hit_complete(struct ocf_request *req, int error)
2828
req->cache);
2929

3030
if (error) {
31-
req->error |= error;
31+
env_atomic_cmpxchg(&req->error, 0, error);
3232
ocf_core_stats_cache_error_update(req->core, OCF_READ);
3333
inc_fallback_pt_error_counter(req->cache);
3434
}
@@ -40,13 +40,13 @@ static void _ocf_read_generic_hit_complete(struct ocf_request *req, int error)
4040
if (env_atomic_dec_return(&req->req_remaining) == 0) {
4141
OCF_DEBUG_RQ(req, "HIT completion");
4242

43-
if (req->error) {
43+
if (req->error.counter) {
4444
ocf_engine_push_req_front_pt(req);
4545
} else {
4646
ocf_req_unlock(c, req);
4747

4848
/* Complete request */
49-
req->complete(req, req->error);
49+
req->complete(req, req->error.counter);
5050

5151
/* Free the request at the last point
5252
* of the completion path
@@ -61,7 +61,7 @@ static void _ocf_read_generic_miss_complete(struct ocf_request *req, int error)
6161
struct ocf_cache *cache = req->cache;
6262

6363
if (error)
64-
req->error = error;
64+
env_atomic_cmpxchg(&req->error, 0, error);
6565

6666
/* Handle callback-caller race to let only one of the two complete the
6767
* request. Also, complete original request only if this is the last
@@ -70,12 +70,12 @@ static void _ocf_read_generic_miss_complete(struct ocf_request *req, int error)
7070
if (env_atomic_dec_return(&req->req_remaining) == 0) {
7171
OCF_DEBUG_RQ(req, "MISS completion");
7272

73-
if (req->error) {
73+
if (req->error.counter) {
7474
/*
7575
* --- Do not submit this request to write-back-thread.
7676
* Stop it here ---
7777
*/
78-
req->complete(req, req->error);
78+
req->complete(req, req->error.counter);
7979

8080
req->info.core_error = 1;
8181
ocf_core_stats_core_error_update(req->core, OCF_READ);
@@ -96,7 +96,7 @@ static void _ocf_read_generic_miss_complete(struct ocf_request *req, int error)
9696
req->byte_length);
9797

9898
/* Complete request */
99-
req->complete(req, req->error);
99+
req->complete(req, req->error.counter);
100100

101101
ocf_engine_backfill(req);
102102
}

src/engine/engine_wb.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,17 @@ static void _ocf_write_wb_update_bits(struct ocf_request *req)
4949
static void _ocf_write_wb_io_flush_metadata(struct ocf_request *req, int error)
5050
{
5151
if (error)
52-
req->error = error;
52+
env_atomic_cmpxchg(&req->error, 0, error);
5353

5454
if (env_atomic_dec_return(&req->req_remaining))
5555
return;
5656

57-
if (req->error)
57+
if (req->error.counter)
5858
ocf_engine_error(req, true, "Failed to write data to cache");
5959

6060
ocf_req_unlock_wr(ocf_cache_line_concurrency(req->cache), req);
6161

62-
req->complete(req, req->error);
62+
req->complete(req, req->error.counter);
6363

6464
ocf_req_put(req);
6565
}
@@ -87,18 +87,18 @@ static void _ocf_write_wb_complete(struct ocf_request *req, int error)
8787
{
8888
if (error) {
8989
ocf_core_stats_cache_error_update(req->core, OCF_WRITE);
90-
req->error |= error;
90+
env_atomic_cmpxchg(&req->error, 0, error);
9191
}
9292

9393
if (env_atomic_dec_return(&req->req_remaining))
9494
return;
9595

9696
OCF_DEBUG_RQ(req, "Completion");
9797

98-
if (req->error) {
98+
if (req->error.counter) {
9999
ocf_engine_error(req, true, "Failed to write data to cache");
100100

101-
req->complete(req, req->error);
101+
req->complete(req, req->error.counter);
102102

103103
ocf_engine_invalidate(req);
104104
} else {

0 commit comments

Comments
 (0)