# git gc Expanding reachable commits in commit graph: 50925 Expanding reachable commits in commit graph: 104978 Expanding reachable commits in commit graph: 159280 Expanding reachable commits in commit graph: 216330 Expanding reachable commits in commit graph: 268685 Expanding reachable commits in commit graph: 325957 Expanding reachable commits in commit graph: 384564 Expanding reachable commits in commit graph: 443497 Expanding reachable commits in commit graph: 503299 Expanding reachable commits in commit graph: 554645 Expanding reachable commits in commit graph: 616054 Expanding reachable commits in commit graph: 678742 Expanding reachable commits in commit graph: 741520 Expanding reachable commits in commit graph: 805457 Expanding reachable commits in commit graph: 871814 Expanding reachable commits in commit graph: 939035 Expanding reachable commits in commit graph: 1007634 Expanding reachable commits in commit graph: 1054513 Expanding reachable commits in commit graph: 1125022 Expanding reachable commits in commit graph: 1197168 Expanding reachable commits in commit graph: 1198594, done. Finding extra edges in commit graph: 69% (838353/1198594) Finding extra edges in commit graph: 70% (839016/1198594) Finding extra edges in commit graph: 71% (851002/1198594) Finding extra edges in commit graph: 72% (862988/1198594) Finding extra edges in commit graph: 73% (874974/1198594) Finding extra edges in commit graph: 74% (886960/1198594) Finding extra edges in commit graph: 75% (898946/1198594) Finding extra edges in commit graph: 76% (910932/1198594) Finding extra edges in commit graph: 77% (922918/1198594) Finding extra edges in commit graph: 78% (934904/1198594) Finding extra edges in commit graph: 79% (946890/1198594) Finding extra edges in commit graph: 80% (958876/1198594) Finding extra edges in commit graph: 81% (970862/1198594) Finding extra edges in commit graph: 82% (982848/1198594) Finding extra edges in commit graph: 83% (994834/1198594) Finding extra edges in commit graph: 84% (1006819/1198594) Finding extra edges in commit graph: 85% (1018805/1198594) Finding extra edges in commit graph: 86% (1030791/1198594) Finding extra edges in commit graph: 87% (1042777/1198594) Finding extra edges in commit graph: 88% (1054763/1198594) Finding extra edges in commit graph: 89% (1066749/1198594) Finding extra edges in commit graph: 90% (1078735/1198594) Finding extra edges in commit graph: 91% (1090721/1198594) Finding extra edges in commit graph: 92% (1102707/1198594) Finding extra edges in commit graph: 93% (1114693/1198594) Finding extra edges in commit graph: 94% (1126679/1198594) Finding extra edges in commit graph: 95% (1138665/1198594) Finding extra edges in commit graph: 96% (1150651/1198594) Finding extra edges in commit graph: 97% (1162637/1198594) Finding extra edges in commit graph: 98% (1174623/1198594) Finding extra edges in commit graph: 99% (1186609/1198594) Finding extra edges in commit graph: 100% (1198594/1198594) Finding extra edges in commit graph: 100% (1198594/1198594), done. Writing out commit graph in 4 passes: 54% (2623102/4794376) Writing out commit graph in 4 passes: 55% (2636907/4794376) Writing out commit graph in 4 passes: 56% (2684851/4794376) Writing out commit graph in 4 passes: 57% (2732795/4794376) Writing out commit graph in 4 passes: 58% (2780739/4794376) Writing out commit graph in 4 passes: 59% (2828682/4794376) Writing out commit graph in 4 passes: 60% (2876626/4794376) Writing out commit graph in 4 passes: 61% (2924570/4794376) Writing out commit graph in 4 passes: 61% (2953474/4794376) Writing out commit graph in 4 passes: 62% (2972514/4794376) Writing out commit graph in 4 passes: 63% (3020457/4794376) Writing out commit graph in 4 passes: 64% (3068401/4794376) Writing out commit graph in 4 passes: 65% (3116345/4794376) Writing out commit graph in 4 passes: 66% (3164289/4794376) Writing out commit graph in 4 passes: 67% (3212232/4794376) Writing out commit graph in 4 passes: 68% (3260176/4794376) Writing out commit graph in 4 passes: 68% (3283681/4794376) Writing out commit graph in 4 passes: 69% (3308120/4794376) Writing out commit graph in 4 passes: 70% (3356064/4794376) Writing out commit graph in 4 passes: 71% (3404007/4794376) Writing out commit graph in 4 passes: 72% (3451951/4794376) Writing out commit graph in 4 passes: 73% (3499895/4794376) Writing out commit graph in 4 passes: 74% (3547839/4794376) Writing out commit graph in 4 passes: 75% (3595782/4794376) Writing out commit graph in 4 passes: 76% (3643726/4794376) Writing out commit graph in 4 passes: 77% (3691670/4794376) Writing out commit graph in 4 passes: 78% (3739614/4794376) Writing out commit graph in 4 passes: 79% (3787558/4794376) Writing out commit graph in 4 passes: 80% (3835501/4794376) Writing out commit graph in 4 passes: 81% (3883445/4794376) Writing out commit graph in 4 passes: 81% (3920219/4794376) Writing out commit graph in 4 passes: 82% (3931389/4794376) Writing out commit graph in 4 passes: 83% (3979333/4794376) Writing out commit graph in 4 passes: 84% (4027276/4794376) Writing out commit graph in 4 passes: 85% (4075220/4794376) Writing out commit graph in 4 passes: 86% (4123164/4794376) Writing out commit graph in 4 passes: 87% (4171108/4794376) Writing out commit graph in 4 passes: 88% (4219051/4794376) Writing out commit graph in 4 passes: 89% (4266995/4794376) Writing out commit graph in 4 passes: 90% (4314939/4794376) Writing out commit graph in 4 passes: 91% (4362883/4794376) Writing out commit graph in 4 passes: 92% (4410826/4794376) Writing out commit graph in 4 passes: 93% (4458770/4794376) Writing out commit graph in 4 passes: 94% (4506714/4794376) Writing out commit graph in 4 passes: 95% (4554658/4794376) Writing out commit graph in 4 passes: 96% (4602601/4794376) Writing out commit graph in 4 passes: 97% (4650545/4794376) Writing out commit graph in 4 passes: 98% (4698489/4794376) Writing out commit graph in 4 passes: 99% (4746433/4794376) Writing out commit graph in 4 passes: 100% (4794376/4794376) Writing out commit graph in 4 passes: 100% (4794376/4794376), done. # git rev-parse -q --verify 03275585cabd0240944f19f33d7584a1b099a3a8^{commit} # git fetch -q -n -f git://fs.ozlabs.ibm.com/kernel/linus master # git rev-parse -q --verify 03275585cabd0240944f19f33d7584a1b099a3a8^{commit} 03275585cabd0240944f19f33d7584a1b099a3a8 # git checkout -q -f -B kisskb 03275585cabd0240944f19f33d7584a1b099a3a8 # git clean -qxdf # < git log -1 # commit 03275585cabd0240944f19f33d7584a1b099a3a8 # Author: David Howells # Date: Tue Jul 4 20:22:15 2023 +0100 # # afs: Fix accidental truncation when storing data # # When an AFS FS.StoreData RPC call is made, amongst other things it is # given the resultant file size to be. On the server, this is processed # by truncating the file to new size and then writing the data. # # Now, kafs has a lock (vnode->io_lock) that serves to serialise # operations against a specific vnode (ie. inode), but the parameters for # the op are set before the lock is taken. This allows two writebacks # (say sync and kswapd) to race - and if writes are ongoing the writeback # for a later write could occur before the writeback for an earlier one if # the latter gets interrupted. # # Note that afs_writepages() cannot take i_mutex and only takes a shared # lock on vnode->validate_lock. # # Also note that the server does the truncation and the write inside a # lock, so there's no problem at that end. # # Fix this by moving the calculation for the proposed new i_size inside # the vnode->io_lock. Also reset the iterator (which we might have read # from) and update the mtime setting there. # # Fixes: bd80d8a80e12 ("afs: Use ITER_XARRAY for writing") # Reported-by: Marc Dionne # Signed-off-by: David Howells # Reviewed-by: Jeffrey Altman # Reviewed-by: Marc Dionne # cc: linux-afs@lists.infradead.org # cc: linux-fsdevel@vger.kernel.org # Link: https://lore.kernel.org/r/3526895.1687960024@warthog.procyon.org.uk/ # Signed-off-by: Linus Torvalds # < /opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux-ld --version # < git log --format=%s --max-count=1 03275585cabd0240944f19f33d7584a1b099a3a8 # make -s -j 24 ARCH=x86_64 O=/kisskb/build/linus_allnoconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- allnoconfig # < make -s -j 24 ARCH=x86_64 O=/kisskb/build/linus_allnoconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- help # make -s -j 24 ARCH=x86_64 O=/kisskb/build/linus_allnoconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- olddefconfig # make -s -j 24 ARCH=x86_64 O=/kisskb/build/linus_allnoconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- Completed OK # rm -rf /kisskb/build/linus_allnoconfig_x86_64-gcc8 # Build took: 0:04:59.650322