hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/lightnvm/pblk-sysfs.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0
12 /*
23 * Copyright (C) 2016 CNEX Labs
34 * Initial release: Javier Gonzalez <javier@cnexlabs.com>
....@@ -36,7 +37,7 @@
3637 active = 0;
3738 up(&rlun->wr_sem);
3839 }
39
- sz += snprintf(page + sz, PAGE_SIZE - sz,
40
+ sz += scnprintf(page + sz, PAGE_SIZE - sz,
4041 "pblk: pos:%d, ch:%d, lun:%d - %d\n",
4142 i,
4243 rlun->bppa.a.ch,
....@@ -119,7 +120,7 @@
119120 struct nvm_addrf_12 *ppaf = (struct nvm_addrf_12 *)&pblk->addrf;
120121 struct nvm_addrf_12 *gppaf = (struct nvm_addrf_12 *)&geo->addrf;
121122
122
- sz = snprintf(page, PAGE_SIZE,
123
+ sz = scnprintf(page, PAGE_SIZE,
123124 "g:(b:%d)blk:%d/%d,pg:%d/%d,lun:%d/%d,ch:%d/%d,pl:%d/%d,sec:%d/%d\n",
124125 pblk->addrf_len,
125126 ppaf->blk_offset, ppaf->blk_len,
....@@ -129,7 +130,7 @@
129130 ppaf->pln_offset, ppaf->pln_len,
130131 ppaf->sec_offset, ppaf->sec_len);
131132
132
- sz += snprintf(page + sz, PAGE_SIZE - sz,
133
+ sz += scnprintf(page + sz, PAGE_SIZE - sz,
133134 "d:blk:%d/%d,pg:%d/%d,lun:%d/%d,ch:%d/%d,pl:%d/%d,sec:%d/%d\n",
134135 gppaf->blk_offset, gppaf->blk_len,
135136 gppaf->pg_offset, gppaf->pg_len,
....@@ -141,7 +142,7 @@
141142 struct nvm_addrf *ppaf = &pblk->addrf;
142143 struct nvm_addrf *gppaf = &geo->addrf;
143144
144
- sz = snprintf(page, PAGE_SIZE,
145
+ sz = scnprintf(page, PAGE_SIZE,
145146 "pblk:(s:%d)ch:%d/%d,lun:%d/%d,chk:%d/%d/sec:%d/%d\n",
146147 pblk->addrf_len,
147148 ppaf->ch_offset, ppaf->ch_len,
....@@ -149,7 +150,7 @@
149150 ppaf->chk_offset, ppaf->chk_len,
150151 ppaf->sec_offset, ppaf->sec_len);
151152
152
- sz += snprintf(page + sz, PAGE_SIZE - sz,
153
+ sz += scnprintf(page + sz, PAGE_SIZE - sz,
153154 "device:ch:%d/%d,lun:%d/%d,chk:%d/%d,sec:%d/%d\n",
154155 gppaf->ch_offset, gppaf->ch_len,
155156 gppaf->lun_offset, gppaf->lun_len,
....@@ -277,11 +278,11 @@
277278 pblk_err(pblk, "corrupted free line list:%d/%d\n",
278279 nr_free_lines, free_line_cnt);
279280
280
- sz = snprintf(page, PAGE_SIZE - sz,
281
+ sz = scnprintf(page, PAGE_SIZE - sz,
281282 "line: nluns:%d, nblks:%d, nsecs:%d\n",
282283 geo->all_luns, lm->blk_per_line, lm->sec_per_line);
283284
284
- sz += snprintf(page + sz, PAGE_SIZE - sz,
285
+ sz += scnprintf(page + sz, PAGE_SIZE - sz,
285286 "lines:d:%d,l:%d-f:%d,m:%d/%d,c:%d,b:%d,co:%d(d:%d,l:%d)t:%d\n",
286287 cur_data, cur_log,
287288 nr_free_lines,
....@@ -291,12 +292,12 @@
291292 d_line_cnt, l_line_cnt,
292293 l_mg->nr_lines);
293294
294
- sz += snprintf(page + sz, PAGE_SIZE - sz,
295
+ sz += scnprintf(page + sz, PAGE_SIZE - sz,
295296 "GC: full:%d, high:%d, mid:%d, low:%d, empty:%d, werr: %d, queue:%d\n",
296297 gc_full, gc_high, gc_mid, gc_low, gc_empty, gc_werr,
297298 atomic_read(&pblk->gc.read_inflight_gc));
298299
299
- sz += snprintf(page + sz, PAGE_SIZE - sz,
300
+ sz += scnprintf(page + sz, PAGE_SIZE - sz,
300301 "data (%d) cur:%d, left:%d, vsc:%d, s:%d, map:%d/%d (%d)\n",
301302 cur_data, cur_sec, msecs, vsc, sec_in_line,
302303 map_weight, lm->sec_per_line,
....@@ -312,19 +313,19 @@
312313 struct pblk_line_meta *lm = &pblk->lm;
313314 ssize_t sz = 0;
314315
315
- sz = snprintf(page, PAGE_SIZE - sz,
316
+ sz = scnprintf(page, PAGE_SIZE - sz,
316317 "smeta - len:%d, secs:%d\n",
317318 lm->smeta_len, lm->smeta_sec);
318
- sz += snprintf(page + sz, PAGE_SIZE - sz,
319
+ sz += scnprintf(page + sz, PAGE_SIZE - sz,
319320 "emeta - len:%d, sec:%d, bb_start:%d\n",
320321 lm->emeta_len[0], lm->emeta_sec[0],
321322 lm->emeta_bb);
322
- sz += snprintf(page + sz, PAGE_SIZE - sz,
323
+ sz += scnprintf(page + sz, PAGE_SIZE - sz,
323324 "bitmap lengths: sec:%d, blk:%d, lun:%d\n",
324325 lm->sec_bitmap_len,
325326 lm->blk_bitmap_len,
326327 lm->lun_bitmap_len);
327
- sz += snprintf(page + sz, PAGE_SIZE - sz,
328
+ sz += scnprintf(page + sz, PAGE_SIZE - sz,
328329 "blk_line:%d, sec_line:%d, sec_blk:%d\n",
329330 lm->blk_per_line,
330331 lm->sec_per_line,
....@@ -343,12 +344,12 @@
343344 {
344345 int sz;
345346
346
- sz = snprintf(page, PAGE_SIZE,
347
+ sz = scnprintf(page, PAGE_SIZE,
347348 "user:%lld gc:%lld pad:%lld WA:",
348349 user, gc, pad);
349350
350351 if (!user) {
351
- sz += snprintf(page + sz, PAGE_SIZE - sz, "NaN\n");
352
+ sz += scnprintf(page + sz, PAGE_SIZE - sz, "NaN\n");
352353 } else {
353354 u64 wa_int;
354355 u32 wa_frac;
....@@ -357,7 +358,7 @@
357358 wa_int = div64_u64(wa_int, user);
358359 wa_int = div_u64_rem(wa_int, 100000, &wa_frac);
359360
360
- sz += snprintf(page + sz, PAGE_SIZE - sz, "%llu.%05u\n",
361
+ sz += scnprintf(page + sz, PAGE_SIZE - sz, "%llu.%05u\n",
361362 wa_int, wa_frac);
362363 }
363364
....@@ -400,9 +401,9 @@
400401 total = atomic64_read(&pblk->nr_flush) - pblk->nr_flush_rst;
401402 if (!total) {
402403 for (i = 0; i < (buckets + 1); i++)
403
- sz += snprintf(page + sz, PAGE_SIZE - sz,
404
+ sz += scnprintf(page + sz, PAGE_SIZE - sz,
404405 "%d:0 ", i);
405
- sz += snprintf(page + sz, PAGE_SIZE - sz, "\n");
406
+ sz += scnprintf(page + sz, PAGE_SIZE - sz, "\n");
406407
407408 return sz;
408409 }
....@@ -410,7 +411,7 @@
410411 for (i = 0; i < buckets; i++)
411412 total_buckets += atomic64_read(&pblk->pad_dist[i]);
412413
413
- sz += snprintf(page + sz, PAGE_SIZE - sz, "0:%lld%% ",
414
+ sz += scnprintf(page + sz, PAGE_SIZE - sz, "0:%lld%% ",
414415 bucket_percentage(total - total_buckets, total));
415416
416417 for (i = 0; i < buckets; i++) {
....@@ -418,10 +419,10 @@
418419
419420 p = bucket_percentage(atomic64_read(&pblk->pad_dist[i]),
420421 total);
421
- sz += snprintf(page + sz, PAGE_SIZE - sz, "%d:%lld%% ",
422
+ sz += scnprintf(page + sz, PAGE_SIZE - sz, "%d:%lld%% ",
422423 i + 1, p);
423424 }
424
- sz += snprintf(page + sz, PAGE_SIZE - sz, "\n");
425
+ sz += scnprintf(page + sz, PAGE_SIZE - sz, "\n");
425426
426427 return sz;
427428 }
....@@ -478,6 +479,13 @@
478479 if (kstrtouint(page, 0, &sec_per_write))
479480 return -EINVAL;
480481
482
+ if (!pblk_is_oob_meta_supported(pblk)) {
483
+ /* For packed metadata case it is
484
+ * not allowed to change sec_per_write.
485
+ */
486
+ return -EINVAL;
487
+ }
488
+
481489 if (sec_per_write < pblk->min_write_pgs
482490 || sec_per_write > pblk->max_write_pgs
483491 || sec_per_write % pblk->min_write_pgs != 0)