# Linux-5.15.9 The Ever Most CO2 Producing 3 Bit Change

## ulenrich

Yesterdays Linux version update

was the most expensive one bit change.

I don't need, because I don't us conntrack

(just a guess)

```
# diff -u patch-5.15.8 patch-5.15.9 

--- patch-5.15.8   2021-12-14 11:04:05.000000000 +0100

+++ patch-5.15.9   2021-12-16 15:24:03.000000000 +0100

@@ -196,7 +196,7 @@

     bit 1: enable rescheduling of new connections when it is safe.

     That is, whenever expire_nodest_conn and for TCP sockets, when

 diff --git a/Makefile b/Makefile

-index ed6e7ec60eff6..72344b214bba5 100644

+index ed6e7ec60eff6..e6d2ea920a1d1 100644

 --- a/Makefile

 +++ b/Makefile

 @@ -1,7 +1,7 @@

@@ -204,7 +204,7 @@

  VERSION = 5

  PATCHLEVEL = 15

 -SUBLEVEL = 0

-+SUBLEVEL = 8

++SUBLEVEL = 9

  EXTRAVERSION =

  NAME = Trick or Treat

  

@@ -72744,7 +72744,7 @@

  LDLIBS = -lmnl

  TEST_GEN_FILES =  nf-queue

 diff --git a/tools/testing/selftests/netfilter/conntrack_vrf.sh b/tools/testing/selftests/netfilter/conntrack_vrf.sh

-new file mode 100644

+new file mode 100755

 index 0000000000000..8b5ea92345882

 --- /dev/null

 +++ b/tools/testing/selftests/netfilter/conntrack_vrf.sh
```

Last edited by ulenrich on Sat Dec 18, 2021 2:34 am; edited 1 time in total

----------

## pietinger

 *ulenrich wrote:*   

> [...]I don't need, because I don't us conntrack
> 
> (just a guess)

 

As far as I understand it, I dont need it also, even I am using conntrack in netfilter modules. (But my english is very poor and I dont understand "quilt" - leo translate this into german in a very obscure word):

 *Quote:*   

> netfilter: selftest: conntrack_vrf.sh: fix file permission
> 
> When backporting 33b8aad21ac1 ("selftests: netfilter: add a
> 
> vrf+conntrack testcase") to this stable branch, the executable bits were
> ...

 

----------

## ulenrich

Arrrgh, this an april 1. like joke, because it is a known bug of quilt!

"quilt" is a tool to manage series (a list file) of patches. When I noticed that quilt doesn't do well the job with creating files, 

I changed to my own script, I called kuilt - kernel quilt: 

(If the kernel guy would have used my script, which cleanly uses patch, we now wouldn't have number nine of linux-5.15)

```
#!/bin/bash

C="/usr/src"

# location of /usr/src(/linux-x.y) and /usr/src(/patches-x.y)

#set -x

function myexit() {

   echo "$1"

   exit

}

[ "$UID" = "0" ] \

   || myexit "only root can run this"

[ -f "./kernel/kexec.c" ] \

   && L=$(readlink -f -n ${PWD}) \

   || L=$(readlink -f -n $C/linux)

[ -f "$L/kernel/kexec.c" ] \

   || myexit "not found usr/src/linux sources"

version=""

[ -z "${version}" ] \

   && version=$(sed -n \

   -e'/^VERSION/ {s/^VERSION...//;N;s/\nPATCHLEVEL..././p ;q}' $L/Makefile)

[ -z "${version}" ] \

   && myexit "cannot find version"

y=0

clean="no"

while [ "$1" != "" ] ;do

  case $1 in

    "-h"|"--help"|"help")

       exec less $0

       exit

       ;;

    "-e"|"--edit"|"edit")

       exec mcedit $0

       exit

       ;;

    "push"|"--push"|"-push")

       y=1

       ;;

    "pop"|"--pop"|"-pop")

       y=-1

       ;;

    "popa"|"popall"|"--popall"|"-popa")

       y=-7899

       ;;

    "pusha"|"pushall"|"--pushall"|"-pusha"|"--pusha")

       y=6789

       ;;

    "-a")

       [ $y -gt 0 ] &&y=6789

       [ $y -lt 0 ] &&y=-7899

       ;;

    "clean"|"mrproper"|"--clean"|"--mrproper")

       clean="mrproper"

       y=-8999

       ;;

    "conf"|"config"|"--conf"|"--config"|"newconf"|"newconfig"|"--newconf"|"--newconfig")

        CONFIG=$( ls -1 /boot/config-${version}.* |sort --sort=version |tail -n 1 )

        [ ! -f ${CONFIG} ] &&echo "  .....  Warning: missing ${CONFIG}" &&exit

        echo "  .....  cat ${CONFIG}  :"

        cat ${CONFIG} >$L/.config

        echo "  .....  $L/.config"

        exit

    ;;

    *)

       [ $y -gt 0 ] &&y=$(( 0 + $1 )) ||y=$(( 0 - $1 ))

       ;;

  esac

  shift

done

applied=${L}/.appliedseries

P=${L/linux/patches}

series=$P/series

[ -d "$L" ]          ||myexit "missing Linux source dir: $L"

[ -f "$series" ]     ||myexit "missing series file: $series"

touch $applied       ||myexit "cannot touch $applied"

[ -f "$applied" ]    ||myexit "missing applied file: $applied"

cd $L                     ||myexit "could not enter linux tree $L"

[ -f "./kernel/kexec.c" ] ||myexit "could not enter linux tree $L"

if [ "${clean}" = "mrproper" ] ;then

        echo "  .....  if  /boot/config-${version}  then  mrproper  else  clean"

        CONFIG=$( ls -1 /boot/config-${version}.* |sort --sort=version |tail -n 1 )

        if [ "" = "${CONFIG}" ] ;then

                echo "  .....  warning:  missing  /boot/config-${version}.*"

                echo "  .....  $L  :  make clean "

                make clean

        else

                echo "  .....  $L  :  make mrproper "

                make mrproper

                echo "  .....  cat ${CONFIG}"

                cat ${CONFIG} >$L/.config

                echo "  .....  $L/.config"

        fi

fi

if [ ${y} -gt 0 ] ;then

    echo "  .....  $L  :  patching"

    while read f ;do

      [ "${f:0:1}" = "#" ]          &&continue

      grep -q -e"^${f}$" ${applied} &&continue

      g=$P/$f

      if [ -f "$g" ] ;then

         patch -p1 --dry-run --silent --input $g ||myexit "  .....  exit  :  error patching $f"

         echo "  .....  patch -p1 --input $f"

         patch -p1 --input $g   ||myexit "$0 error apply $f"

         echo "$f" >> $applied

      fi

      y=$(( y - 1 ))

      [ $y = 0 ] &&break

    done < $series

    if [ ! -f ${applied} ] ;then

        myexit "  .....  $L  :  NOT any patch applied"

    else

        echo ""

        echo -n "  .....  ${applied}  :  "

        grep -v -c -e'^#' ${applied}

    fi

    myexit " "

elif [ ${y} -lt 0 ] ;then

    echo "  .....  $L  :  reverse patching"

    all=""

    while read f ;do

      [ "${f:0:1}" = "#" ]      &&continue

      all="$f $all"

    done < $applied

    set -- $all

    while [ "$1" != "" ] ;do

      g=$P/$1

      echo "  .....  patch -R -p1 --input $1"

      patch -R -p1 --input $g \

        ||myexit "could not reverse $1"

      sed -i -e"s:^\($1\)$:\#\1:" $applied \

        ||myexit "couldn't deactivate $1"

      y=$(( y + 1 ))

      [ $y = 0 ]    &&break

      shift

    done

    echo ""

    echo -n "  .....  remaining in tree patches  : "

    grep -v -c -e'^#' "$applied"               \

    || rm   "${applied}"  # if none then rm

    myexit " "

fi
```

 quilt is more complicated, because it not only handles kernel series as my scriptLast edited by ulenrich on Fri Dec 17, 2021 2:27 am; edited 1 time in total

----------

## Hu

 *ulenrich wrote:*   

> Yesterdays Linux version update
> 
> was the most expensive one bit change.

 The announcement specifically states: *Quote:*   

> Only change here is a permission setting of a netfilter selftest file. No need to upgrade if this problem is not bothering you.

 This stands in stark contrast to typical announcements which very pointedly instruct users to upgrade.  Users who notice the lack of instruction will likely not upgrade.

----------

## ulenrich

@Hu, my own kernel build script doesn't read change files, but pulls the patch and counts the locations of fixes in the new kernel version. Therefore I saw the new kernel is barely different. Don't you think there are many sites compiling automatically the new version without any AI used to understand the changes?

Does someone know: 

Has there ever been published a one bit changing new linux version by kernel.org before? 

A minimalist record ready for the guiness book.

----------

## pietinger

 *ulenrich wrote:*   

> "quilt" is a tool to manage series (a list file) of patches. 

 

ulenrich, thank you for this information.

----------

## Hu

 *ulenrich wrote:*   

> Don't you think there are many sites compiling automatically the new version without any AI used to understand the changes?

 I expect that anyone who auto-builds the kernel without even waiting for human approval also has sufficient automation/caching that a trivial change like this would lead to a near perfect run of cache hits.  That isn't quite as good as not building it at all, but considering how fast a ccache build is with hits versus without hits, it's still a huge savings.

----------

## ulenrich

That's true: ccache

I never came to the idea to use having a little hard disk with my 12y old computer.

A day later kernel.org published the real version update with fixes! How about, they wanted to see how many downloads there will be from users not reading the ChangeLog about this one bit change?

----------

## pietinger

 *ulenrich wrote:*   

> [...] about this one bit change?

 

It has been 3 bits ...   :Laughing: 

(scnr)

----------

## ulenrich

 *pietinger wrote:*   

>  *ulenrich wrote:*   [...] about this one bit change? 
> 
> It has been 3 bits ...  
> 
> (scnr)

  Oh, yes. I looked only at the 6/7 and saw a pair as neighbour.

----------

