blk-stat.c (ea68a3e9d14e9e0bf017d178fb4bd53b6deb1482) | blk-stat.c (20de765f6d9da0c47b756429c60b41063b990a10) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Block stat tracking code 4 * 5 * Copyright (C) 2016 Jens Axboe 6 */ 7#include <linux/kernel.h> 8#include <linux/rculist.h> --- 176 unchanged lines hidden (view full) --- 185 call_rcu(&cb->rcu, blk_stat_free_callback_rcu); 186} 187 188void blk_stat_disable_accounting(struct request_queue *q) 189{ 190 unsigned long flags; 191 192 spin_lock_irqsave(&q->stats->lock, flags); | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Block stat tracking code 4 * 5 * Copyright (C) 2016 Jens Axboe 6 */ 7#include <linux/kernel.h> 8#include <linux/rculist.h> --- 176 unchanged lines hidden (view full) --- 185 call_rcu(&cb->rcu, blk_stat_free_callback_rcu); 186} 187 188void blk_stat_disable_accounting(struct request_queue *q) 189{ 190 unsigned long flags; 191 192 spin_lock_irqsave(&q->stats->lock, flags); |
193 if (!--q->stats->accounting) | 193 if (!--q->stats->accounting && list_empty(&q->stats->callbacks)) |
194 blk_queue_flag_clear(QUEUE_FLAG_STATS, q); 195 spin_unlock_irqrestore(&q->stats->lock, flags); 196} 197EXPORT_SYMBOL_GPL(blk_stat_disable_accounting); 198 199void blk_stat_enable_accounting(struct request_queue *q) 200{ 201 unsigned long flags; 202 203 spin_lock_irqsave(&q->stats->lock, flags); | 194 blk_queue_flag_clear(QUEUE_FLAG_STATS, q); 195 spin_unlock_irqrestore(&q->stats->lock, flags); 196} 197EXPORT_SYMBOL_GPL(blk_stat_disable_accounting); 198 199void blk_stat_enable_accounting(struct request_queue *q) 200{ 201 unsigned long flags; 202 203 spin_lock_irqsave(&q->stats->lock, flags); |
204 if (!q->stats->accounting++) | 204 if (!q->stats->accounting++ && list_empty(&q->stats->callbacks)) |
205 blk_queue_flag_set(QUEUE_FLAG_STATS, q); 206 spin_unlock_irqrestore(&q->stats->lock, flags); 207} 208EXPORT_SYMBOL_GPL(blk_stat_enable_accounting); 209 210struct blk_queue_stats *blk_alloc_queue_stats(void) 211{ 212 struct blk_queue_stats *stats; --- 13 unchanged lines hidden (view full) --- 226{ 227 if (!stats) 228 return; 229 230 WARN_ON(!list_empty(&stats->callbacks)); 231 232 kfree(stats); 233} | 205 blk_queue_flag_set(QUEUE_FLAG_STATS, q); 206 spin_unlock_irqrestore(&q->stats->lock, flags); 207} 208EXPORT_SYMBOL_GPL(blk_stat_enable_accounting); 209 210struct blk_queue_stats *blk_alloc_queue_stats(void) 211{ 212 struct blk_queue_stats *stats; --- 13 unchanged lines hidden (view full) --- 226{ 227 if (!stats) 228 return; 229 230 WARN_ON(!list_empty(&stats->callbacks)); 231 232 kfree(stats); 233} |
234 235bool blk_stats_alloc_enable(struct request_queue *q) 236{ 237 struct blk_rq_stat *poll_stat; 238 239 poll_stat = kcalloc(BLK_MQ_POLL_STATS_BKTS, sizeof(*poll_stat), 240 GFP_ATOMIC); 241 if (!poll_stat) 242 return false; 243 244 if (cmpxchg(&q->poll_stat, NULL, poll_stat) != NULL) { 245 kfree(poll_stat); 246 return true; 247 } 248 249 blk_stat_add_callback(q, q->poll_cb); 250 return false; 251} | |