| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * This file is part of UBIFS. |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Copyright (C) 2006-2008 Nokia Corporation. |
|---|
| 5 | 6 | * Copyright (C) 2006, 2007 University of Szeged, Hungary |
|---|
| 6 | | - * |
|---|
| 7 | | - * This program is free software; you can redistribute it and/or modify it |
|---|
| 8 | | - * under the terms of the GNU General Public License version 2 as published by |
|---|
| 9 | | - * the Free Software Foundation. |
|---|
| 10 | | - * |
|---|
| 11 | | - * This program is distributed in the hope that it will be useful, but WITHOUT |
|---|
| 12 | | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|---|
| 13 | | - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
|---|
| 14 | | - * more details. |
|---|
| 15 | | - * |
|---|
| 16 | | - * You should have received a copy of the GNU General Public License along with |
|---|
| 17 | | - * this program; if not, write to the Free Software Foundation, Inc., 51 |
|---|
| 18 | | - * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
|---|
| 19 | 7 | * |
|---|
| 20 | 8 | * Authors: Adrian Hunter |
|---|
| 21 | 9 | * Artem Bityutskiy (Битюцкий Артём) |
|---|
| .. | .. |
|---|
| 68 | 56 | static struct ubifs_compressor zlib_compr = { |
|---|
| 69 | 57 | .compr_type = UBIFS_COMPR_ZLIB, |
|---|
| 70 | 58 | .name = "zlib", |
|---|
| 59 | +}; |
|---|
| 60 | +#endif |
|---|
| 61 | + |
|---|
| 62 | +#ifdef CONFIG_UBIFS_FS_ZSTD |
|---|
| 63 | +static DEFINE_MUTEX(zstd_enc_mutex); |
|---|
| 64 | +static DEFINE_MUTEX(zstd_dec_mutex); |
|---|
| 65 | + |
|---|
| 66 | +static struct ubifs_compressor zstd_compr = { |
|---|
| 67 | + .compr_type = UBIFS_COMPR_ZSTD, |
|---|
| 68 | + .comp_mutex = &zstd_enc_mutex, |
|---|
| 69 | + .decomp_mutex = &zstd_dec_mutex, |
|---|
| 70 | + .name = "zstd", |
|---|
| 71 | + .capi_name = "zstd", |
|---|
| 72 | +}; |
|---|
| 73 | +#else |
|---|
| 74 | +static struct ubifs_compressor zstd_compr = { |
|---|
| 75 | + .compr_type = UBIFS_COMPR_ZSTD, |
|---|
| 76 | + .name = "zstd", |
|---|
| 71 | 77 | }; |
|---|
| 72 | 78 | #endif |
|---|
| 73 | 79 | |
|---|
| .. | .. |
|---|
| 228 | 234 | if (err) |
|---|
| 229 | 235 | return err; |
|---|
| 230 | 236 | |
|---|
| 231 | | - err = compr_init(&zlib_compr); |
|---|
| 237 | + err = compr_init(&zstd_compr); |
|---|
| 232 | 238 | if (err) |
|---|
| 233 | 239 | goto out_lzo; |
|---|
| 240 | + |
|---|
| 241 | + err = compr_init(&zlib_compr); |
|---|
| 242 | + if (err) |
|---|
| 243 | + goto out_zstd; |
|---|
| 234 | 244 | |
|---|
| 235 | 245 | ubifs_compressors[UBIFS_COMPR_NONE] = &none_compr; |
|---|
| 236 | 246 | return 0; |
|---|
| 237 | 247 | |
|---|
| 248 | +out_zstd: |
|---|
| 249 | + compr_exit(&zstd_compr); |
|---|
| 238 | 250 | out_lzo: |
|---|
| 239 | 251 | compr_exit(&lzo_compr); |
|---|
| 240 | 252 | return err; |
|---|
| .. | .. |
|---|
| 247 | 259 | { |
|---|
| 248 | 260 | compr_exit(&lzo_compr); |
|---|
| 249 | 261 | compr_exit(&zlib_compr); |
|---|
| 262 | + compr_exit(&zstd_compr); |
|---|
| 250 | 263 | } |
|---|