)]}'
{
  "commit": "90b662ea25f5e83bb3b8ccec5b93ced810b92fb8",
  "tree": "4e98adc2a8894348ead8f7332b5eb11572c18989",
  "parents": [
    "37314c9dbe95b4d924c7b61aaf563cec4f4e4133"
  ],
  "author": {
    "name": "Victor Nogueira",
    "email": "victor@mojatatu.com",
    "time": "Wed Jun 10 10:28:24 2026 -0300"
  },
  "committer": {
    "name": "Jakub Kicinski",
    "email": "kuba@kernel.org",
    "time": "Thu Jun 11 15:59:40 2026 -0700"
  },
  "message": "net/sched: sch_hfsc: Don\u0027t make class passive twice\n\nupdate_vf() is called from two places for the same class during a single\ndequeue when the class\u0027s child qdisc (e.g. codel/fq_codel) drops its last\npackets while dequeuing:\n\n1. The child calls qdisc_tree_reduce_backlog(), which, now that the child\n   is empty, invokes hfsc_qlen_notify() -\u003e update_vf(cl, 0, 0) and turns\n   the class passive (cl_nactive is decremented up the hierarchy).\n\n2. hfsc_dequeue() then calls update_vf(cl, qdisc_pkt_len(skb), cur_time)\n   to charge the dequeued bytes.\n\nOn the second call the class is already passive, but its child qdisc is\nstill empty, so update_vf() arms go_passive again:\n\n      if (cl-\u003eqdisc-\u003eq.qlen \u003d\u003d 0 \u0026\u0026 cl-\u003ecl_flags \u0026 HFSC_FSC)\n              go_passive \u003d 1;\n\nThe leaf is then skipped by the cl_nactive \u003d\u003d 0 check inside the loop,\nwhich does not clear go_passive, so the stale go_passive propagates to the\nparent and decrements its cl_nactive a second time. A parent that still\nhas other active children is driven to cl_nactive \u003d\u003d 0 and removed from\nthe vttree, even though those siblings are still backlogged. They are\nnever dequeued again and the qdisc stalls.\n\nFix this by only arming go_passive when the class is actually active, so an\nalready-passive class no longer triggers a second passive transition. The\nbyte accounting (cl-\u003ecl_total +\u003d len) still runs for every ancestor, so\ndequeued bytes continue to be counted exactly once.\n\nFixes: 51eb3b65544c (\"sch_hfsc: make hfsc_qlen_notify() idempotent\")\nReported-by: Anirudh Gupta \u003canirudhrudr@gmail.com\u003e\nCloses: https://lore.kernel.org/netdev/CAN2cbVe79oj0O9\u003d\u003dm4+4x3v+O+qzRagA\u003d2\u003dwkrp9i9\u003dCqYvyZA@mail.gmail.com/\nTested-by: Anirudh Gupta \u003canirudhrudr@gmail.com\u003e\nAcked-by: Jamal Hadi Salim \u003cjhs@mojatatu.com\u003e\nSigned-off-by: Victor Nogueira \u003cvictor@mojatatu.com\u003e\nLink: https://patch.msgid.link/20260610132824.3027549-1-victor@mojatatu.com\nSigned-off-by: Jakub Kicinski \u003ckuba@kernel.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "83b2ca2e37fc82cfebf089e6c0e36f18af939887",
      "old_mode": 33188,
      "old_path": "net/sched/sch_hfsc.c",
      "new_id": "6552c0c4e7b328123d83f72f802a8165c1d36207",
      "new_mode": 33188,
      "new_path": "net/sched/sch_hfsc.c"
    }
  ]
}
