忍者ブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

CentOS6.3がでたので、さっそくインストールして使おうと思ったら、通信できない。
bonding+VLAN という環境で使ってるので、設定ミスかと色々悩んだ結果、バグでした。

カーネル: 2.6.32-279.el6.x86_64
http://bugs.centos.org/view.php?id=5816

カーネルパニックに出会って、まわりに言ったらあっさりこんな情報を送ってくれました。orz

ちなみに、以下の手順でパニックが発生しました。

(1) bondingインターフェースをダウン
  # ifdown bond0
(2) bondingインターフェースをアップ
  # ifup bond0
  ここで、突然通信できるようになりました。
(3) ネットワークスクリプトの再起動
  # /etc/init.d/network restart

パニック発生

general protection fault: 0000 [#1] SMP
last sysfs file: /sys/devices/virtual/net/bond0.31/broadcast
CPU 1
Modules linked in: bonding 8021q garp stp llc ipv6 dcdbas microcode serio_raw iTCO_wdt iTCO_vendor_support tg3 sg i3200_edac edac_core ext4 mbcac]

Pid: 27521, comm: pidof Not tainted 2.6.32-279.1.1.el6.x86_64 #1 Dell Inc. PowerEdge R200/0FW0G7
RIP: 0010:[<ffffffff8143cc83>]  [<ffffffff8143cc83>] dev_gro_receive+0x33/0x290
RSP: 0018:ffff880028283cb0  EFLAGS: 00010282
RAX: 677568097665646f RBX: ffff880229176480 RCX: ffff880229176480
RDX: 0000000000000608 RSI: ffff880229176480 RDI: ffff880228c8a760
RBP: ffff880028283ce0 R08: ffff880228d83020 R09: 0000000000000000
R10: fffffffffffffff0 R11: 0000000000000040 R12: ffff880228c8a760
R13: ffff880229176480 R14: ffff8802291764b8 R15: 000000000000001f
FS:  00007eff3549a700(0000) GS:ffff880028280000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007eff354a1000 CR3: 00000002277f4000 CR4: 00000000000406e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process pidof (pid: 27521, threadinfo ffff880229382000, task ffff880227e8eae0)
Stack:
ffff880028283cc0 000000000000001f ffff880228c8a760 ffff880229176480
<d> ffff880229176480 000000000000001f ffff880028283d00 ffffffff814d7af8
<d> ffff880028283d20 ffff880229176480 ffff880028283d30 ffffffff814d7d7a
Call Trace:
<IRQ>
[<ffffffff814d7af8>] vlan_gro_common+0x188/0x230
[<ffffffff814d7d7a>] vlan_gro_receive+0x7a/0xa0
[<ffffffffa0250172>] tg3_poll_work+0x612/0xe30 [tg3]
[<ffffffff8110dc28>] ? perf_event_task_tick+0xa8/0x2f0
[<ffffffffa025807b>] tg3_poll+0x7b/0x440 [tg3]
[<ffffffff8143f1a3>] net_rx_action+0x103/0x2f0
[<ffffffff81073ec1>] __do_softirq+0xc1/0x1e0
[<ffffffff810db810>] ? handle_IRQ_event+0x60/0x170
[<ffffffff81073f1f>] ? __do_softirq+0x11f/0x1e0
[<ffffffff8100c24c>] call_softirq+0x1c/0x30
[<ffffffff8100de85>] do_softirq+0x65/0xa0
[<ffffffff81073ca5>] irq_exit+0x85/0x90
[<ffffffff81505b05>] do_IRQ+0x75/0xf0
[<ffffffff8100ba53>] ret_from_intr+0x0/0x11
<EOI>
[<ffffffff8112afc8>] ? release_pages+0x48/0x250
[<ffffffff811403a9>] ? get_user_pages+0x49/0x50
[<ffffffff8150327e>] ? do_page_fault+0x3e/0xa0
[<ffffffff8116b680>] ? mem_cgroup_get_reclaim_stat_from_page+0x20/0x70
[<ffffffff8112b517>] ____pagevec_lru_add+0x167/0x180
[<ffffffff8112b69b>] lru_add_drain+0x9b/0xa0
[<ffffffff811448ee>] unmap_region+0x4e/0x130
[<ffffffff81144ff6>] do_munmap+0x2b6/0x3a0
[<ffffffff81145136>] sys_munmap+0x56/0x80
[<ffffffff8100b0f2>] system_call_fastpath+0x16/0x1b
Code: 48 89 5d d8 4c 89 65 e0 4c 89 6d e8 4c 89 75 f0 4c 89 7d f8 0f 1f 44 00 00 48 8b 46 20 0f b7 56 7e 49 89 fc 48 89 f3 4c 8d 76 38 <f6> 40 71
RIP  [<ffffffff8143cc83>] dev_gro_receive+0x33/0x290
RSP <ffff880028283cb0>
BUG: scheduling while atomic: swapper/0/0x10000100
---[ end trace fc3a501a071deef7 ]---
Kernel panic - not syncing: Fatal exception in interrupt
Pid: 27521, comm: pidof Tainted: G      D    ---------------    2.6.32-279.1.1.el6.x86_64 #1
Call Trace:
<IRQ>  [<ffffffff814fd12a>] ? panic+0xa0/0x168
[<ffffffff815012d2>] ? oops_end+0xf2/0x100
[<ffffffff8100f26b>] ? die+0x5b/0x90
[<ffffffff81500e32>] ? do_general_protection+0x152/0x160
[<ffffffff8142fb82>] ? kfree_skb+0x42/0x90
[<ffffffff81500605>] ? general_protection+0x25/0x30
[<ffffffff8143cc83>] ? dev_gro_receive+0x33/0x290
[<ffffffff814d7af8>] ? vlan_gro_common+0x188/0x230
[<ffffffff814d7d7a>] ? vlan_gro_receive+0x7a/0xa0
[<ffffffffa0250172>] ? tg3_poll_work+0x612/0xe30 [tg3]
[<ffffffff8110dc28>] ? perf_event_task_tick+0xa8/0x2f0
[<ffffffffa025807b>] ? tg3_poll+0x7b/0x440 [tg3]
[<ffffffff8143f1a3>] ? net_rx_action+0x103/0x2f0
[<ffffffff81073ec1>] ? __do_softirq+0xc1/0x1e0
[<ffffffff810db810>] ? handle_IRQ_event+0x60/0x170
[<ffffffff81073f1f>] ? __do_softirq+0x11f/0x1e0
[<ffffffff8100c24c>] ? call_softirq+0x1c/0x30
[<ffffffff8100de85>] ? do_softirq+0x65/0xa0
[<ffffffff81073ca5>] ? irq_exit+0x85/0x90
[<ffffffff81505b05>] ? do_IRQ+0x75/0xf0
[<ffffffff8100ba53>] ? ret_from_intr+0x0/0x11
<EOI>  [<ffffffff8112afc8>] ? release_pages+0x48/0x250
[<ffffffff811403a9>] ? get_user_pages+0x49/0x50
[<ffffffff8150327e>] ? do_page_fault+0x3e/0xa0
[<ffffffff8116b680>] ? mem_cgroup_get_reclaim_stat_from_page+0x20/0x70
[<ffffffff8112b517>] ? ____pagevec_lru_add+0x167/0x180
[<ffffffff8112b69b>] ? lru_add_drain+0x9b/0xa0
[<ffffffff811448ee>] ? unmap_region+0x4e/0x130
[<ffffffff81144ff6>] ? do_munmap+0x2b6/0x3a0
[<ffffffff81145136>] ? sys_munmap+0x56/0x80
[<ffffffff8100b0f2>] ? system_call_fastpath+0x16/0x1b
Modules linked in: bonding 8021q garp stp llc ipv6 dcdbas microcode serio_raw iTCO_wdt iTCO_vendor_support tg3 sg i3200_edac edac_core ext4 mbcach
panic occurred, switching back to text console
dm_log dm_mod [last unloaded: scsi_wait_scan]
CPU 2
Modules linked in: bonding 8021q garp stp llc ipv6 dcdbas microcode serio_raw iTCO_wdt iTCO_vendor_support tg3 sg i3200_edac edac_core ext4 mbcac]

Pid: 0, comm: swapper Tainted: G      D    ---------------    2.6.32-279.1.1.el6.x86_64 #1 Dell Inc. PowerEdge R200/0FW0G7
RIP: 0010:[<ffffffff81014877>]  [<ffffffff81014877>] mwait_idle+0x77/0xd0
RSP: 0018:ffff88022ae51ee8  EFLAGS: 00000246
RAX: 0000000000000000 RBX: ffff88022ae51ef8 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffff88022ae51fd8 RDI: ffffffff81dda228
RBP: ffffffff8100ba4e R08: 0000000000000000 R09: 0000000000000002
R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000002
R13: ffff88022ae51e78 R14: ffffffff81099015 R15: ffff88022ae51e68
FS:  0000000000000000(0000) GS:ffff880028300000(0000) knlGS:0000000000000000
CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
CR2: 0000000000481046 CR3: 0000000001a85000 CR4: 00000000000406e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process swapper (pid: 0, threadinfo ffff88022ae50000, task ffff88022ae26040)
Stack:
ffff88022ae51fd8 ffffffff81c017c0 ffff88022ae51f28 ffffffff81009e06
<d> ffff88022ae51f18 cf1d5955c0b9d404 0000000000000000 0000000000000000
<d> ffff88022ae51f48 ffffffff814f6cef 0000000000000000 00000002814f6ac5
Call Trace:
[<ffffffff81009e06>] ? cpu_idle+0xb6/0x110
[<ffffffff814f6cef>] ? start_secondary+0x22a/0x26d
Code: d2 65 48 8b 34 25 c8 cb 00 00 48 89 d1 48 8d 86 38 e0 ff ff 0f 01 c8 0f ae f0 48 8b 86 38 e0 ff ff a8 08 75 24 31 c0 fb 0f 01 c9 <5b> 41 5c
Call Trace:
[<ffffffff8150339a>] ? atomic_notifier_call_chain+0x1a/0x20
[<ffffffff81009e06>] ? cpu_idle+0xb6/0x110
[<ffffffff814f6cef>] ? start_secondary+0x22a/0x26d

PR
先週からCentOS5から6への移行を進めているが、またネットワークまわりではまった。
KVMのハイパーバイザーマシンの構築をしているため、一つのボンディングインターフェースに多数のVLANを設定し、それぞれにブリッジインターフェースをひもづけている。

【CentOS5.6でのインターフェース】

bond0---bond0.0011---br0.0011
     |
     --bond0.0012---br0.0012
     |
     --bond0.0013---br0.0013

前回の記事で書いたように、CentOS6ではVLAN設定でVLAN IDの桁数をそろえるため0で埋めることができなくなったようなので、以下のように変更した。

【CentOS6.2でのインターフェース1】

bond0---bond0.11---br0.11
     |
     --bond0.12---br0.12
     |
     --bond0.13---br0.13

■/etc/sysconfig/network-scripts/ifcfg-bond0.11
DEVICE=bond0.11
ONBOOT=yes
BRIDGE=br0.11

■/etc/sysconfig/network-scripts/ifcfg-br0.11
DEVICE=br0.11
TYPE=Bridge
BOOTPROTO=none
DELAY=0

この設定でbr0.11をifupで起動すると、以下のエラーが出て起動できない。

RTNETLINK answers: File exists
エラー: vlan 11をbr0.11としてdev br0に追加でいません

/sbin/ifupの中身をみると、どうやらインターフェース名に「.」を含む場合、それ以下の数字をVLAN IDとして解釈してしまうようだ。
数字以外であれば大丈夫。

■/sbin/ifup
 73 # Ethernet 802.1Q VLAN support
 74 if [ "${VLAN}" = "yes" ] && [ "$ISALIAS" = "no" ]; then
 75     VID=""
 76     MATCH='^.+\.[0-9]{1,4}$'
 77     if [[ "${DEVICE}" =~ $MATCH ]]; then
 78         VID=$(echo "${DEVICE}" | LC_ALL=C sed 's/^.*\.\([0-9]\+\)/\1/')
 79         PHYSDEV=${DEVICE%.*}
 80     fi

なので、ブリッジインターフェースの名前から「.」を抜いて対応することで、無事解決。

【CentOS6.2でのインターフェース2】

bond0---bond0.11---br011
     |
     --bond0.12---br012
     |
     --bond0.13---br013
CentOS5から6への移行の際、VLAN設定でつまづいたのでメモ。

CentOS5で、VLANを利用する際,以下の設定をしていたが、CentOS6ではできなかった。
■/etc/sysconfig/network
VLAN=yes
VLAN_NAME_TYPE=DEV_PLUS_VID

■/etc/sysconfig/network-scripts/ifcfg-bond0.0032
DEVICE=bond0.0032
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.1.232.19
NETMASK=255.255.255.0

この状態で、/etc/init.d/network start すると
■/proc/net/vlan/config
VLAN Dev name    | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID
bond0.0032       | 26  | bond0

と、意図していないVLANIDが割りあたってしまう。

とりあえず、ifcfg-bond0.32を、以下のように0032から32に変更することで正常になった。
DEVICE=bond0.32
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.1.232.19
NETMASK=255.255.255.0

どうやら /sbin/ifup内部の処理で、以下のようなコマンドが発行されてしまうためのようだ。
ip link add dev bond0.0032 link bond0 type vlan id 0032

sh -x  /sbin/ifup bond0.0532を実行して処理を追うと、CentOS5では/sbin/vconfig でVLANの登録をしていて、vconfigの引数として、$VIDに正しく532が入っていた。

/sbin/ifupのバグか?

【CentOS5での実行結果】
~省略~
+ VID=
+ MATCH='^(eth|hsi|bond)[0-9]+\.[0-9]{1,4}$'
+ [[ bond0.0532 =~ ^(eth|hsi|bond)[0-9]+\.[0-9]{1,4}$ ]]
++ echo bond0.0532
++ LC_ALL=C
++ sed 's/^[a-z0-9]*\.0*//'
+ VID=532
+ PHYSDEV=bond0
+ [[ bond0.0532 =~ \^vlan\[0-9]\{1,4}\? ]]
+ '[' -n 532 ']'
+ '[' '!' -d /proc/net/vlan ']'
+ test -z DEV_PLUS_VID
+ /sbin/vconfig set_name_type DEV_PLUS_VID
+ is_available bond0
+ '[' -z bond0 ']'
+ '[' -d /sys/class/net/bond0 ']'
+ return 0
+ check_device_down bond0
+ LC_ALL=C
+ ip -o link show dev bond0
+ grep -q ,UP
+ return 1
+ '[' '!' -f /proc/net/vlan/bond0.0532 ']'
+ /sbin/vconfig add bond0 532
Added VLAN with VID == 532 to IF -:bond0:-
~省略~

【CentOS6.2での実行結果】
~省略~
+ VID=
+ MATCH='^.+\.[0-9]{1,4}$'
+ [[ bond0.0532 =~ ^.+\.[0-9]{1,4}$ ]]
++ echo bond0.0532
++ LC_ALL=C
++ sed 's/^.*\.\([0-9]\+\)/\1/'
+ VID=0532
+ PHYSDEV=bond0
+ MATCH='^vlan[0-9]{1,4}?'
+ [[ bond0.0532 =~ ^vlan[0-9]{1,4}? ]]
+ '[' -n 0532 ']'
+ '[' '!' -d /proc/net/vlan ']'
+ is_available bond0
+ '[' -z bond0 ']'
+ '[' -d /sys/class/net/bond0 ']'
+ return 0
+ check_device_down bond0
+ LC_ALL=C
+ ip -o link show dev bond0
+ grep -q ,UP
+ return 1
+ '[' '!' -f /proc/net/vlan/bond0.0532 ']'
+ '[' '' = no -o '' = 0 ']'
+ ip link add dev bond0.0532 link bond0 type vlan id 0532
~省略~
Copyright (C) 2024 技ブロ All Rights Reserved.
Photo by 戦場に猫 Template Design by kaie
忍者ブログ [PR]