RHEL6 において、2.6.32-279.19.1 では発生しなかった NFSv4 flock が 2.6.32-279.22.1 または 2.6.32-358.el6 で発生し Lock reclaim failed! エラーが表示される
Issue
- nfsv4: flock() が、エラーで失敗せずハングアップになります。
- NFS4 で、前のバージョンでは発生していなかった、ログインとファイルのロック時のエラーが発生します。
- ホームディレクトリが NFS にマウントされています。最新のカーネルでは、グラフィカルセッションにログインすると、1 秒内にカーネルメッセージ "nfs4_reclaim_open_state: Lock reclaim failed!" が多数ログに記録されます。これにより、システムログファイルが大きくなりすぎるため、root のファイルシステムが 1 日 2 日でいっぱいになるという重大な問題が発生しています。
- 2.6.32-279.22.1 カーネルを実行しているクライアントで、ファイルロック (flock) 問題のようなものが nfsv4 で発生しています。以下は、pidgin を実行した場合の例ですが、この問題はその他の方法でも発生します。
===============
$ strace pidgin
...
stat("foo", {st_mode=S_IFREG|0600, st_size=0, ...})= 0
open("foo", O_RDONLY) = 14
flock(14, LOCK_EX
===============
And it just hangs there waiting for the lock.
- 以前の 2.6.32-279.19.1 カーネルでクライアントを起動すると問題が修正されます。
- flock() はハングアップしていますが、メッセージファイルには「多量の」カーネルエラーが表示されます。そのタイムスタンプはほぼ変わらず (1 秒内)、タイトなループが発生していることが分かります。
kernel: nfs4_reclaim_open_state:Lock reclaim failed!
kernel: message repeated 210204 times:[nfs4_reclaim_open_state:Lock reclaim failed!]
- 失敗時に tcpdump を取得すると、LOCK 要求が繰り返し発生し、すべて (10038 == NFS4ERR_OPENMODE) で失敗し、そのタイムスタンプはほぼ同じ (1 秒内) であることが分かります。
1 2013-03-01 09:18:56.208360 192.168.122.131 -> 192.168.122.121 NFS V4 COMP Call LOCK
2 2013-03-01 09:18:56.209034 192.168.122.121 -> 192.168.122.131 NFS V4 COMP Reply (Call In 1) LOCK(10038)
3 2013-03-01 09:18:56.209421 192.168.122.131 -> 192.168.122.121 NFS V4 COMP Call SAVEFH OPEN DELEGRETURN Unknown
4 2013-03-01 09:18:56.210049 192.168.122.121 -> 192.168.122.131 NFS V4 COMP Reply (Call In 3) SAVEFH OPEN[Malformed Packet]
5 2013-03-01 09:18:56.210319 192.168.122.131 -> 192.168.122.121 NFS V4 COMP Call LOCK
6 2013-03-01 09:18:56.211024 192.168.122.121 -> 192.168.122.131 NFS V4 COMP Reply (Call In 5) LOCK(10038)
7 2013-03-01 09:18:56.215670 192.168.122.131 -> 192.168.122.121 NFS V4 COMP Call SAVEFH OPEN DELEGRETURN Unknown
8 2013-03-01 09:18:56.216375 192.168.122.121 -> 192.168.122.131 NFS V4 COMP Reply (Call In 7) SAVEFH OPEN[Malformed Packet]
9 2013-03-01 09:18:56.216596 192.168.122.131 -> 192.168.122.121 NFS V4 COMP Call LOCK
10 2013-03-01 09:18:56.217332 192.168.122.121 -> 192.168.122.131 NFS V4 COMP Reply (Call In 9) LOCK(10038)
11 2013-03-01 09:18:56.217674 192.168.122.131 -> 192.168.122.121 NFS V4 COMP Call SAVEFH OPEN DELEGRETURN Unknown
Environment
- Red Hat Enterprise Linux 6.3 ~ 6.4
- カーネルのバージョンが 2.6.32-279.22.1 以降 2.6.32-279.25.1.el6 より前
- カーネルのバージョンが 2.6.32-358.el6 以降 2.6.32-358.6.1.el6 より前
- NFSv4 クライアント
- 注意: Red Hat Enterprise Linux 5 (カーネル 2.6.18-348.el5 以降) はこの問題の影響を受けない
- すべての NFS サーバー
- ロック要求とは異なるオープンモードにおいて、NFS ファイルで flock を発行するアプリケーション
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.