| .. | .. |
|---|
| 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) |
|---|