162306a36Sopenharmony_ciTODO 262306a36Sopenharmony_ci==== 362306a36Sopenharmony_ci 462306a36Sopenharmony_ciThere is a potential for deadlock when allocating a struct sk_buff for 562306a36Sopenharmony_cidata that needs to be written out to aoe storage. If the data is 662306a36Sopenharmony_cibeing written from a dirty page in order to free that page, and if 762306a36Sopenharmony_cithere are no other pages available, then deadlock may occur when a 862306a36Sopenharmony_cifree page is needed for the sk_buff allocation. This situation has 962306a36Sopenharmony_cinot been observed, but it would be nice to eliminate any potential for 1062306a36Sopenharmony_cideadlock under memory pressure. 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciBecause ATA over Ethernet is not fragmented by the kernel's IP code, 1362306a36Sopenharmony_cithe destructor member of the struct sk_buff is available to the aoe 1462306a36Sopenharmony_cidriver. By using a mempool for allocating all but the first few 1562306a36Sopenharmony_cisk_buffs, and by registering a destructor, we should be able to 1662306a36Sopenharmony_ciefficiently allocate sk_buffs without introducing any potential for 1762306a36Sopenharmony_cideadlock. 18