Changeset 234


Ignore:
Timestamp:
09/29/13 18:34:39 (11 years ago)
Author:
atzm
Message:

tune branches those are called many times

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ksyslog/trunk/ksyslog.c

    r233 r234  
    5555        set_fs(get_ds()); 
    5656 
    57         if (path_lookup(path, LOOKUP_OPEN|LOOKUP_FOLLOW, &nd)) 
     57        if (unlikely(path_lookup(path, LOOKUP_OPEN|LOOKUP_FOLLOW, &nd))) 
    5858                file = filp_open(path, O_CREAT|O_WRONLY|O_APPEND|O_LARGEFILE, 0600); 
    5959        else 
    6060                file = filp_open(path, O_WRONLY|O_APPEND|O_LARGEFILE, 0); 
    6161 
    62         if (IS_ERR(file)) 
    63                 goto out; 
    64  
    65         if (S_ISDIR(file->f_path.dentry->d_inode->i_mode)) { 
     62        if (unlikely(IS_ERR(file))) 
     63                goto out; 
     64 
     65        if (unlikely(S_ISDIR(file->f_path.dentry->d_inode->i_mode))) { 
    6666                ksyslog_close(file); 
    6767                file = ERR_PTR(-EISDIR); 
     
    6969        } 
    7070 
    71         if (file->f_pos < 0) { 
     71        if (unlikely(file->f_pos < 0)) { 
    7272                ksyslog_close(file); 
    7373                file = ERR_PTR(-EIO); 
     
    9696 
    9797static void 
    98 ksyslog_drop_warning(struct ksyslog_entry *entry) 
     98ksyslog_drop_warning(const struct ksyslog_entry *entry) 
    9999{ 
    100100        pr_warn("dropped: %llu %s.%s %u.%u.%u.%u %.*s\n", 
     
    108108 
    109109static int 
    110 ksyslog_format(char **buf, struct ksyslog_entry *entry) 
     110ksyslog_format(char **buf, const struct ksyslog_entry *entry) 
    111111{ 
    112112        *buf = kzalloc(54 + entry->length + 2, GFP_ATOMIC); 
    113         if (*buf == NULL) 
     113        if (unlikely(*buf == NULL)) 
    114114                return -ENOMEM; 
    115115 
     
    124124 
    125125static struct ksyslog_entry * 
    126 ksyslog_entry_create(struct sk_buff *skb, struct iphdr *iph, struct udphdr *udph) 
     126ksyslog_entry_create(const struct sk_buff *skb, 
     127                     const struct iphdr *iph, const struct udphdr *udph) 
    127128{ 
    128129        struct ksyslog_entry *entry; 
     
    148149 
    149150        entry = kzalloc(sizeof(*entry), GFP_ATOMIC); 
    150         if (entry == NULL) 
     151        if (unlikely(entry == NULL)) 
    151152                return ERR_PTR(-ENOMEM); 
    152153 
    153154        length = skb->len - (start - skb->data); 
    154155        entry->data = kzalloc(length, GFP_ATOMIC); 
    155         if (entry->data == NULL) { 
     156        if (unlikely(entry->data == NULL)) { 
    156157                kfree(entry); 
    157158                return ERR_PTR(-ENOMEM); 
    158159        } 
    159  
    160         entry->facility = facility; 
    161         entry->severity = severity; 
    162160 
    163161        if (skb->tstamp.tv64) 
     
    166164                do_gettimeofday(&entry->tv); 
    167165 
     166        entry->facility = facility; 
     167        entry->severity = severity; 
     168 
    168169        entry->daddr.addr32 = iph->daddr; 
    169170        entry->saddr.addr32 = iph->saddr; 
     
    176177 
    177178        for (i = 0; i < length; i++) 
    178                 if (entry->data[i] == '\n') 
     179                if (unlikely(entry->data[i] == '\n')) 
    179180                        entry->data[i] = ' '; 
    180181 
     
    193194ksyslog_entry_add(struct ksyslog_queue *queue, struct ksyslog_entry *entry) 
    194195{ 
    195         if (queue->length >= ksyslog_queue_max) 
     196        if (unlikely(queue->length >= ksyslog_queue_max)) 
    196197                return -ENOBUFS; 
    197198        list_add_tail_rcu(&entry->list, &queue->head); 
     
    225226        list_for_each_entry_safe(entry, next, &from->head, list) { 
    226227                ksyslog_entry_del(from, entry, false); 
    227                 if (ksyslog_entry_add(to, entry)) { 
     228                if (unlikely(ksyslog_entry_add(to, entry))) { 
    228229                        ksyslog_drop_warning(entry); 
    229230                        call_rcu(&entry->rcu, ksyslog_entry_free); 
     
    264265 
    265266        file = ksyslog_open(ksyslog_path); 
    266         if (IS_ERR(file)) { 
     267        if (unlikely(IS_ERR(file))) { 
    267268                spin_unlock(&ksyslog_vfs_lock); 
    268269 
     
    281282 
    282283                length = ksyslog_format(&buf, entry); 
    283                 if (length < 0) 
     284                if (unlikely(length < 0)) 
    284285                        goto restore; 
    285286 
    286                 if (ksyslog_write(file, buf, length) < 0) { 
     287                if (unlikely(ksyslog_write(file, buf, length) < 0)) { 
    287288                        kfree(buf); 
    288289                        goto restore; 
     
    295296restore: 
    296297                spin_lock_bh(&ksyslog_queue_lock); 
    297                 if (ksyslog_entry_add(&ksyslog_queue, entry)) { 
     298                if (unlikely(ksyslog_entry_add(&ksyslog_queue, entry))) { 
    298299                        ksyslog_drop_warning(entry); 
    299300                        call_rcu(&entry->rcu, ksyslog_entry_free); 
     
    301302                spin_unlock_bh(&ksyslog_queue_lock); 
    302303        } 
     304 
    303305        ksyslog_close(file); 
    304306        spin_unlock(&ksyslog_vfs_lock); 
     
    317319 
    318320        err = skb_linearize(skb); 
    319         if (err) 
     321        if (unlikely(err)) 
    320322                goto out; 
    321323 
     
    323325        udph = udp_hdr(skb); 
    324326 
    325         if (!skb_pull(skb, sizeof(*udph))) { 
     327        if (unlikely(!skb_pull(skb, sizeof(*udph)))) { 
    326328                err = -EINVAL; 
    327329                goto out; 
     
    329331 
    330332        entry = ksyslog_entry_create(skb, iph, udph); 
    331         if (IS_ERR(entry)) { 
     333        if (unlikely(IS_ERR(entry))) { 
    332334                err = PTR_ERR(entry); 
    333335                goto out; 
     
    338340        spin_unlock_bh(&ksyslog_queue_lock); 
    339341 
    340         if (err) 
     342        if (unlikely(err)) 
    341343                ksyslog_entry_free(&entry->rcu); 
    342344 
    343345out: 
    344         if (err) 
     346        if (unlikely(err)) 
    345347                UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, IS_UDPLITE(sk)); 
    346348 
Note: See TracChangeset for help on using the changeset viewer.