1

LDD3 ページ 214 から:

GFP_NOIO
GFP_NOFS
これらのフラグは GFP_KERNEL のように機能しますが、要求を満たすためにカーネルが実行できる操作に制限を追加します。GFP_NOFS の割り当てではファイルシステム呼び出しを実行できませんが、GFP_NOIO では I/O の開始がまったく許可されません。これらは主に、割り当てがスリープ状態になる可能性があるファイルシステムと仮想メモリコードで使用されますが、再帰的なファイルシステム呼び出しは悪い考えです。

GFP_NOFS がマスクされている場合、再帰的なファイルシステム呼び出しがなぜ悪い考えなのか知りたいですか?

ありがとう!

4

1 に答える 1

1

GFP_NOFS が masktd の場合、なぜ再帰的なファイルシステム呼び出しが悪い考えなのか知りたいですか?

それは逆です:GFP_NOFS割り当てはスリープできますが、ファイルシステムと対話できないことを通知するために使用します(たとえば、メモリブロックをディスクにダンプして、空きメモリを作成します)。コードの重要な領域で行われます。
例: ファイルシステム コールを入力し、kmalloc と呼ばれるこのファイル システムのグローバル ミューテックスをロックしました。kmalloc が別のファイルシステム関数を呼び出そうとすると、同じミューテックスがロックされ、デッドロックが発生します。GFP_NOFSそのため、フラグを提供します。

于 2015-12-30T07:41:59.457 に答える