Thread (58 messages) 58 messages, 5 authors, 2012-11-16

Re: [RFC v4+ hot_track 14/19] vfs: add debugfs support

From: Zhi Yong Wu <hidden>
Date: 2012-11-07 07:49:27
Also in: linux-btrfs, linux-fsdevel, lkml

On Wed, Nov 7, 2012 at 7:45 AM, David Sterba [off-list ref] wrote:
On Mon, Oct 29, 2012 at 12:30:56PM +0800, zwu.kernel@gmail.com wrote:
quoted
+static int hot_range_seq_show(struct seq_file *seq, void *v)
+{
+     struct hot_range_item *hr = v;
+     struct hot_inode_item *he = hr->hot_inode;
+     struct hot_freq_data *freq_data = &hr->hot_range.hot_freq_data;
+
+     /* Always lock hot_inode_item first */
+     spin_lock(&he->hot_inode.lock);
+     spin_lock(&hr->hot_range.lock);
+     seq_printf(seq, "inode #%llu, range start " \
the # seems unnecessary to me
OK, removed.
quoted
+                     "%llu (range len %u) reads %u, writes %u, "
+                     "avg read time %llu, avg write time %llu, temp %u\n",
compiler will complain if it sees a %llu format and not the expected
type of 'unsigned long long'
When built, i haven't seen any warning report about this...
quoted
+                     he->i_ino,
                        (unsigned long long)he->i_ino,
quoted
+                     (u64)hr->start * RANGE_SIZE,
+                     hr->len,
+                     freq_data->nr_reads,
+                     freq_data->nr_writes,
+                     freq_data->avg_delta_reads / NSEC_PER_MSEC,
+                     freq_data->avg_delta_writes / NSEC_PER_MSEC,
+                     freq_data->last_temp >> (32 - HEAT_MAP_BITS));
+     spin_unlock(&hr->hot_range.lock);
+     spin_unlock(&he->hot_inode.lock);
+
+     return 0;
+}
+
+static int hot_inode_seq_show(struct seq_file *seq, void *v)
+{
+     struct hot_inode_item *he = v;
+     struct hot_freq_data *freq_data = &he->hot_inode.hot_freq_data;
+
+     spin_lock(&he->hot_inode.lock);
+     seq_printf(seq, "inode #%llu, reads %u, writes %u, " \
+             "avg read time %llu, avg write time %llu, temp %u\n",
(same here)
ditto.
quoted
+             he->i_ino,
+             freq_data->nr_reads,
+             freq_data->nr_writes,
+             freq_data->avg_delta_reads / NSEC_PER_MSEC,
+             freq_data->avg_delta_writes / NSEC_PER_MSEC,
+             freq_data->last_temp >> (32 - HEAT_MAP_BITS));
+     spin_unlock(&he->hot_inode.lock);
+
+     return 0;
+}

+static void *hot_spot_range_seq_next(struct seq_file *seq, void *v, loff_t *pos)
+{
+     struct hot_info *root = seq->private;
+     struct hot_range_item *hr_next, *hr = v;
+     struct hot_comm_item *comm_item;
+     struct list_head *n_list;
+     int i =
+      hr->hot_range.hot_freq_data.last_temp >> (32 - HEAT_MAP_BITS);
now I have noticed that I've seen the ... (32 - HEAT_MAP_BITS)
expression so many times that it tend to think it deserves a helper
function
This helper function has existed, hot_raw_shift(), i will replace this with it.
quoted
+
+     n_list = seq_list_next(&hr->hot_range.n_list,
+             &root->heat_range_map[i].node_list, pos);
+     hot_range_item_put(hr);
+next:
+     if (n_list) {
+             comm_item = container_of(n_list,
+                     struct hot_comm_item, n_list);
+             hr_next = container_of(comm_item,
+                     struct hot_range_item, hot_range);
+             kref_get(&hr_next->hot_range.refs);
+             return hr_next;
+     } else if (--i >= 0) {
+             n_list = seq_list_next(&root->heat_range_map[i].node_list,
+                             &root->heat_range_map[i].node_list, pos);
+             goto next;
+     }
+
+     return NULL;
+}
+
+static void hot_debugfs_exit(struct super_block *sb)
+{
+     struct dentry *vol_dentry;
+
+     vol_dentry = debugfs_get_dentry(sb->s_id,
+                             sb->s_hot_root->debugfs_root, strlen(sb->s_id));
+     /* remove all debugfs entries recursively from the volume root */
+     if (vol_dentry)
+             debugfs_remove_recursive(vol_dentry);
+     else
+             BUG_ON(1);
                BUG()
done, thanks.
quoted
+
+     if (list_empty(&sb->s_hot_root->debugfs_root->d_subdirs))
+             debugfs_remove(sb->s_hot_root->debugfs_root);
+}
+
+/*
david


-- 
Regards,

Zhi Yong Wu
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help