Skip to content

Commit 392d20c

Browse files
committed
erofs: move each decompressor to its own source file
Thus *_config() function declarations can be avoided. Signed-off-by: Gao Xiang <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 2080ca1 commit 392d20c

File tree

6 files changed

+44
-50
lines changed

6 files changed

+44
-50
lines changed

fs/erofs/compress.h

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -81,21 +81,11 @@ static inline bool z_erofs_put_shortlivedpage(struct page **pagepool,
8181
return true;
8282
}
8383

84+
extern const struct z_erofs_decompressor z_erofs_lzma_decomp;
85+
extern const struct z_erofs_decompressor z_erofs_deflate_decomp;
86+
extern const struct z_erofs_decompressor z_erofs_zstd_decomp;
87+
extern const struct z_erofs_decompressor *z_erofs_decomp[];
88+
8489
int z_erofs_fixup_insize(struct z_erofs_decompress_req *rq, const char *padbuf,
8590
unsigned int padbufsize);
86-
extern const struct z_erofs_decompressor erofs_decompressors[];
87-
88-
/* prototypes for specific algorithms */
89-
int z_erofs_load_lzma_config(struct super_block *sb,
90-
struct erofs_super_block *dsb, void *data, int size);
91-
int z_erofs_load_deflate_config(struct super_block *sb,
92-
struct erofs_super_block *dsb, void *data, int size);
93-
int z_erofs_load_zstd_config(struct super_block *sb,
94-
struct erofs_super_block *dsb, void *data, int size);
95-
int z_erofs_lzma_decompress(struct z_erofs_decompress_req *rq,
96-
struct page **pagepool);
97-
int z_erofs_deflate_decompress(struct z_erofs_decompress_req *rq,
98-
struct page **pagepool);
99-
int z_erofs_zstd_decompress(struct z_erofs_decompress_req *rq,
100-
struct page **pgpl);
10191
#endif

fs/erofs/decompressor.c

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -371,40 +371,28 @@ static int z_erofs_transform_plain(struct z_erofs_decompress_req *rq,
371371
return 0;
372372
}
373373

374-
const struct z_erofs_decompressor erofs_decompressors[] = {
375-
[Z_EROFS_COMPRESSION_SHIFTED] = {
374+
const struct z_erofs_decompressor *z_erofs_decomp[] = {
375+
[Z_EROFS_COMPRESSION_SHIFTED] = &(const struct z_erofs_decompressor) {
376376
.decompress = z_erofs_transform_plain,
377377
.name = "shifted"
378378
},
379-
[Z_EROFS_COMPRESSION_INTERLACED] = {
379+
[Z_EROFS_COMPRESSION_INTERLACED] = &(const struct z_erofs_decompressor) {
380380
.decompress = z_erofs_transform_plain,
381381
.name = "interlaced"
382382
},
383-
[Z_EROFS_COMPRESSION_LZ4] = {
383+
[Z_EROFS_COMPRESSION_LZ4] = &(const struct z_erofs_decompressor) {
384384
.config = z_erofs_load_lz4_config,
385385
.decompress = z_erofs_lz4_decompress,
386386
.name = "lz4"
387387
},
388388
#ifdef CONFIG_EROFS_FS_ZIP_LZMA
389-
[Z_EROFS_COMPRESSION_LZMA] = {
390-
.config = z_erofs_load_lzma_config,
391-
.decompress = z_erofs_lzma_decompress,
392-
.name = "lzma"
393-
},
389+
[Z_EROFS_COMPRESSION_LZMA] = &z_erofs_lzma_decomp,
394390
#endif
395391
#ifdef CONFIG_EROFS_FS_ZIP_DEFLATE
396-
[Z_EROFS_COMPRESSION_DEFLATE] = {
397-
.config = z_erofs_load_deflate_config,
398-
.decompress = z_erofs_deflate_decompress,
399-
.name = "deflate"
400-
},
392+
[Z_EROFS_COMPRESSION_DEFLATE] = &z_erofs_deflate_decomp,
401393
#endif
402394
#ifdef CONFIG_EROFS_FS_ZIP_ZSTD
403-
[Z_EROFS_COMPRESSION_ZSTD] = {
404-
.config = z_erofs_load_zstd_config,
405-
.decompress = z_erofs_zstd_decompress,
406-
.name = "zstd"
407-
},
395+
[Z_EROFS_COMPRESSION_ZSTD] = &z_erofs_zstd_decomp,
408396
#endif
409397
};
410398

@@ -432,6 +420,7 @@ int z_erofs_parse_cfgs(struct super_block *sb, struct erofs_super_block *dsb)
432420
offset = EROFS_SUPER_OFFSET + sbi->sb_size;
433421
alg = 0;
434422
for (algs = sbi->available_compr_algs; algs; algs >>= 1, ++alg) {
423+
const struct z_erofs_decompressor *dec = z_erofs_decomp[alg];
435424
void *data;
436425

437426
if (!(algs & 1))
@@ -443,16 +432,13 @@ int z_erofs_parse_cfgs(struct super_block *sb, struct erofs_super_block *dsb)
443432
break;
444433
}
445434

446-
if (alg >= ARRAY_SIZE(erofs_decompressors) ||
447-
!erofs_decompressors[alg].config) {
435+
if (alg < Z_EROFS_COMPRESSION_MAX && dec && dec->config) {
436+
ret = dec->config(sb, dsb, data, size);
437+
} else {
448438
erofs_err(sb, "algorithm %d isn't enabled on this kernel",
449439
alg);
450440
ret = -EOPNOTSUPP;
451-
} else {
452-
ret = erofs_decompressors[alg].config(sb,
453-
dsb, data, size);
454441
}
455-
456442
kfree(data);
457443
if (ret)
458444
break;

fs/erofs/decompressor_deflate.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ int __init z_erofs_deflate_init(void)
4949
return 0;
5050
}
5151

52-
int z_erofs_load_deflate_config(struct super_block *sb,
52+
static int z_erofs_load_deflate_config(struct super_block *sb,
5353
struct erofs_super_block *dsb, void *data, int size)
5454
{
5555
struct z_erofs_deflate_cfgs *dfl = data;
@@ -97,8 +97,8 @@ int z_erofs_load_deflate_config(struct super_block *sb,
9797
return -ENOMEM;
9898
}
9999

100-
int z_erofs_deflate_decompress(struct z_erofs_decompress_req *rq,
101-
struct page **pgpl)
100+
static int z_erofs_deflate_decompress(struct z_erofs_decompress_req *rq,
101+
struct page **pgpl)
102102
{
103103
const unsigned int nrpages_out =
104104
PAGE_ALIGN(rq->pageofs_out + rq->outputsize) >> PAGE_SHIFT;
@@ -252,3 +252,9 @@ int z_erofs_deflate_decompress(struct z_erofs_decompress_req *rq,
252252
wake_up(&z_erofs_deflate_wq);
253253
return err;
254254
}
255+
256+
const struct z_erofs_decompressor z_erofs_deflate_decomp = {
257+
.config = z_erofs_load_deflate_config,
258+
.decompress = z_erofs_deflate_decompress,
259+
.name = "deflate",
260+
};

fs/erofs/decompressor_lzma.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ int __init z_erofs_lzma_init(void)
7070
return 0;
7171
}
7272

73-
int z_erofs_load_lzma_config(struct super_block *sb,
73+
static int z_erofs_load_lzma_config(struct super_block *sb,
7474
struct erofs_super_block *dsb, void *data, int size)
7575
{
7676
static DEFINE_MUTEX(lzma_resize_mutex);
@@ -147,8 +147,8 @@ int z_erofs_load_lzma_config(struct super_block *sb,
147147
return err;
148148
}
149149

150-
int z_erofs_lzma_decompress(struct z_erofs_decompress_req *rq,
151-
struct page **pgpl)
150+
static int z_erofs_lzma_decompress(struct z_erofs_decompress_req *rq,
151+
struct page **pgpl)
152152
{
153153
const unsigned int nrpages_out =
154154
PAGE_ALIGN(rq->pageofs_out + rq->outputsize) >> PAGE_SHIFT;
@@ -293,3 +293,9 @@ int z_erofs_lzma_decompress(struct z_erofs_decompress_req *rq,
293293
wake_up(&z_erofs_lzma_wq);
294294
return err;
295295
}
296+
297+
const struct z_erofs_decompressor z_erofs_lzma_decomp = {
298+
.config = z_erofs_load_lzma_config,
299+
.decompress = z_erofs_lzma_decompress,
300+
.name = "lzma"
301+
};

fs/erofs/decompressor_zstd.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ int __init z_erofs_zstd_init(void)
7272
return 0;
7373
}
7474

75-
int z_erofs_load_zstd_config(struct super_block *sb,
75+
static int z_erofs_load_zstd_config(struct super_block *sb,
7676
struct erofs_super_block *dsb, void *data, int size)
7777
{
7878
static DEFINE_MUTEX(zstd_resize_mutex);
@@ -135,8 +135,8 @@ int z_erofs_load_zstd_config(struct super_block *sb,
135135
return strm ? -ENOMEM : 0;
136136
}
137137

138-
int z_erofs_zstd_decompress(struct z_erofs_decompress_req *rq,
139-
struct page **pgpl)
138+
static int z_erofs_zstd_decompress(struct z_erofs_decompress_req *rq,
139+
struct page **pgpl)
140140
{
141141
const unsigned int nrpages_out =
142142
PAGE_ALIGN(rq->pageofs_out + rq->outputsize) >> PAGE_SHIFT;
@@ -277,3 +277,9 @@ int z_erofs_zstd_decompress(struct z_erofs_decompress_req *rq,
277277
wake_up(&z_erofs_zstd_wq);
278278
return err;
279279
}
280+
281+
const struct z_erofs_decompressor z_erofs_zstd_decomp = {
282+
.config = z_erofs_load_zstd_config,
283+
.decompress = z_erofs_zstd_decompress,
284+
.name = "zstd",
285+
};

fs/erofs/zdata.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1213,7 +1213,7 @@ static int z_erofs_decompress_pcluster(struct z_erofs_decompress_backend *be,
12131213
struct z_erofs_pcluster *pcl = be->pcl;
12141214
unsigned int pclusterpages = z_erofs_pclusterpages(pcl);
12151215
const struct z_erofs_decompressor *decomp =
1216-
&erofs_decompressors[pcl->algorithmformat];
1216+
z_erofs_decomp[pcl->algorithmformat];
12171217
int i, err2;
12181218
struct page *page;
12191219
bool overlapped;

0 commit comments

Comments
 (0)