.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0 |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright (C) 2016 CNEX Labs |
---|
3 | 4 | * Initial release: Javier Gonzalez <javier@cnexlabs.com> |
---|
.. | .. |
---|
36 | 37 | active = 0; |
---|
37 | 38 | up(&rlun->wr_sem); |
---|
38 | 39 | } |
---|
39 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, |
---|
| 40 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, |
---|
40 | 41 | "pblk: pos:%d, ch:%d, lun:%d - %d\n", |
---|
41 | 42 | i, |
---|
42 | 43 | rlun->bppa.a.ch, |
---|
.. | .. |
---|
119 | 120 | struct nvm_addrf_12 *ppaf = (struct nvm_addrf_12 *)&pblk->addrf; |
---|
120 | 121 | struct nvm_addrf_12 *gppaf = (struct nvm_addrf_12 *)&geo->addrf; |
---|
121 | 122 | |
---|
122 | | - sz = snprintf(page, PAGE_SIZE, |
---|
| 123 | + sz = scnprintf(page, PAGE_SIZE, |
---|
123 | 124 | "g:(b:%d)blk:%d/%d,pg:%d/%d,lun:%d/%d,ch:%d/%d,pl:%d/%d,sec:%d/%d\n", |
---|
124 | 125 | pblk->addrf_len, |
---|
125 | 126 | ppaf->blk_offset, ppaf->blk_len, |
---|
.. | .. |
---|
129 | 130 | ppaf->pln_offset, ppaf->pln_len, |
---|
130 | 131 | ppaf->sec_offset, ppaf->sec_len); |
---|
131 | 132 | |
---|
132 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, |
---|
| 133 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, |
---|
133 | 134 | "d:blk:%d/%d,pg:%d/%d,lun:%d/%d,ch:%d/%d,pl:%d/%d,sec:%d/%d\n", |
---|
134 | 135 | gppaf->blk_offset, gppaf->blk_len, |
---|
135 | 136 | gppaf->pg_offset, gppaf->pg_len, |
---|
.. | .. |
---|
141 | 142 | struct nvm_addrf *ppaf = &pblk->addrf; |
---|
142 | 143 | struct nvm_addrf *gppaf = &geo->addrf; |
---|
143 | 144 | |
---|
144 | | - sz = snprintf(page, PAGE_SIZE, |
---|
| 145 | + sz = scnprintf(page, PAGE_SIZE, |
---|
145 | 146 | "pblk:(s:%d)ch:%d/%d,lun:%d/%d,chk:%d/%d/sec:%d/%d\n", |
---|
146 | 147 | pblk->addrf_len, |
---|
147 | 148 | ppaf->ch_offset, ppaf->ch_len, |
---|
.. | .. |
---|
149 | 150 | ppaf->chk_offset, ppaf->chk_len, |
---|
150 | 151 | ppaf->sec_offset, ppaf->sec_len); |
---|
151 | 152 | |
---|
152 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, |
---|
| 153 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, |
---|
153 | 154 | "device:ch:%d/%d,lun:%d/%d,chk:%d/%d,sec:%d/%d\n", |
---|
154 | 155 | gppaf->ch_offset, gppaf->ch_len, |
---|
155 | 156 | gppaf->lun_offset, gppaf->lun_len, |
---|
.. | .. |
---|
277 | 278 | pblk_err(pblk, "corrupted free line list:%d/%d\n", |
---|
278 | 279 | nr_free_lines, free_line_cnt); |
---|
279 | 280 | |
---|
280 | | - sz = snprintf(page, PAGE_SIZE - sz, |
---|
| 281 | + sz = scnprintf(page, PAGE_SIZE - sz, |
---|
281 | 282 | "line: nluns:%d, nblks:%d, nsecs:%d\n", |
---|
282 | 283 | geo->all_luns, lm->blk_per_line, lm->sec_per_line); |
---|
283 | 284 | |
---|
284 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, |
---|
| 285 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, |
---|
285 | 286 | "lines:d:%d,l:%d-f:%d,m:%d/%d,c:%d,b:%d,co:%d(d:%d,l:%d)t:%d\n", |
---|
286 | 287 | cur_data, cur_log, |
---|
287 | 288 | nr_free_lines, |
---|
.. | .. |
---|
291 | 292 | d_line_cnt, l_line_cnt, |
---|
292 | 293 | l_mg->nr_lines); |
---|
293 | 294 | |
---|
294 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, |
---|
| 295 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, |
---|
295 | 296 | "GC: full:%d, high:%d, mid:%d, low:%d, empty:%d, werr: %d, queue:%d\n", |
---|
296 | 297 | gc_full, gc_high, gc_mid, gc_low, gc_empty, gc_werr, |
---|
297 | 298 | atomic_read(&pblk->gc.read_inflight_gc)); |
---|
298 | 299 | |
---|
299 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, |
---|
| 300 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, |
---|
300 | 301 | "data (%d) cur:%d, left:%d, vsc:%d, s:%d, map:%d/%d (%d)\n", |
---|
301 | 302 | cur_data, cur_sec, msecs, vsc, sec_in_line, |
---|
302 | 303 | map_weight, lm->sec_per_line, |
---|
.. | .. |
---|
312 | 313 | struct pblk_line_meta *lm = &pblk->lm; |
---|
313 | 314 | ssize_t sz = 0; |
---|
314 | 315 | |
---|
315 | | - sz = snprintf(page, PAGE_SIZE - sz, |
---|
| 316 | + sz = scnprintf(page, PAGE_SIZE - sz, |
---|
316 | 317 | "smeta - len:%d, secs:%d\n", |
---|
317 | 318 | lm->smeta_len, lm->smeta_sec); |
---|
318 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, |
---|
| 319 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, |
---|
319 | 320 | "emeta - len:%d, sec:%d, bb_start:%d\n", |
---|
320 | 321 | lm->emeta_len[0], lm->emeta_sec[0], |
---|
321 | 322 | lm->emeta_bb); |
---|
322 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, |
---|
| 323 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, |
---|
323 | 324 | "bitmap lengths: sec:%d, blk:%d, lun:%d\n", |
---|
324 | 325 | lm->sec_bitmap_len, |
---|
325 | 326 | lm->blk_bitmap_len, |
---|
326 | 327 | lm->lun_bitmap_len); |
---|
327 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, |
---|
| 328 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, |
---|
328 | 329 | "blk_line:%d, sec_line:%d, sec_blk:%d\n", |
---|
329 | 330 | lm->blk_per_line, |
---|
330 | 331 | lm->sec_per_line, |
---|
.. | .. |
---|
343 | 344 | { |
---|
344 | 345 | int sz; |
---|
345 | 346 | |
---|
346 | | - sz = snprintf(page, PAGE_SIZE, |
---|
| 347 | + sz = scnprintf(page, PAGE_SIZE, |
---|
347 | 348 | "user:%lld gc:%lld pad:%lld WA:", |
---|
348 | 349 | user, gc, pad); |
---|
349 | 350 | |
---|
350 | 351 | if (!user) { |
---|
351 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, "NaN\n"); |
---|
| 352 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, "NaN\n"); |
---|
352 | 353 | } else { |
---|
353 | 354 | u64 wa_int; |
---|
354 | 355 | u32 wa_frac; |
---|
.. | .. |
---|
357 | 358 | wa_int = div64_u64(wa_int, user); |
---|
358 | 359 | wa_int = div_u64_rem(wa_int, 100000, &wa_frac); |
---|
359 | 360 | |
---|
360 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, "%llu.%05u\n", |
---|
| 361 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, "%llu.%05u\n", |
---|
361 | 362 | wa_int, wa_frac); |
---|
362 | 363 | } |
---|
363 | 364 | |
---|
.. | .. |
---|
400 | 401 | total = atomic64_read(&pblk->nr_flush) - pblk->nr_flush_rst; |
---|
401 | 402 | if (!total) { |
---|
402 | 403 | for (i = 0; i < (buckets + 1); i++) |
---|
403 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, |
---|
| 404 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, |
---|
404 | 405 | "%d:0 ", i); |
---|
405 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, "\n"); |
---|
| 406 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, "\n"); |
---|
406 | 407 | |
---|
407 | 408 | return sz; |
---|
408 | 409 | } |
---|
.. | .. |
---|
410 | 411 | for (i = 0; i < buckets; i++) |
---|
411 | 412 | total_buckets += atomic64_read(&pblk->pad_dist[i]); |
---|
412 | 413 | |
---|
413 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, "0:%lld%% ", |
---|
| 414 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, "0:%lld%% ", |
---|
414 | 415 | bucket_percentage(total - total_buckets, total)); |
---|
415 | 416 | |
---|
416 | 417 | for (i = 0; i < buckets; i++) { |
---|
.. | .. |
---|
418 | 419 | |
---|
419 | 420 | p = bucket_percentage(atomic64_read(&pblk->pad_dist[i]), |
---|
420 | 421 | total); |
---|
421 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, "%d:%lld%% ", |
---|
| 422 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, "%d:%lld%% ", |
---|
422 | 423 | i + 1, p); |
---|
423 | 424 | } |
---|
424 | | - sz += snprintf(page + sz, PAGE_SIZE - sz, "\n"); |
---|
| 425 | + sz += scnprintf(page + sz, PAGE_SIZE - sz, "\n"); |
---|
425 | 426 | |
---|
426 | 427 | return sz; |
---|
427 | 428 | } |
---|
.. | .. |
---|
478 | 479 | if (kstrtouint(page, 0, &sec_per_write)) |
---|
479 | 480 | return -EINVAL; |
---|
480 | 481 | |
---|
| 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 | + |
---|
481 | 489 | if (sec_per_write < pblk->min_write_pgs |
---|
482 | 490 | || sec_per_write > pblk->max_write_pgs |
---|
483 | 491 | || sec_per_write % pblk->min_write_pgs != 0) |
---|