--- /dev/null
+Domain specific backport for inet_frag_lru_move()
+This requires two parts, the data structure changes
+and then domain specific inet_frag_lru_move() define.
+
+--- a/net/ieee802154/reassembly.c
++++ b/net/ieee802154/reassembly.c
+@@ -81,6 +81,9 @@ void lowpan_frag_init(struct inet_frag_q
+ fq->d_size = arg->d_size;
+ fq->saddr = *arg->src;
+ fq->daddr = *arg->dst;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
++ spin_lock_init(&fq->lru_lock);
++#endif
+ }
+ EXPORT_SYMBOL(lowpan_frag_init);
+
+--- a/net/ieee802154/reassembly.h
++++ b/net/ieee802154/reassembly.h
+@@ -2,6 +2,7 @@
+ #define __IEEE802154_6LOWPAN_REASSEMBLY_H__
+
+ #include <net/inet_frag.h>
++#include <linux/spinlock.h>
+
+ struct lowpan_create_arg {
+ __be16 tag;
+@@ -19,8 +20,32 @@ struct lowpan_frag_queue {
+ u16 d_size;
+ struct ieee802154_addr saddr;
+ struct ieee802154_addr daddr;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
++ spinlock_t lru_lock;
++#endif
+ };
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
++/*
++ * XXX: this is a *domain* specific inet_frag_lru_move backport,
++ * note the added lowpan_ prefix, this requires a respective patch
++ * which extends struct lowpan_frag_queue with an lru_lock and
++ * initializes it. We add this helper here to reduce the backport.
++ * There is no way to generalize the other changes in the patch.
++ */
++#define inet_frag_lru_move LINUX_BACKPORT(lowpan_inet_frag_lru_move)
++static inline void inet_frag_lru_move(struct inet_frag_queue *q)
++{
++ struct lowpan_frag_queue *fq;
++
++ fq = container_of(q, struct lowpan_frag_queue, q);
++
++ spin_lock(&fq->lru_lock);
++ list_move_tail(&q->lru_list, &q->net->lru_list);
++ spin_unlock(&fq->lru_lock);
++}
++#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) */
++
+ static inline u32 ieee802154_addr_hash(const struct ieee802154_addr *a)
+ {
+ switch (a->addr_type) {