|
17 | 17 | void dql_completed(struct dql *dql, unsigned int count)
|
18 | 18 | {
|
19 | 19 | unsigned int inprogress, prev_inprogress, limit;
|
20 |
| - unsigned int ovlimit, completed; |
| 20 | + unsigned int ovlimit, completed, num_queued; |
21 | 21 | bool all_prev_completed;
|
22 | 22 |
|
| 23 | + num_queued = ACCESS_ONCE(dql->num_queued); |
| 24 | + |
23 | 25 | /* Can't complete more than what's in queue */
|
24 |
| - BUG_ON(count > dql->num_queued - dql->num_completed); |
| 26 | + BUG_ON(count > num_queued - dql->num_completed); |
25 | 27 |
|
26 | 28 | completed = dql->num_completed + count;
|
27 | 29 | limit = dql->limit;
|
28 |
| - ovlimit = POSDIFF(dql->num_queued - dql->num_completed, limit); |
29 |
| - inprogress = dql->num_queued - completed; |
| 30 | + ovlimit = POSDIFF(num_queued - dql->num_completed, limit); |
| 31 | + inprogress = num_queued - completed; |
30 | 32 | prev_inprogress = dql->prev_num_queued - dql->num_completed;
|
31 | 33 | all_prev_completed = AFTER_EQ(completed, dql->prev_num_queued);
|
32 | 34 |
|
@@ -106,7 +108,7 @@ void dql_completed(struct dql *dql, unsigned int count)
|
106 | 108 | dql->prev_ovlimit = ovlimit;
|
107 | 109 | dql->prev_last_obj_cnt = dql->last_obj_cnt;
|
108 | 110 | dql->num_completed = completed;
|
109 |
| - dql->prev_num_queued = dql->num_queued; |
| 111 | + dql->prev_num_queued = num_queued; |
110 | 112 | }
|
111 | 113 | EXPORT_SYMBOL(dql_completed);
|
112 | 114 |
|
|
0 commit comments