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