diff options
author | Rakesh Pandit <rakesh@tuxera.com> | 2017-10-13 08:46:00 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2017-10-13 10:34:57 -0400 |
commit | 32825ebb06fafeff463ed23e9d0dea459ebd30fe (patch) | |
tree | de940ed6e2f5cdf6cf7e3ed202ce06edce7e796d | |
parent | c79819bc0877e4cbed8013b1abc9697e8805b21b (diff) |
lightnvm: pblk: reuse pblk_gc_should_kick
This is a trivial change which reuses pblk_gc_should_kick instead of
repeating it again in pblk_rl_free_lines_inc.
Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
Made it apply to the common case.
Reviewed-by: Javier González <javier@cnexlabs.com>
Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | drivers/lightnvm/pblk-core.c | 2 | ||||
-rw-r--r-- | drivers/lightnvm/pblk-rl.c | 33 | ||||
-rw-r--r-- | drivers/lightnvm/pblk.h | 1 |
3 files changed, 9 insertions, 27 deletions
diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c index 8536d38ef97e..a68c6ae536e5 100644 --- a/drivers/lightnvm/pblk-core.c +++ b/drivers/lightnvm/pblk-core.c | |||
@@ -1591,8 +1591,6 @@ void pblk_line_close(struct pblk *pblk, struct pblk_line *line) | |||
1591 | 1591 | ||
1592 | spin_unlock(&line->lock); | 1592 | spin_unlock(&line->lock); |
1593 | spin_unlock(&l_mg->gc_lock); | 1593 | spin_unlock(&l_mg->gc_lock); |
1594 | |||
1595 | pblk_gc_should_kick(pblk); | ||
1596 | } | 1594 | } |
1597 | 1595 | ||
1598 | void pblk_line_close_meta(struct pblk *pblk, struct pblk_line *line) | 1596 | void pblk_line_close_meta(struct pblk *pblk, struct pblk_line *line) |
diff --git a/drivers/lightnvm/pblk-rl.c b/drivers/lightnvm/pblk-rl.c index 2e6a5361baf0..9565c3bc4d0b 100644 --- a/drivers/lightnvm/pblk-rl.c +++ b/drivers/lightnvm/pblk-rl.c | |||
@@ -96,9 +96,11 @@ unsigned long pblk_rl_nr_free_blks(struct pblk_rl *rl) | |||
96 | * | 96 | * |
97 | * Only the total number of free blocks is used to configure the rate limiter. | 97 | * Only the total number of free blocks is used to configure the rate limiter. |
98 | */ | 98 | */ |
99 | static int pblk_rl_update_rates(struct pblk_rl *rl, unsigned long max) | 99 | static void pblk_rl_update_rates(struct pblk_rl *rl) |
100 | { | 100 | { |
101 | struct pblk *pblk = container_of(rl, struct pblk, rl); | ||
101 | unsigned long free_blocks = pblk_rl_nr_free_blks(rl); | 102 | unsigned long free_blocks = pblk_rl_nr_free_blks(rl); |
103 | int max = rl->rb_budget; | ||
102 | 104 | ||
103 | if (free_blocks >= rl->high) { | 105 | if (free_blocks >= rl->high) { |
104 | rl->rb_user_max = max; | 106 | rl->rb_user_max = max; |
@@ -124,23 +126,18 @@ static int pblk_rl_update_rates(struct pblk_rl *rl, unsigned long max) | |||
124 | rl->rb_state = PBLK_RL_LOW; | 126 | rl->rb_state = PBLK_RL_LOW; |
125 | } | 127 | } |
126 | 128 | ||
127 | return rl->rb_state; | 129 | if (rl->rb_state == (PBLK_RL_MID | PBLK_RL_LOW)) |
130 | pblk_gc_should_start(pblk); | ||
131 | else | ||
132 | pblk_gc_should_stop(pblk); | ||
128 | } | 133 | } |
129 | 134 | ||
130 | void pblk_rl_free_lines_inc(struct pblk_rl *rl, struct pblk_line *line) | 135 | void pblk_rl_free_lines_inc(struct pblk_rl *rl, struct pblk_line *line) |
131 | { | 136 | { |
132 | struct pblk *pblk = container_of(rl, struct pblk, rl); | ||
133 | int blk_in_line = atomic_read(&line->blk_in_line); | 137 | int blk_in_line = atomic_read(&line->blk_in_line); |
134 | int ret; | ||
135 | 138 | ||
136 | atomic_add(blk_in_line, &rl->free_blocks); | 139 | atomic_add(blk_in_line, &rl->free_blocks); |
137 | /* Rates will not change that often - no need to lock update */ | 140 | pblk_rl_update_rates(rl); |
138 | ret = pblk_rl_update_rates(rl, rl->rb_budget); | ||
139 | |||
140 | if (ret == (PBLK_RL_MID | PBLK_RL_LOW)) | ||
141 | pblk_gc_should_start(pblk); | ||
142 | else | ||
143 | pblk_gc_should_stop(pblk); | ||
144 | } | 141 | } |
145 | 142 | ||
146 | void pblk_rl_free_lines_dec(struct pblk_rl *rl, struct pblk_line *line) | 143 | void pblk_rl_free_lines_dec(struct pblk_rl *rl, struct pblk_line *line) |
@@ -148,19 +145,7 @@ void pblk_rl_free_lines_dec(struct pblk_rl *rl, struct pblk_line *line) | |||
148 | int blk_in_line = atomic_read(&line->blk_in_line); | 145 | int blk_in_line = atomic_read(&line->blk_in_line); |
149 | 146 | ||
150 | atomic_sub(blk_in_line, &rl->free_blocks); | 147 | atomic_sub(blk_in_line, &rl->free_blocks); |
151 | } | 148 | pblk_rl_update_rates(rl); |
152 | |||
153 | void pblk_gc_should_kick(struct pblk *pblk) | ||
154 | { | ||
155 | struct pblk_rl *rl = &pblk->rl; | ||
156 | int ret; | ||
157 | |||
158 | /* Rates will not change that often - no need to lock update */ | ||
159 | ret = pblk_rl_update_rates(rl, rl->rb_budget); | ||
160 | if (ret == (PBLK_RL_MID | PBLK_RL_LOW)) | ||
161 | pblk_gc_should_start(pblk); | ||
162 | else | ||
163 | pblk_gc_should_stop(pblk); | ||
164 | } | 149 | } |
165 | 150 | ||
166 | int pblk_rl_high_thrs(struct pblk_rl *rl) | 151 | int pblk_rl_high_thrs(struct pblk_rl *rl) |
diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h index 9ece409993fe..3a07c5b61a0c 100644 --- a/drivers/lightnvm/pblk.h +++ b/drivers/lightnvm/pblk.h | |||
@@ -824,7 +824,6 @@ int pblk_gc_init(struct pblk *pblk); | |||
824 | void pblk_gc_exit(struct pblk *pblk); | 824 | void pblk_gc_exit(struct pblk *pblk); |
825 | void pblk_gc_should_start(struct pblk *pblk); | 825 | void pblk_gc_should_start(struct pblk *pblk); |
826 | void pblk_gc_should_stop(struct pblk *pblk); | 826 | void pblk_gc_should_stop(struct pblk *pblk); |
827 | void pblk_gc_should_kick(struct pblk *pblk); | ||
828 | void pblk_gc_kick(struct pblk *pblk); | 827 | void pblk_gc_kick(struct pblk *pblk); |
829 | void pblk_gc_sysfs_state_show(struct pblk *pblk, int *gc_enabled, | 828 | void pblk_gc_sysfs_state_show(struct pblk *pblk, int *gc_enabled, |
830 | int *gc_active); | 829 | int *gc_active); |