Changeset 240


Ignore:
Timestamp:
10/01/13 02:26:09 (11 years ago)
Author:
atzm
Message:
  • generalize ksyslog_queue_seq_ops
  • add nr_queued
File:
1 edited

Legend:

Unmodified
Added
Removed
  • ksyslog/trunk/ksyslog.c

    r239 r240  
    2525static struct proc_dir_entry *ksyslog_procdir = NULL; 
    2626static struct proc_dir_entry *ksyslog_proc_queue = NULL; 
     27static struct proc_dir_entry *ksyslog_proc_nr_queued = NULL; 
    2728#endif 
    2829 
     
    372373#ifdef CONFIG_PROC_FS 
    373374static void * 
    374 ksyslog_queue_seq_start(struct seq_file *seq, loff_t *pos) 
     375ksyslog_rculist_seq_start(struct seq_file *seq, loff_t *pos) 
    375376{ 
    376377        struct list_head *lh, *head = seq->private; 
     
    387388 
    388389static void * 
    389 ksyslog_queue_seq_next(struct seq_file *seq, void *v, loff_t *pos) 
     390ksyslog_rculist_seq_next(struct seq_file *seq, void *v, loff_t *pos) 
    390391{ 
    391392        struct list_head *lh = rcu_dereference(((struct list_head *)v)->next); 
     
    395396 
    396397static void 
    397 ksyslog_queue_seq_stop(struct seq_file *seq, void *v) 
     398ksyslog_rculist_seq_stop(struct seq_file *seq, void *v) 
    398399{ 
    399400        rcu_read_unlock(); 
     
    417418 
    418419static struct seq_operations ksyslog_queue_seq_ops = { 
    419         .start = ksyslog_queue_seq_start, 
    420         .next  = ksyslog_queue_seq_next, 
    421         .stop  = ksyslog_queue_seq_stop, 
     420        .start = ksyslog_rculist_seq_start, 
     421        .next  = ksyslog_rculist_seq_next, 
     422        .stop  = ksyslog_rculist_seq_stop, 
    422423        .show  = ksyslog_queue_seq_show, 
    423424}; 
     
    443444 
    444445static int 
     446ksyslog_nr_queued_seq_show(struct seq_file *seq, void *v) 
     447{ 
     448        seq_printf(seq, "%u\n", ksyslog_queue.length); 
     449        return 0; 
     450} 
     451 
     452static int 
     453ksyslog_nr_queued_seq_open(struct inode *inode, struct file *file) 
     454{ 
     455        return single_open(file, ksyslog_nr_queued_seq_show, PDE(inode)->data); 
     456} 
     457 
     458static struct file_operations ksyslog_nr_queued_fops = { 
     459        .owner   = THIS_MODULE, 
     460        .open    = ksyslog_nr_queued_seq_open, 
     461        .read    = seq_read, 
     462        .llseek  = seq_lseek, 
     463        .release = single_release, 
     464}; 
     465 
     466static int 
    445467ksyslog_proc_init(void) 
    446468{ 
     
    459481        } 
    460482 
     483        ksyslog_proc_nr_queued = proc_create("nr_queued", S_IRUGO, ksyslog_procdir, 
     484                                             &ksyslog_nr_queued_fops); 
     485        if (ksyslog_proc_nr_queued == NULL) { 
     486                remove_proc_entry(ksyslog_proc_queue->name, ksyslog_proc_queue->parent); 
     487                remove_proc_entry(ksyslog_procdir->name, ksyslog_procdir->parent); 
     488                pr_err("proc_create failed\n"); 
     489                return -ENOMEM; 
     490        } 
     491 
    461492        return 0; 
    462493} 
     
    465496ksyslog_proc_destroy(void) 
    466497{ 
     498        if (ksyslog_proc_nr_queued) 
     499                remove_proc_entry(ksyslog_proc_nr_queued->name, ksyslog_proc_nr_queued->parent); 
     500        ksyslog_proc_nr_queued = NULL; 
     501 
    467502        if (ksyslog_proc_queue) 
    468503                remove_proc_entry(ksyslog_proc_queue->name, ksyslog_proc_queue->parent); 
Note: See TracChangeset for help on using the changeset viewer.