diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml
index 4c410fd1a030..4afc5a832200 100644
--- a/android/abi_gki_aarch64.xml
+++ b/android/abi_gki_aarch64.xml
@@ -2903,7 +2903,7 @@
-
+
@@ -2914,13 +2914,19 @@
-
+
-
+
-
+
+
+
+
+
+
+
@@ -4479,75 +4485,75 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -16680,7 +16686,7 @@
-
+
@@ -16688,7 +16694,7 @@
-
+
@@ -16777,7 +16783,7 @@
-
+
@@ -18101,405 +18107,405 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -22508,12 +22514,12 @@
-
+
-
+
-
+
@@ -22681,7 +22687,7 @@
-
+
@@ -22690,7 +22696,7 @@
-
+
@@ -22868,21 +22874,21 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -23183,12 +23189,12 @@
-
+
-
+
-
+
@@ -23830,91 +23836,91 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -24746,12 +24752,12 @@
-
+
-
+
-
+
@@ -24978,7 +24984,7 @@
-
+
@@ -25776,27 +25782,27 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -26113,222 +26119,222 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -26369,21 +26375,21 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -27828,26 +27834,26 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -29323,18 +29329,18 @@
-
+
-
+
-
+
-
+
-
+
@@ -29801,15 +29807,15 @@
-
+
-
+
-
+
-
+
@@ -31637,11 +31643,7 @@
-
-
-
-
-
+
@@ -33494,8 +33496,8 @@
-
-
+
+
@@ -33515,12 +33517,12 @@
-
-
+
+
-
-
+
+
@@ -33873,7 +33875,7 @@
-
+
@@ -36156,421 +36158,421 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -36645,222 +36647,222 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -37265,7 +37267,7 @@
-
+
@@ -37611,7 +37613,7 @@
-
+
@@ -37714,23 +37716,23 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -37744,69 +37746,69 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -38749,27 +38751,27 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -38800,66 +38802,66 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -38876,63 +38878,63 @@
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -38976,29 +38978,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -39007,7 +39009,7 @@
-
+
@@ -39018,48 +39020,48 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -42425,10 +42427,10 @@
-
-
-
-
+
+
+
+
@@ -42494,34 +42496,34 @@
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
@@ -44790,42 +44792,42 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
@@ -46945,7 +46947,7 @@
-
+
@@ -46995,12 +46997,12 @@
-
+
-
+
@@ -47783,69 +47785,69 @@
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
+
-
-
+
+
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -47854,61 +47856,61 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
@@ -48836,9 +48838,9 @@
-
+
-
+
@@ -48870,7 +48872,7 @@
-
+
@@ -50265,17 +50267,17 @@
-
-
+
+
-
-
+
+
-
-
-
+
+
+
@@ -50570,45 +50572,45 @@
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -52069,7 +52071,7 @@
-
+
@@ -52089,222 +52091,222 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -52479,86 +52481,86 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -52593,28 +52595,28 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -53034,45 +53036,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -53561,18 +53563,18 @@
-
+
-
+
-
+
-
+
-
+
@@ -54002,33 +54004,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -54580,18 +54582,18 @@
-
+
-
+
-
+
-
+
-
+
@@ -56694,21 +56696,21 @@
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
@@ -56734,17 +56736,17 @@
-
-
+
+
-
+
-
+
-
+
@@ -57150,222 +57152,222 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -59632,45 +59634,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -59840,33 +59842,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -59880,18 +59882,18 @@
-
+
-
+
-
+
-
+
-
+
@@ -60143,28 +60145,28 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -60212,48 +60214,48 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -60279,42 +60281,42 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -60324,26 +60326,26 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -60595,11 +60597,11 @@
-
+
-
+
@@ -60687,21 +60689,21 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -64298,7 +64300,7 @@
-
+
@@ -64396,7 +64398,7 @@
-
+
@@ -66831,7 +66833,7 @@
-
+
@@ -80116,7 +80118,7 @@
-
+
@@ -80129,11 +80131,11 @@
-
+
-
+
@@ -80143,7 +80145,7 @@
-
+
@@ -80152,11 +80154,11 @@
-
+
-
+
@@ -80391,7 +80393,7 @@
-
+
@@ -80575,21 +80577,21 @@
-
+
-
+
-
+
-
+
@@ -80617,23 +80619,23 @@
-
+
-
+
-
+
-
+
@@ -80641,7 +80643,7 @@
-
+
@@ -80655,18 +80657,18 @@
-
+
-
+
-
+
@@ -80691,7 +80693,7 @@
-
+
@@ -84182,62 +84184,62 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -84248,7 +84250,7 @@
-
+
@@ -84554,16 +84556,16 @@
-
+
-
+
-
+
@@ -84591,7 +84593,7 @@
-
+
@@ -84606,27 +84608,27 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -85483,7 +85485,7 @@
-
+
@@ -86101,25 +86103,25 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
@@ -86443,7 +86445,7 @@
-
+
@@ -88566,35 +88568,35 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -88603,50 +88605,50 @@
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
@@ -88654,20 +88656,20 @@
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -90232,23 +90234,23 @@
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
@@ -92650,7 +92652,7 @@
-
+
@@ -106007,7 +106009,7 @@
-
+
@@ -106052,7 +106054,7 @@
-
+
@@ -106235,7 +106237,7 @@
-
+
@@ -106254,15 +106256,15 @@
-
-
+
+
-
-
-
-
-
+
+
+
+
+
@@ -107003,8 +107005,8 @@
-
-
+
+
@@ -107263,7 +107265,7 @@
-
+
@@ -107546,12 +107548,6 @@
-
-
-
-
-
-
@@ -107879,7 +107875,7 @@
-
+
@@ -107913,7 +107909,7 @@
-
+
@@ -108087,7 +108083,7 @@
-
+
@@ -109287,11 +109283,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -109325,30 +109321,30 @@
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
@@ -109553,10 +109549,10 @@
-
-
-
-
+
+
+
+
@@ -109569,17 +109565,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -109708,15 +109693,19 @@
+
+
+
+
-
-
-
+
+
+
@@ -109787,6 +109776,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -109961,39 +109961,39 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
@@ -110293,12 +110293,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -110377,27 +110377,27 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
@@ -110406,14 +110406,20 @@
-
-
+
+
-
+
+
+
+
+
+
+
@@ -110449,7 +110455,7 @@
-
+
@@ -110704,7 +110710,7 @@
-
+
@@ -110872,192 +110878,192 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -111545,50 +111551,50 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -111629,15 +111635,15 @@
-
+
-
+
-
+
-
+
@@ -111707,7 +111713,7 @@
-
+
@@ -111722,25 +111728,25 @@
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -111756,6 +111762,11 @@
+
+
+
+
+
@@ -125320,13 +125331,6 @@
-
-
-
-
-
-
-
@@ -125814,28 +125818,28 @@
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
@@ -125973,7 +125977,7 @@
-
+
@@ -127121,7 +127125,7 @@
-
+
@@ -127129,12 +127133,12 @@
-
-
+
+
-
-
+
+
@@ -127153,17 +127157,17 @@
-
-
+
+
-
-
-
+
+
+
@@ -127207,7 +127211,7 @@
-
+
@@ -127438,15 +127442,15 @@
-
+
-
+
-
+
-
+
@@ -127463,23 +127467,23 @@
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -127519,79 +127523,79 @@
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
@@ -128188,7 +128192,7 @@
-
+
@@ -128245,35 +128249,35 @@
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
@@ -128292,7 +128296,7 @@
-
+
@@ -128554,15 +128558,15 @@
-
+
-
+
-
+
-
+
@@ -128693,47 +128697,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -129294,6 +129257,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -129511,7 +129515,7 @@
-
+
@@ -129965,7 +129969,7 @@
-
+
@@ -130001,7 +130005,7 @@
-
+
@@ -130655,7 +130659,7 @@
-
+
@@ -130709,27 +130713,27 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -136088,50 +136092,50 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
@@ -136238,25 +136242,25 @@
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -136345,37 +136349,37 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
@@ -136416,7 +136420,7 @@
-
+
@@ -142423,31 +142427,31 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index e07a29c7425a..705122f3fd5b 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -2530,11 +2530,9 @@ static __le16 ext4_group_desc_csum(struct super_block *sb, __u32 block_group,
crc = crc16(crc, (__u8 *)gdp, offset);
offset += sizeof(gdp->bg_checksum); /* skip checksum */
/* for checksum of struct ext4_group_desc do the rest...*/
- if (ext4_has_feature_64bit(sb) &&
- offset < le16_to_cpu(sbi->s_es->s_desc_size))
+ if (ext4_has_feature_64bit(sb) && offset < sbi->s_desc_size)
crc = crc16(crc, (__u8 *)gdp + offset,
- le16_to_cpu(sbi->s_es->s_desc_size) -
- offset);
+ sbi->s_desc_size - offset);
out:
return cpu_to_le16(crc);
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
index 1b73a7f8189d..700822c9851a 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -2573,6 +2573,7 @@ static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode,
.in_inode = !!entry->e_value_inum,
};
struct ext4_xattr_ibody_header *header = IHDR(inode, raw_inode);
+ int needs_kvfree = 0;
int error;
is = kzalloc(sizeof(struct ext4_xattr_ibody_find), GFP_NOFS);
@@ -2595,7 +2596,7 @@ static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode,
error = -ENOMEM;
goto out;
}
-
+ needs_kvfree = 1;
error = ext4_xattr_inode_get(inode, entry, buffer, value_size);
if (error)
goto out;
@@ -2634,7 +2635,7 @@ static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode,
out:
kfree(b_entry_name);
- if (entry->e_value_inum && buffer)
+ if (needs_kvfree && buffer)
kvfree(buffer);
if (is)
brelse(is->iloc.bh);
diff --git a/fs/incfs/main.c b/fs/incfs/main.c
index aac87b105b5d..6f8c4dd6e042 100644
--- a/fs/incfs/main.c
+++ b/fs/incfs/main.c
@@ -30,6 +30,15 @@ static ssize_t corefs_show(struct kobject *kobj,
static struct kobj_attribute corefs_attr = __ATTR_RO(corefs);
+static ssize_t bugfix_inode_eviction_show(struct kobject *kobj,
+ struct kobj_attribute *attr, char *buff)
+{
+ return snprintf(buff, PAGE_SIZE, "supported\n");
+}
+
+static struct kobj_attribute bugfix_inode_eviction_attr =
+ __ATTR_RO(bugfix_inode_eviction);
+
static ssize_t mounter_context_for_backing_rw_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buff)
{
@@ -41,6 +50,7 @@ static struct kobj_attribute mounter_context_for_backing_rw_attr =
static struct attribute *attributes[] = {
&corefs_attr.attr,
+ &bugfix_inode_eviction_attr.attr,
&mounter_context_for_backing_rw_attr.attr,
NULL,
};
diff --git a/fs/incfs/vfs.c b/fs/incfs/vfs.c
index 96981c63cdfe..ac221619f19b 100644
--- a/fs/incfs/vfs.c
+++ b/fs/incfs/vfs.c
@@ -2309,6 +2309,13 @@ void incfs_kill_sb(struct super_block *sb)
pr_debug("incfs: unmount\n");
+ /*
+ * We must kill the super before freeing mi, since killing the super
+ * triggers inode eviction, which triggers the final update of the
+ * backing file, which uses certain information for mi
+ */
+ kill_anon_super(sb);
+
if (mi) {
if (mi->mi_backing_dir_path.dentry)
dinode = d_inode(mi->mi_backing_dir_path.dentry);
@@ -2320,7 +2327,6 @@ void incfs_kill_sb(struct super_block *sb)
incfs_free_mount_info(mi);
sb->s_fs_info = NULL;
}
- kill_anon_super(sb);
}
static int show_options(struct seq_file *m, struct dentry *root)
diff --git a/include/linux/rmap.h b/include/linux/rmap.h
index 4e21a2cbf144..10f2799e588c 100644
--- a/include/linux/rmap.h
+++ b/include/linux/rmap.h
@@ -43,13 +43,7 @@ struct anon_vma {
*/
atomic_t refcount;
- /*
- * Count of child anon_vmas and VMAs which points to this anon_vma.
- *
- * This counter is used for making decision about reusing anon_vma
- * instead of forking new one. See comments in function anon_vma_clone.
- */
- unsigned degree;
+ unsigned degree; /* ANDROID: KABI preservation, DO NOT USE! */
struct anon_vma *parent; /* Parent of this anon_vma */
@@ -64,6 +58,25 @@ struct anon_vma {
/* Interval tree of private "related" vmas */
struct rb_root_cached rb_root;
+
+ /*
+ * ANDROID: KABI preservation, it's safe to put these at the end of this structure as it's
+ * only passed by a pointer everywhere, the size and internal structures are local to the
+ * core kernel.
+ */
+#ifndef __GENKSYMS__
+ /*
+ * Count of child anon_vmas. Equals to the count of all anon_vmas that
+ * have ->parent pointing to this one, including itself.
+ *
+ * This counter is used for making decision about reusing anon_vma
+ * instead of forking new one. See comments in function anon_vma_clone.
+ */
+ unsigned long num_children;
+ /* Count of VMAs whose ->anon_vma pointer points to this object. */
+ unsigned long num_active_vmas;
+#endif
+
};
/*
diff --git a/mm/rmap.c b/mm/rmap.c
index 1ddb8f4de0ae..2d1a43bbed9f 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -82,7 +82,8 @@ static inline struct anon_vma *anon_vma_alloc(void)
anon_vma = kmem_cache_alloc(anon_vma_cachep, GFP_KERNEL);
if (anon_vma) {
atomic_set(&anon_vma->refcount, 1);
- anon_vma->degree = 1; /* Reference for first vma */
+ anon_vma->num_children = 0;
+ anon_vma->num_active_vmas = 0;
anon_vma->parent = anon_vma;
/*
* Initialise the anon_vma root to point to itself. If called
@@ -190,6 +191,7 @@ int __anon_vma_prepare(struct vm_area_struct *vma)
anon_vma = anon_vma_alloc();
if (unlikely(!anon_vma))
goto out_enomem_free_avc;
+ anon_vma->num_children++; /* self-parent link for new root */
allocated = anon_vma;
}
@@ -199,8 +201,7 @@ int __anon_vma_prepare(struct vm_area_struct *vma)
if (likely(!vma->anon_vma)) {
vma->anon_vma = anon_vma;
anon_vma_chain_link(vma, avc, anon_vma);
- /* vma reference or self-parent link for new root */
- anon_vma->degree++;
+ anon_vma->num_active_vmas++;
allocated = NULL;
avc = NULL;
}
@@ -279,19 +280,19 @@ int anon_vma_clone(struct vm_area_struct *dst, struct vm_area_struct *src)
anon_vma_chain_link(dst, avc, anon_vma);
/*
- * Reuse existing anon_vma if its degree lower than two,
- * that means it has no vma and only one anon_vma child.
+ * Reuse existing anon_vma if it has no vma and only one
+ * anon_vma child.
*
- * Do not chose parent anon_vma, otherwise first child
- * will always reuse it. Root anon_vma is never reused:
+ * Root anon_vma is never reused:
* it has self-parent reference and at least one child.
*/
- if (!dst->anon_vma && anon_vma != src->anon_vma &&
- anon_vma->degree < 2)
+ if (!dst->anon_vma && src->anon_vma &&
+ anon_vma->num_children < 2 &&
+ anon_vma->num_active_vmas == 0)
dst->anon_vma = anon_vma;
}
if (dst->anon_vma)
- dst->anon_vma->degree++;
+ dst->anon_vma->num_active_vmas++;
unlock_anon_vma_root(root);
return 0;
@@ -341,6 +342,7 @@ int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma)
anon_vma = anon_vma_alloc();
if (!anon_vma)
goto out_error;
+ anon_vma->num_active_vmas++;
avc = anon_vma_chain_alloc(GFP_KERNEL);
if (!avc)
goto out_error_free_anon_vma;
@@ -361,7 +363,7 @@ int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma)
vma->anon_vma = anon_vma;
anon_vma_lock_write(anon_vma);
anon_vma_chain_link(vma, avc, anon_vma);
- anon_vma->parent->degree++;
+ anon_vma->parent->num_children++;
anon_vma_unlock_write(anon_vma);
return 0;
@@ -393,7 +395,7 @@ void unlink_anon_vmas(struct vm_area_struct *vma)
* to free them outside the lock.
*/
if (RB_EMPTY_ROOT(&anon_vma->rb_root.rb_root)) {
- anon_vma->parent->degree--;
+ anon_vma->parent->num_children--;
continue;
}
@@ -401,7 +403,8 @@ void unlink_anon_vmas(struct vm_area_struct *vma)
anon_vma_chain_free(avc);
}
if (vma->anon_vma)
- vma->anon_vma->degree--;
+ vma->anon_vma->num_active_vmas--;
+
unlock_anon_vma_root(root);
/*
@@ -412,7 +415,8 @@ void unlink_anon_vmas(struct vm_area_struct *vma)
list_for_each_entry_safe(avc, next, &vma->anon_vma_chain, same_vma) {
struct anon_vma *anon_vma = avc->anon_vma;
- VM_WARN_ON(anon_vma->degree);
+ VM_WARN_ON(anon_vma->num_children);
+ VM_WARN_ON(anon_vma->num_active_vmas);
put_anon_vma(anon_vma);
list_del(&avc->same_vma);