10
10
struct z_erofs_maprecorder {
11
11
struct inode * inode ;
12
12
struct erofs_map_blocks * map ;
13
- void * kaddr ;
14
-
15
13
unsigned long lcn ;
16
14
/* compression extent information gathered */
17
15
u8 type , headtype ;
@@ -33,14 +31,11 @@ static int z_erofs_load_full_lcluster(struct z_erofs_maprecorder *m,
33
31
struct z_erofs_lcluster_index * di ;
34
32
unsigned int advise ;
35
33
36
- m -> kaddr = erofs_read_metabuf (& m -> map -> buf , inode -> i_sb ,
37
- pos , EROFS_KMAP );
38
- if (IS_ERR (m -> kaddr ))
39
- return PTR_ERR (m -> kaddr );
40
-
41
- m -> nextpackoff = pos + sizeof (struct z_erofs_lcluster_index );
34
+ di = erofs_read_metabuf (& m -> map -> buf , inode -> i_sb , pos , EROFS_KMAP );
35
+ if (IS_ERR (di ))
36
+ return PTR_ERR (di );
42
37
m -> lcn = lcn ;
43
- di = m -> kaddr ;
38
+ m -> nextpackoff = pos + sizeof ( struct z_erofs_lcluster_index ) ;
44
39
45
40
advise = le16_to_cpu (di -> di_advise );
46
41
m -> type = advise & Z_EROFS_LI_LCLUSTER_TYPE_MASK ;
@@ -53,8 +48,7 @@ static int z_erofs_load_full_lcluster(struct z_erofs_maprecorder *m,
53
48
DBG_BUGON (1 );
54
49
return - EFSCORRUPTED ;
55
50
}
56
- m -> compressedblks = m -> delta [0 ] &
57
- ~Z_EROFS_LI_D0_CBLKCNT ;
51
+ m -> compressedblks = m -> delta [0 ] & ~Z_EROFS_LI_D0_CBLKCNT ;
58
52
m -> delta [0 ] = 1 ;
59
53
}
60
54
m -> delta [1 ] = le16_to_cpu (di -> di_u .delta [1 ]);
@@ -110,9 +104,9 @@ static int unpack_compacted_index(struct z_erofs_maprecorder *m,
110
104
struct erofs_inode * const vi = EROFS_I (m -> inode );
111
105
const unsigned int lclusterbits = vi -> z_logical_clusterbits ;
112
106
unsigned int vcnt , lo , lobits , encodebits , nblk , bytes ;
113
- int i ;
114
- u8 * in , type ;
115
107
bool big_pcluster ;
108
+ u8 * in , type ;
109
+ int i ;
116
110
117
111
if (1 << amortizedshift == 4 && lclusterbits <= 14 )
118
112
vcnt = 2 ;
@@ -121,16 +115,18 @@ static int unpack_compacted_index(struct z_erofs_maprecorder *m,
121
115
else
122
116
return - EOPNOTSUPP ;
123
117
118
+ in = erofs_read_metabuf (& m -> map -> buf , m -> inode -> i_sb , pos , EROFS_KMAP );
119
+ if (IS_ERR (in ))
120
+ return PTR_ERR (in );
121
+
124
122
/* it doesn't equal to round_up(..) */
125
123
m -> nextpackoff = round_down (pos , vcnt << amortizedshift ) +
126
124
(vcnt << amortizedshift );
127
125
big_pcluster = vi -> z_advise & Z_EROFS_ADVISE_BIG_PCLUSTER_1 ;
128
126
lobits = max (lclusterbits , ilog2 (Z_EROFS_LI_D0_CBLKCNT ) + 1U );
129
127
encodebits = ((vcnt << amortizedshift ) - sizeof (__le32 )) * 8 / vcnt ;
130
128
bytes = pos & ((vcnt << amortizedshift ) - 1 );
131
-
132
- in = m -> kaddr - bytes ;
133
-
129
+ in -= bytes ;
134
130
i = bytes >> amortizedshift ;
135
131
136
132
lo = decode_compactedbits (lobits , in , encodebits * i , & type );
@@ -255,10 +251,6 @@ static int z_erofs_load_compact_lcluster(struct z_erofs_maprecorder *m,
255
251
amortizedshift = 2 ;
256
252
out :
257
253
pos += lcn * (1 << amortizedshift );
258
- m -> kaddr = erofs_read_metabuf (& m -> map -> buf , inode -> i_sb ,
259
- pos , EROFS_KMAP );
260
- if (IS_ERR (m -> kaddr ))
261
- return PTR_ERR (m -> kaddr );
262
254
return unpack_compacted_index (m , amortizedshift , pos , lookahead );
263
255
}
264
256
0 commit comments