Lines Matching refs:pblk

18  * pblk-sysfs.c - pblk's sysfs
22 #include "pblk.h"
24 static ssize_t pblk_sysfs_luns_show(struct pblk *pblk, char *page)
26 struct nvm_tgt_dev *dev = pblk->dev;
35 rlun = &pblk->luns[i];
41 "pblk: pos:%d, ch:%d, lun:%d - %d\n",
51 static ssize_t pblk_sysfs_rate_limiter(struct pblk *pblk, char *page)
57 free_blocks = pblk_rl_nr_free_blks(&pblk->rl);
58 free_user_blocks = pblk_rl_nr_user_free_blks(&pblk->rl);
59 rb_user_max = pblk->rl.rb_user_max;
60 rb_user_cnt = atomic_read(&pblk->rl.rb_user_cnt);
61 rb_gc_max = pblk->rl.rb_gc_max;
62 rb_gc_cnt = atomic_read(&pblk->rl.rb_gc_cnt);
63 rb_budget = pblk->rl.rb_budget;
64 rb_state = pblk->rl.rb_state;
66 total_blocks = pblk->rl.total_blocks;
76 pblk->rl.high,
80 READ_ONCE(pblk->rl.rb_user_active));
83 static ssize_t pblk_sysfs_gc_state_show(struct pblk *pblk, char *page)
87 pblk_gc_sysfs_state_show(pblk, &gc_enabled, &gc_active);
92 static ssize_t pblk_sysfs_stats(struct pblk *pblk, char *page)
98 atomic_long_read(&pblk->read_failed),
99 atomic_long_read(&pblk->read_high_ecc),
100 atomic_long_read(&pblk->read_empty),
101 atomic_long_read(&pblk->read_failed_gc),
102 atomic_long_read(&pblk->write_failed),
103 atomic_long_read(&pblk->erase_failed));
108 static ssize_t pblk_sysfs_write_buffer(struct pblk *pblk, char *page)
110 return pblk_rb_sysfs(&pblk->rwb, page);
113 static ssize_t pblk_sysfs_ppaf(struct pblk *pblk, char *page)
115 struct nvm_tgt_dev *dev = pblk->dev;
120 struct nvm_addrf_12 *ppaf = (struct nvm_addrf_12 *)&pblk->addrf;
125 pblk->addrf_len,
142 struct nvm_addrf *ppaf = &pblk->addrf;
146 "pblk:(s:%d)ch:%d/%d,lun:%d/%d,chk:%d/%d/sec:%d/%d\n",
147 pblk->addrf_len,
164 static ssize_t pblk_sysfs_lines(struct pblk *pblk, char *page)
166 struct nvm_tgt_dev *dev = pblk->dev;
168 struct pblk_line_meta *lm = &pblk->lm;
169 struct pblk_line_mgmt *l_mg = &pblk->l_mg;
278 pblk_err(pblk, "corrupted free line list:%d/%d\n",
298 atomic_read(&pblk->gc.read_inflight_gc));
304 atomic_read(&pblk->inflight_io));
309 static ssize_t pblk_sysfs_lines_info(struct pblk *pblk, char *page)
311 struct nvm_tgt_dev *dev = pblk->dev;
313 struct pblk_line_meta *lm = &pblk->lm;
337 static ssize_t pblk_sysfs_get_sec_per_write(struct pblk *pblk, char *page)
339 return snprintf(page, PAGE_SIZE, "%d\n", pblk->sec_per_write);
368 static ssize_t pblk_sysfs_get_write_amp_mileage(struct pblk *pblk, char *page)
370 return pblk_get_write_amp(atomic64_read(&pblk->user_wa),
371 atomic64_read(&pblk->gc_wa), atomic64_read(&pblk->pad_wa),
375 static ssize_t pblk_sysfs_get_write_amp_trip(struct pblk *pblk, char *page)
378 atomic64_read(&pblk->user_wa) - pblk->user_rst_wa,
379 atomic64_read(&pblk->gc_wa) - pblk->gc_rst_wa,
380 atomic64_read(&pblk->pad_wa) - pblk->pad_rst_wa, page);
393 static ssize_t pblk_sysfs_get_padding_dist(struct pblk *pblk, char *page)
398 int buckets = pblk->min_write_pgs - 1;
401 total = atomic64_read(&pblk->nr_flush) - pblk->nr_flush_rst;
412 total_buckets += atomic64_read(&pblk->pad_dist[i]);
420 p = bucket_percentage(atomic64_read(&pblk->pad_dist[i]),
431 static ssize_t pblk_sysfs_stats_debug(struct pblk *pblk, char *page)
435 atomic_long_read(&pblk->inflight_writes),
436 atomic_long_read(&pblk->inflight_reads),
437 atomic_long_read(&pblk->req_writes),
438 (u64)atomic64_read(&pblk->nr_flush),
439 atomic_long_read(&pblk->padded_writes),
440 atomic_long_read(&pblk->padded_wb),
441 atomic_long_read(&pblk->sub_writes),
442 atomic_long_read(&pblk->sync_writes),
443 atomic_long_read(&pblk->recov_writes),
444 atomic_long_read(&pblk->recov_gc_writes),
445 atomic_long_read(&pblk->recov_gc_reads),
446 atomic_long_read(&pblk->cache_reads),
447 atomic_long_read(&pblk->sync_reads));
451 static ssize_t pblk_sysfs_gc_force(struct pblk *pblk, const char *page,
464 pblk_gc_sysfs_force(pblk, force);
469 static ssize_t pblk_sysfs_set_sec_per_write(struct pblk *pblk,
482 if (!pblk_is_oob_meta_supported(pblk)) {
489 if (sec_per_write < pblk->min_write_pgs
490 || sec_per_write > pblk->max_write_pgs
491 || sec_per_write % pblk->min_write_pgs != 0)
494 pblk_set_sec_per_write(pblk, sec_per_write);
499 static ssize_t pblk_sysfs_set_write_amp_trip(struct pblk *pblk,
515 pblk->user_rst_wa = atomic64_read(&pblk->user_wa);
516 pblk->pad_rst_wa = atomic64_read(&pblk->pad_wa);
517 pblk->gc_rst_wa = atomic64_read(&pblk->gc_wa);
523 static ssize_t pblk_sysfs_set_padding_dist(struct pblk *pblk,
528 int buckets = pblk->min_write_pgs - 1;
542 atomic64_set(&pblk->pad_dist[i], 0);
544 pblk->nr_flush_rst = atomic64_read(&pblk->nr_flush);
644 struct pblk *pblk = container_of(kobj, struct pblk, kobj);
647 return pblk_sysfs_rate_limiter(pblk, buf);
649 return pblk_sysfs_luns_show(pblk, buf);
651 return pblk_sysfs_gc_state_show(pblk, buf);
653 return pblk_sysfs_stats(pblk, buf);
655 return pblk_sysfs_write_buffer(pblk, buf);
657 return pblk_sysfs_ppaf(pblk, buf);
659 return pblk_sysfs_lines(pblk, buf);
661 return pblk_sysfs_lines_info(pblk, buf);
663 return pblk_sysfs_get_sec_per_write(pblk, buf);
665 return pblk_sysfs_get_write_amp_mileage(pblk, buf);
667 return pblk_sysfs_get_write_amp_trip(pblk, buf);
669 return pblk_sysfs_get_padding_dist(pblk, buf);
672 return pblk_sysfs_stats_debug(pblk, buf);
680 struct pblk *pblk = container_of(kobj, struct pblk, kobj);
683 return pblk_sysfs_gc_force(pblk, buf, len);
685 return pblk_sysfs_set_sec_per_write(pblk, buf, len);
687 return pblk_sysfs_set_write_amp_trip(pblk, buf, len);
689 return pblk_sysfs_set_padding_dist(pblk, buf, len);
705 struct pblk *pblk = tdisk->private_data;
706 struct device *parent_dev = disk_to_dev(pblk->disk);
709 ret = kobject_init_and_add(&pblk->kobj, &pblk_ktype,
711 "%s", "pblk");
713 pblk_err(pblk, "could not register\n");
717 kobject_uevent(&pblk->kobj, KOBJ_ADD);
723 struct pblk *pblk = tdisk->private_data;
725 kobject_uevent(&pblk->kobj, KOBJ_REMOVE);
726 kobject_del(&pblk->kobj);
727 kobject_put(&pblk->kobj);