0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef __UBIFS_H__
0012 #define __UBIFS_H__
0013
0014 #include <asm/div64.h>
0015 #include <linux/statfs.h>
0016 #include <linux/fs.h>
0017 #include <linux/err.h>
0018 #include <linux/sched.h>
0019 #include <linux/slab.h>
0020 #include <linux/vmalloc.h>
0021 #include <linux/spinlock.h>
0022 #include <linux/mutex.h>
0023 #include <linux/rwsem.h>
0024 #include <linux/mtd/ubi.h>
0025 #include <linux/pagemap.h>
0026 #include <linux/backing-dev.h>
0027 #include <linux/security.h>
0028 #include <linux/xattr.h>
0029 #include <linux/random.h>
0030 #include <linux/sysfs.h>
0031 #include <linux/completion.h>
0032 #include <crypto/hash_info.h>
0033 #include <crypto/hash.h>
0034 #include <crypto/algapi.h>
0035
0036 #include <linux/fscrypt.h>
0037
0038 #include "ubifs-media.h"
0039
0040
0041 #define UBIFS_VERSION 1
0042
0043
0044 #define UBIFS_SUPER_MAGIC 0x24051905
0045
0046
0047 #define UBIFS_BLOCKS_PER_PAGE (PAGE_SIZE / UBIFS_BLOCK_SIZE)
0048 #define UBIFS_BLOCKS_PER_PAGE_SHIFT (PAGE_SHIFT - UBIFS_BLOCK_SHIFT)
0049
0050
0051 #define SQNUM_WARN_WATERMARK 0xFFFFFFFF00000000ULL
0052 #define SQNUM_WATERMARK 0xFFFFFFFFFF000000ULL
0053
0054
0055
0056
0057
0058
0059
0060 #define MIN_INDEX_LEBS 2
0061
0062
0063 #define MIN_WRITE_SZ (UBIFS_DATA_NODE_SZ + 8)
0064
0065
0066
0067
0068
0069
0070
0071 #define INUM_WARN_WATERMARK 0xFFF00000
0072 #define INUM_WATERMARK 0xFFFFFF00
0073
0074
0075 #define LPT_HEAP_SZ 256
0076
0077
0078
0079
0080
0081 #define BGT_NAME_PATTERN "ubifs_bgt%d_%d"
0082
0083
0084 #define MAX_INUM 0xFFFFFFFF
0085
0086
0087 #define NONDATA_JHEADS_CNT 2
0088
0089
0090 #define GCHD UBIFS_GC_HEAD
0091 #define BASEHD UBIFS_BASE_HEAD
0092 #define DATAHD UBIFS_DATA_HEAD
0093
0094
0095 #define LPROPS_NC 0x80000001
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106 #define UBIFS_TRUN_KEY UBIFS_KEY_TYPES_CNT
0107 #define UBIFS_INVALID_KEY UBIFS_KEY_TYPES_CNT
0108
0109
0110
0111
0112
0113 #define CALC_DENT_SIZE(name_len) ALIGN(UBIFS_DENT_NODE_SZ + (name_len) + 1, 8)
0114
0115
0116 #define CALC_XATTR_BYTES(data_len) ALIGN(UBIFS_INO_NODE_SZ + (data_len) + 1, 8)
0117
0118
0119
0120
0121
0122
0123
0124 #define OLD_ZNODE_AGE 20
0125 #define YOUNG_ZNODE_AGE 5
0126
0127
0128
0129
0130
0131
0132 #define WORST_COMPR_FACTOR 2
0133
0134 #ifdef CONFIG_FS_ENCRYPTION
0135 #define UBIFS_CIPHER_BLOCK_SIZE FSCRYPT_CONTENTS_ALIGNMENT
0136 #else
0137 #define UBIFS_CIPHER_BLOCK_SIZE 0
0138 #endif
0139
0140
0141
0142
0143 #define COMPRESSED_DATA_NODE_BUF_SZ \
0144 (UBIFS_DATA_NODE_SZ + UBIFS_BLOCK_SIZE * WORST_COMPR_FACTOR)
0145
0146
0147 #define BOTTOM_UP_HEIGHT 64
0148
0149
0150 #define UBIFS_MAX_BULK_READ 32
0151
0152 #ifdef CONFIG_UBIFS_FS_AUTHENTICATION
0153 #define UBIFS_HASH_ARR_SZ UBIFS_MAX_HASH_LEN
0154 #define UBIFS_HMAC_ARR_SZ UBIFS_MAX_HMAC_LEN
0155 #else
0156 #define UBIFS_HASH_ARR_SZ 0
0157 #define UBIFS_HMAC_ARR_SZ 0
0158 #endif
0159
0160
0161
0162
0163
0164 #define UBIFS_DFS_DIR_NAME "ubi%d_%d"
0165 #define UBIFS_DFS_DIR_LEN (3 + 1 + 2*2 + 1)
0166
0167
0168
0169
0170 enum {
0171 WB_MUTEX_1 = 0,
0172 WB_MUTEX_2 = 1,
0173 WB_MUTEX_3 = 2,
0174 WB_MUTEX_4 = 3,
0175 };
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187 enum {
0188 DIRTY_ZNODE = 0,
0189 COW_ZNODE = 1,
0190 OBSOLETE_ZNODE = 2,
0191 };
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203 enum {
0204 COMMIT_RESTING = 0,
0205 COMMIT_BACKGROUND,
0206 COMMIT_REQUIRED,
0207 COMMIT_RUNNING_BACKGROUND,
0208 COMMIT_RUNNING_REQUIRED,
0209 COMMIT_BROKEN,
0210 };
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223 enum {
0224 SCANNED_GARBAGE = 0,
0225 SCANNED_EMPTY_SPACE = -1,
0226 SCANNED_A_NODE = -2,
0227 SCANNED_A_CORRUPT_NODE = -3,
0228 SCANNED_A_BAD_PAD_NODE = -4,
0229 };
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239 enum {
0240 DIRTY_CNODE = 0,
0241 OBSOLETE_CNODE = 1,
0242 COW_CNODE = 2,
0243 };
0244
0245
0246
0247
0248
0249
0250
0251 enum {
0252 LTAB_DIRTY = 1,
0253 LSAVE_DIRTY = 2,
0254 };
0255
0256
0257
0258
0259
0260
0261
0262 enum {
0263 LEB_FREED,
0264 LEB_FREED_IDX,
0265 LEB_RETAINED,
0266 };
0267
0268
0269
0270
0271
0272
0273
0274 enum {
0275 ASSACT_REPORT = 0,
0276 ASSACT_RO,
0277 ASSACT_PANIC,
0278 };
0279
0280
0281
0282
0283
0284
0285
0286 struct ubifs_old_idx {
0287 struct rb_node rb;
0288 int lnum;
0289 int offs;
0290 };
0291
0292
0293 union ubifs_key {
0294 uint8_t u8[UBIFS_SK_LEN];
0295 uint32_t u32[UBIFS_SK_LEN/4];
0296 uint64_t u64[UBIFS_SK_LEN/8];
0297 __le32 j32[UBIFS_SK_LEN/4];
0298 };
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310 struct ubifs_scan_node {
0311 struct list_head list;
0312 union ubifs_key key;
0313 unsigned long long sqnum;
0314 int type;
0315 int offs;
0316 int len;
0317 void *node;
0318 };
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328 struct ubifs_scan_leb {
0329 int lnum;
0330 int nodes_cnt;
0331 struct list_head nodes;
0332 int endpt;
0333 void *buf;
0334 };
0335
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346 struct ubifs_gced_idx_leb {
0347 struct list_head list;
0348 int lnum;
0349 int unmap;
0350 };
0351
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410 struct ubifs_inode {
0411 struct inode vfs_inode;
0412 unsigned long long creat_sqnum;
0413 unsigned long long del_cmtno;
0414 unsigned int xattr_size;
0415 unsigned int xattr_cnt;
0416 unsigned int xattr_names;
0417 unsigned int dirty:1;
0418 unsigned int xattr:1;
0419 unsigned int bulk_read:1;
0420 unsigned int compr_type:2;
0421 struct mutex ui_mutex;
0422 struct rw_semaphore xattr_sem;
0423 spinlock_t ui_lock;
0424 loff_t synced_i_size;
0425 loff_t ui_size;
0426 int flags;
0427 pgoff_t last_page_read;
0428 pgoff_t read_in_a_row;
0429 int data_len;
0430 void *data;
0431 };
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443 struct ubifs_unclean_leb {
0444 struct list_head list;
0445 int lnum;
0446 int endpt;
0447 };
0448
0449
0450
0451
0452
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464 enum {
0465 LPROPS_UNCAT = 0,
0466 LPROPS_DIRTY = 1,
0467 LPROPS_DIRTY_IDX = 2,
0468 LPROPS_FREE = 3,
0469 LPROPS_HEAP_CNT = 3,
0470 LPROPS_EMPTY = 4,
0471 LPROPS_FREEABLE = 5,
0472 LPROPS_FRDI_IDX = 6,
0473 LPROPS_CAT_MASK = 15,
0474 LPROPS_TAKEN = 16,
0475 LPROPS_INDEX = 32,
0476 };
0477
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487 struct ubifs_lprops {
0488 int free;
0489 int dirty;
0490 int flags;
0491 int lnum;
0492 union {
0493 struct list_head list;
0494 int hpos;
0495 };
0496 };
0497
0498
0499
0500
0501
0502
0503
0504
0505 struct ubifs_lpt_lprops {
0506 int free;
0507 int dirty;
0508 unsigned tgc:1;
0509 unsigned cmt:1;
0510 };
0511
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537
0538 struct ubifs_lp_stats {
0539 int empty_lebs;
0540 int taken_empty_lebs;
0541 int idx_lebs;
0542 long long total_free;
0543 long long total_dirty;
0544 long long total_used;
0545 long long total_dead;
0546 long long total_dark;
0547 };
0548
0549 struct ubifs_nnode;
0550
0551
0552
0553
0554
0555
0556
0557
0558
0559
0560 struct ubifs_cnode {
0561 struct ubifs_nnode *parent;
0562 struct ubifs_cnode *cnext;
0563 unsigned long flags;
0564 int iip;
0565 int level;
0566 int num;
0567 };
0568
0569
0570
0571
0572
0573
0574
0575
0576
0577
0578
0579 struct ubifs_pnode {
0580 struct ubifs_nnode *parent;
0581 struct ubifs_cnode *cnext;
0582 unsigned long flags;
0583 int iip;
0584 int level;
0585 int num;
0586 struct ubifs_lprops lprops[UBIFS_LPT_FANOUT];
0587 };
0588
0589
0590
0591
0592
0593
0594
0595
0596
0597 struct ubifs_nbranch {
0598 int lnum;
0599 int offs;
0600 union {
0601 struct ubifs_nnode *nnode;
0602 struct ubifs_pnode *pnode;
0603 struct ubifs_cnode *cnode;
0604 };
0605 };
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617 struct ubifs_nnode {
0618 struct ubifs_nnode *parent;
0619 struct ubifs_cnode *cnext;
0620 unsigned long flags;
0621 int iip;
0622 int level;
0623 int num;
0624 struct ubifs_nbranch nbranch[UBIFS_LPT_FANOUT];
0625 };
0626
0627
0628
0629
0630
0631
0632
0633
0634
0635 struct ubifs_lpt_heap {
0636 struct ubifs_lprops **arr;
0637 int cnt;
0638 int max_cnt;
0639 };
0640
0641
0642
0643
0644
0645
0646
0647
0648 enum {
0649 LPT_SCAN_CONTINUE = 0,
0650 LPT_SCAN_ADD = 1,
0651 LPT_SCAN_STOP = 2,
0652 };
0653
0654 struct ubifs_info;
0655
0656
0657 typedef int (*ubifs_lpt_scan_callback)(struct ubifs_info *c,
0658 const struct ubifs_lprops *lprops,
0659 int in_tree, void *data);
0660
0661
0662
0663
0664
0665
0666
0667
0668
0669
0670
0671
0672
0673
0674
0675
0676
0677
0678
0679
0680
0681
0682
0683
0684
0685
0686
0687
0688
0689
0690
0691
0692 struct ubifs_wbuf {
0693 struct ubifs_info *c;
0694 void *buf;
0695 int lnum;
0696 int offs;
0697 int avail;
0698 int used;
0699 int size;
0700 int jhead;
0701 int (*sync_callback)(struct ubifs_info *c, int lnum, int free, int pad);
0702 struct mutex io_mutex;
0703 spinlock_t lock;
0704 struct hrtimer timer;
0705 unsigned int no_timer:1;
0706 unsigned int need_sync:1;
0707 int next_ino;
0708 ino_t *inodes;
0709 };
0710
0711
0712
0713
0714
0715
0716
0717
0718
0719
0720 struct ubifs_bud {
0721 int lnum;
0722 int start;
0723 int jhead;
0724 struct list_head list;
0725 struct rb_node rb;
0726 struct shash_desc *log_hash;
0727 };
0728
0729
0730
0731
0732
0733
0734
0735
0736
0737
0738 struct ubifs_jhead {
0739 struct ubifs_wbuf wbuf;
0740 struct list_head buds_list;
0741 unsigned int grouped:1;
0742 struct shash_desc *log_hash;
0743 };
0744
0745
0746
0747
0748
0749
0750
0751
0752
0753
0754 struct ubifs_zbranch {
0755 union ubifs_key key;
0756 union {
0757 struct ubifs_znode *znode;
0758 void *leaf;
0759 };
0760 int lnum;
0761 int offs;
0762 int len;
0763 u8 hash[UBIFS_HASH_ARR_SZ];
0764 };
0765
0766
0767
0768
0769
0770
0771
0772
0773
0774
0775
0776
0777
0778
0779
0780
0781
0782
0783
0784
0785
0786 struct ubifs_znode {
0787 struct ubifs_znode *parent;
0788 struct ubifs_znode *cnext;
0789 struct ubifs_znode *cparent;
0790 int ciip;
0791 unsigned long flags;
0792 time64_t time;
0793 int level;
0794 int child_cnt;
0795 int iip;
0796 int alt;
0797 int lnum;
0798 int offs;
0799 int len;
0800 struct ubifs_zbranch zbranch[];
0801 };
0802
0803
0804
0805
0806
0807
0808
0809
0810
0811
0812
0813
0814 struct bu_info {
0815 union ubifs_key key;
0816 struct ubifs_zbranch zbranch[UBIFS_MAX_BULK_READ];
0817 void *buf;
0818 int buf_len;
0819 int gc_seq;
0820 int cnt;
0821 int blk_cnt;
0822 int eof;
0823 };
0824
0825
0826
0827
0828
0829
0830
0831
0832
0833 struct ubifs_node_range {
0834 union {
0835 int len;
0836 int min_len;
0837 };
0838 int max_len;
0839 };
0840
0841
0842
0843
0844
0845
0846
0847
0848
0849
0850 struct ubifs_compressor {
0851 int compr_type;
0852 struct crypto_comp *cc;
0853 struct mutex *comp_mutex;
0854 struct mutex *decomp_mutex;
0855 const char *name;
0856 const char *capi_name;
0857 };
0858
0859
0860
0861
0862
0863
0864
0865
0866
0867
0868
0869
0870
0871
0872
0873
0874
0875
0876
0877
0878
0879
0880
0881
0882
0883
0884
0885
0886
0887
0888
0889
0890
0891
0892
0893 struct ubifs_budget_req {
0894 unsigned int fast:1;
0895 unsigned int recalculate:1;
0896 #ifndef UBIFS_DEBUG
0897 unsigned int new_page:1;
0898 unsigned int dirtied_page:1;
0899 unsigned int new_dent:1;
0900 unsigned int mod_dent:1;
0901 unsigned int new_ino:1;
0902 unsigned int new_ino_d:13;
0903 unsigned int dirtied_ino:4;
0904 unsigned int dirtied_ino_d:15;
0905 #else
0906
0907 unsigned int new_page;
0908 unsigned int dirtied_page;
0909 unsigned int new_dent;
0910 unsigned int mod_dent;
0911 unsigned int new_ino;
0912 unsigned int new_ino_d;
0913 unsigned int dirtied_ino;
0914 unsigned int dirtied_ino_d;
0915 #endif
0916 int idx_growth;
0917 int data_growth;
0918 int dd_growth;
0919 };
0920
0921
0922
0923
0924
0925
0926
0927
0928
0929
0930
0931
0932
0933
0934
0935 struct ubifs_orphan {
0936 struct rb_node rb;
0937 struct list_head list;
0938 struct list_head new_list;
0939 struct list_head child_list;
0940 struct ubifs_orphan *cnext;
0941 struct ubifs_orphan *dnext;
0942 ino_t inum;
0943 unsigned new:1;
0944 unsigned cmt:1;
0945 unsigned del:1;
0946 };
0947
0948
0949
0950
0951
0952
0953
0954
0955
0956
0957
0958
0959
0960 struct ubifs_mount_opts {
0961 unsigned int unmount_mode:2;
0962 unsigned int bulk_read:2;
0963 unsigned int chk_data_crc:2;
0964 unsigned int override_compr:1;
0965 unsigned int compr_type:2;
0966 };
0967
0968
0969
0970
0971
0972
0973
0974
0975
0976
0977
0978
0979
0980
0981
0982
0983
0984
0985
0986
0987
0988 struct ubifs_budg_info {
0989 long long idx_growth;
0990 long long data_growth;
0991 long long dd_growth;
0992 long long uncommitted_idx;
0993 unsigned long long old_idx_sz;
0994 int min_idx_lebs;
0995 unsigned int nospace:1;
0996 unsigned int nospace_rp:1;
0997 int page_budget;
0998 int inode_budget;
0999 int dent_budget;
1000 };
1001
1002
1003
1004
1005
1006
1007
1008 struct ubifs_stats_info {
1009 unsigned int magic_errors;
1010 unsigned int node_errors;
1011 unsigned int crc_errors;
1012 };
1013
1014 struct ubifs_debug_info;
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280 struct ubifs_info {
1281 struct super_block *vfs_sb;
1282 struct ubifs_sb_node *sup_node;
1283
1284 ino_t highest_inum;
1285 unsigned long long max_sqnum;
1286 unsigned long long cmt_no;
1287 spinlock_t cnt_lock;
1288 int fmt_version;
1289 int ro_compat_version;
1290 unsigned char uuid[16];
1291
1292 int lhead_lnum;
1293 int lhead_offs;
1294 int ltail_lnum;
1295 struct mutex log_mutex;
1296 int min_log_bytes;
1297 long long cmt_bud_bytes;
1298
1299 struct rb_root buds;
1300 long long bud_bytes;
1301 spinlock_t buds_lock;
1302 int jhead_cnt;
1303 struct ubifs_jhead *jheads;
1304 long long max_bud_bytes;
1305 long long bg_bud_bytes;
1306 struct list_head old_buds;
1307 int max_bud_cnt;
1308
1309 struct rw_semaphore commit_sem;
1310 int cmt_state;
1311 spinlock_t cs_lock;
1312 wait_queue_head_t cmt_wq;
1313
1314 struct kobject kobj;
1315 struct completion kobj_unregister;
1316
1317 unsigned int big_lpt:1;
1318 unsigned int space_fixup:1;
1319 unsigned int double_hash:1;
1320 unsigned int encrypted:1;
1321 unsigned int no_chk_data_crc:1;
1322 unsigned int bulk_read:1;
1323 unsigned int default_compr:2;
1324 unsigned int rw_incompat:1;
1325 unsigned int assert_action:2;
1326 unsigned int authenticated:1;
1327 unsigned int superblock_need_write:1;
1328
1329 struct mutex tnc_mutex;
1330 struct ubifs_zbranch zroot;
1331 struct ubifs_znode *cnext;
1332 struct ubifs_znode *enext;
1333 int *gap_lebs;
1334 void *cbuf;
1335 void *ileb_buf;
1336 int ileb_len;
1337 int ihead_lnum;
1338 int ihead_offs;
1339 int *ilebs;
1340 int ileb_cnt;
1341 int ileb_nxt;
1342 struct rb_root old_idx;
1343 int *bottom_up_buf;
1344
1345 struct ubifs_mst_node *mst_node;
1346 int mst_offs;
1347
1348 int max_bu_buf_len;
1349 struct mutex bu_mutex;
1350 struct bu_info bu;
1351
1352 struct mutex write_reserve_mutex;
1353 void *write_reserve_buf;
1354
1355 int log_lebs;
1356 long long log_bytes;
1357 int log_last;
1358 int lpt_lebs;
1359 int lpt_first;
1360 int lpt_last;
1361 int orph_lebs;
1362 int orph_first;
1363 int orph_last;
1364 int main_lebs;
1365 int main_first;
1366 long long main_bytes;
1367
1368 uint8_t key_hash_type;
1369 uint32_t (*key_hash)(const char *str, int len);
1370 int key_fmt;
1371 int key_len;
1372 int hash_len;
1373 int fanout;
1374
1375 int min_io_size;
1376 int min_io_shift;
1377 int max_write_size;
1378 int max_write_shift;
1379 int leb_size;
1380 int leb_start;
1381 int half_leb_size;
1382 int idx_leb_size;
1383 int leb_cnt;
1384 int max_leb_cnt;
1385 unsigned int ro_media:1;
1386 unsigned int ro_mount:1;
1387 unsigned int ro_error:1;
1388
1389 atomic_long_t dirty_pg_cnt;
1390 atomic_long_t dirty_zn_cnt;
1391 atomic_long_t clean_zn_cnt;
1392
1393 spinlock_t space_lock;
1394 struct ubifs_lp_stats lst;
1395 struct ubifs_budg_info bi;
1396 unsigned long long calc_idx_sz;
1397
1398 int ref_node_alsz;
1399 int mst_node_alsz;
1400 int min_idx_node_sz;
1401 int max_idx_node_sz;
1402 long long max_inode_sz;
1403 int max_znode_sz;
1404
1405 int leb_overhead;
1406 int dead_wm;
1407 int dark_wm;
1408 int block_cnt;
1409
1410 struct ubifs_node_range ranges[UBIFS_NODE_TYPES_CNT];
1411 struct ubi_volume_desc *ubi;
1412 struct ubi_device_info di;
1413 struct ubi_volume_info vi;
1414
1415 struct rb_root orph_tree;
1416 struct list_head orph_list;
1417 struct list_head orph_new;
1418 struct ubifs_orphan *orph_cnext;
1419 struct ubifs_orphan *orph_dnext;
1420 spinlock_t orphan_lock;
1421 void *orph_buf;
1422 int new_orphans;
1423 int cmt_orphans;
1424 int tot_orphans;
1425 int max_orphans;
1426 int ohead_lnum;
1427 int ohead_offs;
1428 int no_orphs;
1429
1430 struct task_struct *bgt;
1431 char bgt_name[sizeof(BGT_NAME_PATTERN) + 9];
1432 int need_bgt;
1433 int need_wbuf_sync;
1434
1435 int gc_lnum;
1436 void *sbuf;
1437 struct list_head idx_gc;
1438 int idx_gc_cnt;
1439 int gc_seq;
1440 int gced_lnum;
1441
1442 struct list_head infos_list;
1443 struct mutex umount_mutex;
1444 unsigned int shrinker_run_no;
1445
1446 int space_bits;
1447 int lpt_lnum_bits;
1448 int lpt_offs_bits;
1449 int lpt_spc_bits;
1450 int pcnt_bits;
1451 int lnum_bits;
1452 int nnode_sz;
1453 int pnode_sz;
1454 int ltab_sz;
1455 int lsave_sz;
1456 int pnode_cnt;
1457 int nnode_cnt;
1458 int lpt_hght;
1459 int pnodes_have;
1460
1461 struct mutex lp_mutex;
1462 int lpt_lnum;
1463 int lpt_offs;
1464 int nhead_lnum;
1465 int nhead_offs;
1466 int lpt_drty_flgs;
1467 int dirty_nn_cnt;
1468 int dirty_pn_cnt;
1469 int check_lpt_free;
1470 long long lpt_sz;
1471 void *lpt_nod_buf;
1472 void *lpt_buf;
1473 struct ubifs_nnode *nroot;
1474 struct ubifs_cnode *lpt_cnext;
1475 struct ubifs_lpt_heap lpt_heap[LPROPS_HEAP_CNT];
1476 struct ubifs_lpt_heap dirty_idx;
1477 struct list_head uncat_list;
1478 struct list_head empty_list;
1479 struct list_head freeable_list;
1480 struct list_head frdi_idx_list;
1481 int freeable_cnt;
1482 int in_a_category_cnt;
1483
1484 int ltab_lnum;
1485 int ltab_offs;
1486 struct ubifs_lpt_lprops *ltab;
1487 struct ubifs_lpt_lprops *ltab_cmt;
1488 int lsave_cnt;
1489 int lsave_lnum;
1490 int lsave_offs;
1491 int *lsave;
1492 int lscan_lnum;
1493
1494 long long rp_size;
1495 long long report_rp_size;
1496 kuid_t rp_uid;
1497 kgid_t rp_gid;
1498
1499 struct crypto_shash *hash_tfm;
1500 struct crypto_shash *hmac_tfm;
1501 int hmac_desc_len;
1502 char *auth_key_name;
1503 char *auth_hash_name;
1504 enum hash_algo auth_hash_algo;
1505
1506 struct shash_desc *log_hash;
1507
1508
1509 unsigned int empty:1;
1510 unsigned int need_recovery:1;
1511 unsigned int replaying:1;
1512 unsigned int mounting:1;
1513 unsigned int remounting_rw:1;
1514 unsigned int probing:1;
1515 struct list_head replay_list;
1516 struct list_head replay_buds;
1517 unsigned long long cs_sqnum;
1518 struct list_head unclean_leb_list;
1519 struct ubifs_mst_node *rcvrd_mst_node;
1520 struct rb_root size_tree;
1521 struct ubifs_mount_opts mount_opts;
1522
1523 struct ubifs_debug_info *dbg;
1524 struct ubifs_stats_info *stats;
1525 };
1526
1527 extern struct list_head ubifs_infos;
1528 extern spinlock_t ubifs_infos_lock;
1529 extern atomic_long_t ubifs_clean_zn_cnt;
1530 extern const struct super_operations ubifs_super_operations;
1531 extern const struct address_space_operations ubifs_file_address_operations;
1532 extern const struct file_operations ubifs_file_operations;
1533 extern const struct inode_operations ubifs_file_inode_operations;
1534 extern const struct file_operations ubifs_dir_operations;
1535 extern const struct inode_operations ubifs_dir_inode_operations;
1536 extern const struct inode_operations ubifs_symlink_inode_operations;
1537 extern struct ubifs_compressor *ubifs_compressors[UBIFS_COMPR_TYPES_CNT];
1538 extern int ubifs_default_version;
1539
1540
1541 static inline int ubifs_authenticated(const struct ubifs_info *c)
1542 {
1543 return (IS_ENABLED(CONFIG_UBIFS_FS_AUTHENTICATION)) && c->authenticated;
1544 }
1545
1546 struct shash_desc *__ubifs_hash_get_desc(const struct ubifs_info *c);
1547 static inline struct shash_desc *ubifs_hash_get_desc(const struct ubifs_info *c)
1548 {
1549 return ubifs_authenticated(c) ? __ubifs_hash_get_desc(c) : NULL;
1550 }
1551
1552 static inline int ubifs_shash_init(const struct ubifs_info *c,
1553 struct shash_desc *desc)
1554 {
1555 if (ubifs_authenticated(c))
1556 return crypto_shash_init(desc);
1557 else
1558 return 0;
1559 }
1560
1561 static inline int ubifs_shash_update(const struct ubifs_info *c,
1562 struct shash_desc *desc, const void *buf,
1563 unsigned int len)
1564 {
1565 int err = 0;
1566
1567 if (ubifs_authenticated(c)) {
1568 err = crypto_shash_update(desc, buf, len);
1569 if (err < 0)
1570 return err;
1571 }
1572
1573 return 0;
1574 }
1575
1576 static inline int ubifs_shash_final(const struct ubifs_info *c,
1577 struct shash_desc *desc, u8 *out)
1578 {
1579 return ubifs_authenticated(c) ? crypto_shash_final(desc, out) : 0;
1580 }
1581
1582 int __ubifs_node_calc_hash(const struct ubifs_info *c, const void *buf,
1583 u8 *hash);
1584 static inline int ubifs_node_calc_hash(const struct ubifs_info *c,
1585 const void *buf, u8 *hash)
1586 {
1587 if (ubifs_authenticated(c))
1588 return __ubifs_node_calc_hash(c, buf, hash);
1589 else
1590 return 0;
1591 }
1592
1593 int ubifs_prepare_auth_node(struct ubifs_info *c, void *node,
1594 struct shash_desc *inhash);
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605 static inline int ubifs_check_hash(const struct ubifs_info *c,
1606 const u8 *expected, const u8 *got)
1607 {
1608 return crypto_memneq(expected, got, c->hash_len);
1609 }
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620 static inline int ubifs_check_hmac(const struct ubifs_info *c,
1621 const u8 *expected, const u8 *got)
1622 {
1623 return crypto_memneq(expected, got, c->hmac_desc_len);
1624 }
1625
1626 void ubifs_bad_hash(const struct ubifs_info *c, const void *node,
1627 const u8 *hash, int lnum, int offs);
1628
1629 int __ubifs_node_check_hash(const struct ubifs_info *c, const void *buf,
1630 const u8 *expected);
1631 static inline int ubifs_node_check_hash(const struct ubifs_info *c,
1632 const void *buf, const u8 *expected)
1633 {
1634 if (ubifs_authenticated(c))
1635 return __ubifs_node_check_hash(c, buf, expected);
1636 else
1637 return 0;
1638 }
1639
1640 int ubifs_init_authentication(struct ubifs_info *c);
1641 void __ubifs_exit_authentication(struct ubifs_info *c);
1642 static inline void ubifs_exit_authentication(struct ubifs_info *c)
1643 {
1644 if (ubifs_authenticated(c))
1645 __ubifs_exit_authentication(c);
1646 }
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656 static inline u8 *ubifs_branch_hash(struct ubifs_info *c,
1657 struct ubifs_branch *br)
1658 {
1659 return (void *)br + sizeof(*br) + c->key_len;
1660 }
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670 static inline void ubifs_copy_hash(const struct ubifs_info *c, const u8 *from,
1671 u8 *to)
1672 {
1673 if (ubifs_authenticated(c))
1674 memcpy(to, from, c->hash_len);
1675 }
1676
1677 int __ubifs_node_insert_hmac(const struct ubifs_info *c, void *buf,
1678 int len, int ofs_hmac);
1679 static inline int ubifs_node_insert_hmac(const struct ubifs_info *c, void *buf,
1680 int len, int ofs_hmac)
1681 {
1682 if (ubifs_authenticated(c))
1683 return __ubifs_node_insert_hmac(c, buf, len, ofs_hmac);
1684 else
1685 return 0;
1686 }
1687
1688 int __ubifs_node_verify_hmac(const struct ubifs_info *c, const void *buf,
1689 int len, int ofs_hmac);
1690 static inline int ubifs_node_verify_hmac(const struct ubifs_info *c,
1691 const void *buf, int len, int ofs_hmac)
1692 {
1693 if (ubifs_authenticated(c))
1694 return __ubifs_node_verify_hmac(c, buf, len, ofs_hmac);
1695 else
1696 return 0;
1697 }
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707 static inline int ubifs_auth_node_sz(const struct ubifs_info *c)
1708 {
1709 if (ubifs_authenticated(c))
1710 return sizeof(struct ubifs_auth_node) + c->hmac_desc_len;
1711 else
1712 return 0;
1713 }
1714 int ubifs_sb_verify_signature(struct ubifs_info *c,
1715 const struct ubifs_sb_node *sup);
1716 bool ubifs_hmac_zero(struct ubifs_info *c, const u8 *hmac);
1717
1718 int ubifs_hmac_wkm(struct ubifs_info *c, u8 *hmac);
1719
1720 int __ubifs_shash_copy_state(const struct ubifs_info *c, struct shash_desc *src,
1721 struct shash_desc *target);
1722 static inline int ubifs_shash_copy_state(const struct ubifs_info *c,
1723 struct shash_desc *src,
1724 struct shash_desc *target)
1725 {
1726 if (ubifs_authenticated(c))
1727 return __ubifs_shash_copy_state(c, src, target);
1728 else
1729 return 0;
1730 }
1731
1732
1733 void ubifs_ro_mode(struct ubifs_info *c, int err);
1734 int ubifs_leb_read(const struct ubifs_info *c, int lnum, void *buf, int offs,
1735 int len, int even_ebadmsg);
1736 int ubifs_leb_write(struct ubifs_info *c, int lnum, const void *buf, int offs,
1737 int len);
1738 int ubifs_leb_change(struct ubifs_info *c, int lnum, const void *buf, int len);
1739 int ubifs_leb_unmap(struct ubifs_info *c, int lnum);
1740 int ubifs_leb_map(struct ubifs_info *c, int lnum);
1741 int ubifs_is_mapped(const struct ubifs_info *c, int lnum);
1742 int ubifs_wbuf_write_nolock(struct ubifs_wbuf *wbuf, void *buf, int len);
1743 int ubifs_wbuf_seek_nolock(struct ubifs_wbuf *wbuf, int lnum, int offs);
1744 int ubifs_wbuf_init(struct ubifs_info *c, struct ubifs_wbuf *wbuf);
1745 int ubifs_read_node(const struct ubifs_info *c, void *buf, int type, int len,
1746 int lnum, int offs);
1747 int ubifs_read_node_wbuf(struct ubifs_wbuf *wbuf, void *buf, int type, int len,
1748 int lnum, int offs);
1749 int ubifs_write_node(struct ubifs_info *c, void *node, int len, int lnum,
1750 int offs);
1751 int ubifs_write_node_hmac(struct ubifs_info *c, void *buf, int len, int lnum,
1752 int offs, int hmac_offs);
1753 int ubifs_check_node(const struct ubifs_info *c, const void *buf, int len,
1754 int lnum, int offs, int quiet, int must_chk_crc);
1755 void ubifs_init_node(struct ubifs_info *c, void *buf, int len, int pad);
1756 void ubifs_crc_node(struct ubifs_info *c, void *buf, int len);
1757 void ubifs_prepare_node(struct ubifs_info *c, void *buf, int len, int pad);
1758 int ubifs_prepare_node_hmac(struct ubifs_info *c, void *node, int len,
1759 int hmac_offs, int pad);
1760 void ubifs_prep_grp_node(struct ubifs_info *c, void *node, int len, int last);
1761 int ubifs_io_init(struct ubifs_info *c);
1762 void ubifs_pad(const struct ubifs_info *c, void *buf, int pad);
1763 int ubifs_wbuf_sync_nolock(struct ubifs_wbuf *wbuf);
1764 int ubifs_bg_wbufs_sync(struct ubifs_info *c);
1765 void ubifs_wbuf_add_ino_nolock(struct ubifs_wbuf *wbuf, ino_t inum);
1766 int ubifs_sync_wbufs_by_inode(struct ubifs_info *c, struct inode *inode);
1767
1768
1769 struct ubifs_scan_leb *ubifs_scan(const struct ubifs_info *c, int lnum,
1770 int offs, void *sbuf, int quiet);
1771 void ubifs_scan_destroy(struct ubifs_scan_leb *sleb);
1772 int ubifs_scan_a_node(const struct ubifs_info *c, void *buf, int len, int lnum,
1773 int offs, int quiet);
1774 struct ubifs_scan_leb *ubifs_start_scan(const struct ubifs_info *c, int lnum,
1775 int offs, void *sbuf);
1776 void ubifs_end_scan(const struct ubifs_info *c, struct ubifs_scan_leb *sleb,
1777 int lnum, int offs);
1778 int ubifs_add_snod(const struct ubifs_info *c, struct ubifs_scan_leb *sleb,
1779 void *buf, int offs);
1780 void ubifs_scanned_corruption(const struct ubifs_info *c, int lnum, int offs,
1781 void *buf);
1782
1783
1784 void ubifs_add_bud(struct ubifs_info *c, struct ubifs_bud *bud);
1785 void ubifs_create_buds_lists(struct ubifs_info *c);
1786 int ubifs_add_bud_to_log(struct ubifs_info *c, int jhead, int lnum, int offs);
1787 struct ubifs_bud *ubifs_search_bud(struct ubifs_info *c, int lnum);
1788 struct ubifs_wbuf *ubifs_get_wbuf(struct ubifs_info *c, int lnum);
1789 int ubifs_log_start_commit(struct ubifs_info *c, int *ltail_lnum);
1790 int ubifs_log_end_commit(struct ubifs_info *c, int new_ltail_lnum);
1791 int ubifs_log_post_commit(struct ubifs_info *c, int old_ltail_lnum);
1792 int ubifs_consolidate_log(struct ubifs_info *c);
1793
1794
1795 int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir,
1796 const struct fscrypt_name *nm, const struct inode *inode,
1797 int deletion, int xent);
1798 int ubifs_jnl_write_data(struct ubifs_info *c, const struct inode *inode,
1799 const union ubifs_key *key, const void *buf, int len);
1800 int ubifs_jnl_write_inode(struct ubifs_info *c, const struct inode *inode);
1801 int ubifs_jnl_delete_inode(struct ubifs_info *c, const struct inode *inode);
1802 int ubifs_jnl_xrename(struct ubifs_info *c, const struct inode *fst_dir,
1803 const struct inode *fst_inode,
1804 const struct fscrypt_name *fst_nm,
1805 const struct inode *snd_dir,
1806 const struct inode *snd_inode,
1807 const struct fscrypt_name *snd_nm, int sync);
1808 int ubifs_jnl_rename(struct ubifs_info *c, const struct inode *old_dir,
1809 const struct inode *old_inode,
1810 const struct fscrypt_name *old_nm,
1811 const struct inode *new_dir,
1812 const struct inode *new_inode,
1813 const struct fscrypt_name *new_nm,
1814 const struct inode *whiteout, int sync);
1815 int ubifs_jnl_truncate(struct ubifs_info *c, const struct inode *inode,
1816 loff_t old_size, loff_t new_size);
1817 int ubifs_jnl_delete_xattr(struct ubifs_info *c, const struct inode *host,
1818 const struct inode *inode, const struct fscrypt_name *nm);
1819 int ubifs_jnl_change_xattr(struct ubifs_info *c, const struct inode *inode1,
1820 const struct inode *inode2);
1821
1822
1823 int ubifs_budget_space(struct ubifs_info *c, struct ubifs_budget_req *req);
1824 void ubifs_release_budget(struct ubifs_info *c, struct ubifs_budget_req *req);
1825 void ubifs_release_dirty_inode_budget(struct ubifs_info *c,
1826 struct ubifs_inode *ui);
1827 int ubifs_budget_inode_op(struct ubifs_info *c, struct inode *inode,
1828 struct ubifs_budget_req *req);
1829 void ubifs_release_ino_dirty(struct ubifs_info *c, struct inode *inode,
1830 struct ubifs_budget_req *req);
1831 void ubifs_cancel_ino_op(struct ubifs_info *c, struct inode *inode,
1832 struct ubifs_budget_req *req);
1833 long long ubifs_get_free_space(struct ubifs_info *c);
1834 long long ubifs_get_free_space_nolock(struct ubifs_info *c);
1835 int ubifs_calc_min_idx_lebs(struct ubifs_info *c);
1836 void ubifs_convert_page_budget(struct ubifs_info *c);
1837 long long ubifs_reported_space(const struct ubifs_info *c, long long free);
1838 long long ubifs_calc_available(const struct ubifs_info *c, int min_idx_lebs);
1839
1840
1841 int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *offs,
1842 int squeeze);
1843 int ubifs_find_free_leb_for_idx(struct ubifs_info *c);
1844 int ubifs_find_dirty_leb(struct ubifs_info *c, struct ubifs_lprops *ret_lp,
1845 int min_space, int pick_free);
1846 int ubifs_find_dirty_idx_leb(struct ubifs_info *c);
1847 int ubifs_save_dirty_idx_lnums(struct ubifs_info *c);
1848
1849
1850 int ubifs_lookup_level0(struct ubifs_info *c, const union ubifs_key *key,
1851 struct ubifs_znode **zn, int *n);
1852 int ubifs_tnc_lookup_nm(struct ubifs_info *c, const union ubifs_key *key,
1853 void *node, const struct fscrypt_name *nm);
1854 int ubifs_tnc_lookup_dh(struct ubifs_info *c, const union ubifs_key *key,
1855 void *node, uint32_t secondary_hash);
1856 int ubifs_tnc_locate(struct ubifs_info *c, const union ubifs_key *key,
1857 void *node, int *lnum, int *offs);
1858 int ubifs_tnc_add(struct ubifs_info *c, const union ubifs_key *key, int lnum,
1859 int offs, int len, const u8 *hash);
1860 int ubifs_tnc_replace(struct ubifs_info *c, const union ubifs_key *key,
1861 int old_lnum, int old_offs, int lnum, int offs, int len);
1862 int ubifs_tnc_add_nm(struct ubifs_info *c, const union ubifs_key *key,
1863 int lnum, int offs, int len, const u8 *hash,
1864 const struct fscrypt_name *nm);
1865 int ubifs_tnc_remove(struct ubifs_info *c, const union ubifs_key *key);
1866 int ubifs_tnc_remove_nm(struct ubifs_info *c, const union ubifs_key *key,
1867 const struct fscrypt_name *nm);
1868 int ubifs_tnc_remove_dh(struct ubifs_info *c, const union ubifs_key *key,
1869 uint32_t cookie);
1870 int ubifs_tnc_remove_range(struct ubifs_info *c, union ubifs_key *from_key,
1871 union ubifs_key *to_key);
1872 int ubifs_tnc_remove_ino(struct ubifs_info *c, ino_t inum);
1873 struct ubifs_dent_node *ubifs_tnc_next_ent(struct ubifs_info *c,
1874 union ubifs_key *key,
1875 const struct fscrypt_name *nm);
1876 void ubifs_tnc_close(struct ubifs_info *c);
1877 int ubifs_tnc_has_node(struct ubifs_info *c, union ubifs_key *key, int level,
1878 int lnum, int offs, int is_idx);
1879 int ubifs_dirty_idx_node(struct ubifs_info *c, union ubifs_key *key, int level,
1880 int lnum, int offs);
1881
1882 void destroy_old_idx(struct ubifs_info *c);
1883 int is_idx_node_in_tnc(struct ubifs_info *c, union ubifs_key *key, int level,
1884 int lnum, int offs);
1885 int insert_old_idx_znode(struct ubifs_info *c, struct ubifs_znode *znode);
1886 int ubifs_tnc_get_bu_keys(struct ubifs_info *c, struct bu_info *bu);
1887 int ubifs_tnc_bulk_read(struct ubifs_info *c, struct bu_info *bu);
1888
1889
1890 struct ubifs_znode *ubifs_tnc_levelorder_next(const struct ubifs_info *c,
1891 struct ubifs_znode *zr,
1892 struct ubifs_znode *znode);
1893 int ubifs_search_zbranch(const struct ubifs_info *c,
1894 const struct ubifs_znode *znode,
1895 const union ubifs_key *key, int *n);
1896 struct ubifs_znode *ubifs_tnc_postorder_first(struct ubifs_znode *znode);
1897 struct ubifs_znode *ubifs_tnc_postorder_next(const struct ubifs_info *c,
1898 struct ubifs_znode *znode);
1899 long ubifs_destroy_tnc_subtree(const struct ubifs_info *c,
1900 struct ubifs_znode *zr);
1901 struct ubifs_znode *ubifs_load_znode(struct ubifs_info *c,
1902 struct ubifs_zbranch *zbr,
1903 struct ubifs_znode *parent, int iip);
1904 int ubifs_tnc_read_node(struct ubifs_info *c, struct ubifs_zbranch *zbr,
1905 void *node);
1906
1907
1908 int ubifs_tnc_start_commit(struct ubifs_info *c, struct ubifs_zbranch *zroot);
1909 int ubifs_tnc_end_commit(struct ubifs_info *c);
1910
1911
1912 unsigned long ubifs_shrink_scan(struct shrinker *shrink,
1913 struct shrink_control *sc);
1914 unsigned long ubifs_shrink_count(struct shrinker *shrink,
1915 struct shrink_control *sc);
1916
1917
1918 int ubifs_bg_thread(void *info);
1919 void ubifs_commit_required(struct ubifs_info *c);
1920 void ubifs_request_bg_commit(struct ubifs_info *c);
1921 int ubifs_run_commit(struct ubifs_info *c);
1922 void ubifs_recovery_commit(struct ubifs_info *c);
1923 int ubifs_gc_should_commit(struct ubifs_info *c);
1924 void ubifs_wait_for_commit(struct ubifs_info *c);
1925
1926
1927 int ubifs_compare_master_node(struct ubifs_info *c, void *m1, void *m2);
1928 int ubifs_read_master(struct ubifs_info *c);
1929 int ubifs_write_master(struct ubifs_info *c);
1930
1931
1932 int ubifs_read_superblock(struct ubifs_info *c);
1933 int ubifs_write_sb_node(struct ubifs_info *c, struct ubifs_sb_node *sup);
1934 int ubifs_fixup_free_space(struct ubifs_info *c);
1935 int ubifs_enable_encryption(struct ubifs_info *c);
1936
1937
1938 int ubifs_validate_entry(struct ubifs_info *c,
1939 const struct ubifs_dent_node *dent);
1940 int ubifs_replay_journal(struct ubifs_info *c);
1941
1942
1943 int ubifs_garbage_collect(struct ubifs_info *c, int anyway);
1944 int ubifs_gc_start_commit(struct ubifs_info *c);
1945 int ubifs_gc_end_commit(struct ubifs_info *c);
1946 void ubifs_destroy_idx_gc(struct ubifs_info *c);
1947 int ubifs_get_idx_gc_leb(struct ubifs_info *c);
1948 int ubifs_garbage_collect_leb(struct ubifs_info *c, struct ubifs_lprops *lp);
1949
1950
1951 int ubifs_add_orphan(struct ubifs_info *c, ino_t inum);
1952 void ubifs_delete_orphan(struct ubifs_info *c, ino_t inum);
1953 int ubifs_orphan_start_commit(struct ubifs_info *c);
1954 int ubifs_orphan_end_commit(struct ubifs_info *c);
1955 int ubifs_mount_orphans(struct ubifs_info *c, int unclean, int read_only);
1956 int ubifs_clear_orphans(struct ubifs_info *c);
1957
1958
1959 int ubifs_calc_lpt_geom(struct ubifs_info *c);
1960 int ubifs_create_dflt_lpt(struct ubifs_info *c, int *main_lebs, int lpt_first,
1961 int *lpt_lebs, int *big_lpt, u8 *hash);
1962 int ubifs_lpt_init(struct ubifs_info *c, int rd, int wr);
1963 struct ubifs_lprops *ubifs_lpt_lookup(struct ubifs_info *c, int lnum);
1964 struct ubifs_lprops *ubifs_lpt_lookup_dirty(struct ubifs_info *c, int lnum);
1965 int ubifs_lpt_scan_nolock(struct ubifs_info *c, int start_lnum, int end_lnum,
1966 ubifs_lpt_scan_callback scan_cb, void *data);
1967
1968
1969 void ubifs_pack_lsave(struct ubifs_info *c, void *buf, int *lsave);
1970 void ubifs_pack_ltab(struct ubifs_info *c, void *buf,
1971 struct ubifs_lpt_lprops *ltab);
1972 void ubifs_pack_pnode(struct ubifs_info *c, void *buf,
1973 struct ubifs_pnode *pnode);
1974 void ubifs_pack_nnode(struct ubifs_info *c, void *buf,
1975 struct ubifs_nnode *nnode);
1976 struct ubifs_pnode *ubifs_get_pnode(struct ubifs_info *c,
1977 struct ubifs_nnode *parent, int iip);
1978 struct ubifs_nnode *ubifs_get_nnode(struct ubifs_info *c,
1979 struct ubifs_nnode *parent, int iip);
1980 struct ubifs_pnode *ubifs_pnode_lookup(struct ubifs_info *c, int i);
1981 int ubifs_read_nnode(struct ubifs_info *c, struct ubifs_nnode *parent, int iip);
1982 void ubifs_add_lpt_dirt(struct ubifs_info *c, int lnum, int dirty);
1983 void ubifs_add_nnode_dirt(struct ubifs_info *c, struct ubifs_nnode *nnode);
1984 uint32_t ubifs_unpack_bits(const struct ubifs_info *c, uint8_t **addr, int *pos, int nrbits);
1985 struct ubifs_nnode *ubifs_first_nnode(struct ubifs_info *c, int *hght);
1986
1987 int ubifs_unpack_nnode(const struct ubifs_info *c, void *buf,
1988 struct ubifs_nnode *nnode);
1989 int ubifs_lpt_calc_hash(struct ubifs_info *c, u8 *hash);
1990
1991
1992 int ubifs_lpt_start_commit(struct ubifs_info *c);
1993 int ubifs_lpt_end_commit(struct ubifs_info *c);
1994 int ubifs_lpt_post_commit(struct ubifs_info *c);
1995 void ubifs_lpt_free(struct ubifs_info *c, int wr_only);
1996
1997
1998 const struct ubifs_lprops *ubifs_change_lp(struct ubifs_info *c,
1999 const struct ubifs_lprops *lp,
2000 int free, int dirty, int flags,
2001 int idx_gc_cnt);
2002 void ubifs_get_lp_stats(struct ubifs_info *c, struct ubifs_lp_stats *lst);
2003 void ubifs_add_to_cat(struct ubifs_info *c, struct ubifs_lprops *lprops,
2004 int cat);
2005 void ubifs_replace_cat(struct ubifs_info *c, struct ubifs_lprops *old_lprops,
2006 struct ubifs_lprops *new_lprops);
2007 void ubifs_ensure_cat(struct ubifs_info *c, struct ubifs_lprops *lprops);
2008 int ubifs_categorize_lprops(const struct ubifs_info *c,
2009 const struct ubifs_lprops *lprops);
2010 int ubifs_change_one_lp(struct ubifs_info *c, int lnum, int free, int dirty,
2011 int flags_set, int flags_clean, int idx_gc_cnt);
2012 int ubifs_update_one_lp(struct ubifs_info *c, int lnum, int free, int dirty,
2013 int flags_set, int flags_clean);
2014 int ubifs_read_one_lp(struct ubifs_info *c, int lnum, struct ubifs_lprops *lp);
2015 const struct ubifs_lprops *ubifs_fast_find_free(struct ubifs_info *c);
2016 const struct ubifs_lprops *ubifs_fast_find_empty(struct ubifs_info *c);
2017 const struct ubifs_lprops *ubifs_fast_find_freeable(struct ubifs_info *c);
2018 const struct ubifs_lprops *ubifs_fast_find_frdi_idx(struct ubifs_info *c);
2019 int ubifs_calc_dark(const struct ubifs_info *c, int spc);
2020
2021
2022 int ubifs_fsync(struct file *file, loff_t start, loff_t end, int datasync);
2023 int ubifs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
2024 struct iattr *attr);
2025 int ubifs_update_time(struct inode *inode, struct timespec64 *time, int flags);
2026
2027
2028 struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
2029 umode_t mode);
2030 int ubifs_getattr(struct user_namespace *mnt_userns, const struct path *path, struct kstat *stat,
2031 u32 request_mask, unsigned int flags);
2032 int ubifs_check_dir_empty(struct inode *dir);
2033
2034
2035 int ubifs_xattr_set(struct inode *host, const char *name, const void *value,
2036 size_t size, int flags, bool check_lock);
2037 ssize_t ubifs_xattr_get(struct inode *host, const char *name, void *buf,
2038 size_t size);
2039
2040 #ifdef CONFIG_UBIFS_FS_XATTR
2041 extern const struct xattr_handler *ubifs_xattr_handlers[];
2042 ssize_t ubifs_listxattr(struct dentry *dentry, char *buffer, size_t size);
2043 void ubifs_evict_xattr_inode(struct ubifs_info *c, ino_t xattr_inum);
2044 int ubifs_purge_xattrs(struct inode *host);
2045 #else
2046 #define ubifs_listxattr NULL
2047 #define ubifs_xattr_handlers NULL
2048 static inline void ubifs_evict_xattr_inode(struct ubifs_info *c,
2049 ino_t xattr_inum) { }
2050 static inline int ubifs_purge_xattrs(struct inode *host)
2051 {
2052 return 0;
2053 }
2054 #endif
2055
2056 #ifdef CONFIG_UBIFS_FS_SECURITY
2057 extern int ubifs_init_security(struct inode *dentry, struct inode *inode,
2058 const struct qstr *qstr);
2059 #else
2060 static inline int ubifs_init_security(struct inode *dentry,
2061 struct inode *inode, const struct qstr *qstr)
2062 {
2063 return 0;
2064 }
2065 #endif
2066
2067
2068
2069 struct inode *ubifs_iget(struct super_block *sb, unsigned long inum);
2070
2071
2072 int ubifs_recover_master_node(struct ubifs_info *c);
2073 int ubifs_write_rcvrd_mst_node(struct ubifs_info *c);
2074 struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum,
2075 int offs, void *sbuf, int jhead);
2076 struct ubifs_scan_leb *ubifs_recover_log_leb(struct ubifs_info *c, int lnum,
2077 int offs, void *sbuf);
2078 int ubifs_recover_inl_heads(struct ubifs_info *c, void *sbuf);
2079 int ubifs_clean_lebs(struct ubifs_info *c, void *sbuf);
2080 int ubifs_rcvry_gc_commit(struct ubifs_info *c);
2081 int ubifs_recover_size_accum(struct ubifs_info *c, union ubifs_key *key,
2082 int deletion, loff_t new_size);
2083 int ubifs_recover_size(struct ubifs_info *c, bool in_place);
2084 void ubifs_destroy_size_tree(struct ubifs_info *c);
2085
2086
2087 int ubifs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
2088 int ubifs_fileattr_set(struct user_namespace *mnt_userns,
2089 struct dentry *dentry, struct fileattr *fa);
2090 long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
2091 void ubifs_set_inode_flags(struct inode *inode);
2092 #ifdef CONFIG_COMPAT
2093 long ubifs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
2094 #endif
2095
2096
2097 int __init ubifs_compressors_init(void);
2098 void ubifs_compressors_exit(void);
2099 void ubifs_compress(const struct ubifs_info *c, const void *in_buf, int in_len,
2100 void *out_buf, int *out_len, int *compr_type);
2101 int ubifs_decompress(const struct ubifs_info *c, const void *buf, int len,
2102 void *out, int *out_len, int compr_type);
2103
2104
2105 int ubifs_sysfs_init(void);
2106 void ubifs_sysfs_exit(void);
2107 int ubifs_sysfs_register(struct ubifs_info *c);
2108 void ubifs_sysfs_unregister(struct ubifs_info *c);
2109
2110 #include "debug.h"
2111 #include "misc.h"
2112 #include "key.h"
2113
2114 #ifndef CONFIG_FS_ENCRYPTION
2115 static inline int ubifs_encrypt(const struct inode *inode,
2116 struct ubifs_data_node *dn,
2117 unsigned int in_len, unsigned int *out_len,
2118 int block)
2119 {
2120 struct ubifs_info *c = inode->i_sb->s_fs_info;
2121 ubifs_assert(c, 0);
2122 return -EOPNOTSUPP;
2123 }
2124 static inline int ubifs_decrypt(const struct inode *inode,
2125 struct ubifs_data_node *dn,
2126 unsigned int *out_len, int block)
2127 {
2128 struct ubifs_info *c = inode->i_sb->s_fs_info;
2129 ubifs_assert(c, 0);
2130 return -EOPNOTSUPP;
2131 }
2132 #else
2133
2134 int ubifs_encrypt(const struct inode *inode, struct ubifs_data_node *dn,
2135 unsigned int in_len, unsigned int *out_len, int block);
2136 int ubifs_decrypt(const struct inode *inode, struct ubifs_data_node *dn,
2137 unsigned int *out_len, int block);
2138 #endif
2139
2140 extern const struct fscrypt_operations ubifs_crypt_operations;
2141
2142
2143 __printf(2, 3)
2144 void ubifs_msg(const struct ubifs_info *c, const char *fmt, ...);
2145 __printf(2, 3)
2146 void ubifs_err(const struct ubifs_info *c, const char *fmt, ...);
2147 __printf(2, 3)
2148 void ubifs_warn(const struct ubifs_info *c, const char *fmt, ...);
2149
2150
2151
2152
2153 #define ubifs_errc(c, fmt, ...) \
2154 do { \
2155 if (!(c)->probing) \
2156 ubifs_err(c, fmt, ##__VA_ARGS__); \
2157 } while (0)
2158
2159 #endif