linux/fs/ubifs/debug.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * This file is part of UBIFS.
   4 *
   5 * Copyright (C) 2006-2008 Nokia Corporation
   6 *
   7 * Authors: Artem Bityutskiy (Битюцкий Артём)
   8 *          Adrian Hunter
   9 */
  10
  11/*
  12 * This file implements most of the debugging stuff which is compiled in only
  13 * when it is enabled. But some debugging check functions are implemented in
  14 * corresponding subsystem, just because they are closely related and utilize
  15 * various local functions of those subsystems.
  16 */
  17
  18#include <linux/module.h>
  19#include <linux/debugfs.h>
  20#include <linux/math64.h>
  21#include <linux/uaccess.h>
  22#include <linux/random.h>
  23#include <linux/ctype.h>
  24#include "ubifs.h"
  25
  26static DEFINE_SPINLOCK(dbg_lock);
  27
  28static const char *get_key_fmt(int fmt)
  29{
  30        switch (fmt) {
  31        case UBIFS_SIMPLE_KEY_FMT:
  32                return "simple";
  33        default:
  34                return "unknown/invalid format";
  35        }
  36}
  37
  38static const char *get_key_hash(int hash)
  39{
  40        switch (hash) {
  41        case UBIFS_KEY_HASH_R5:
  42                return "R5";
  43        case UBIFS_KEY_HASH_TEST:
  44                return "test";
  45        default:
  46                return "unknown/invalid name hash";
  47        }
  48}
  49
  50static const char *get_key_type(int type)
  51{
  52        switch (type) {
  53        case UBIFS_INO_KEY:
  54                return "inode";
  55        case UBIFS_DENT_KEY:
  56                return "direntry";
  57        case UBIFS_XENT_KEY:
  58                return "xentry";
  59        case UBIFS_DATA_KEY:
  60                return "data";
  61        case UBIFS_TRUN_KEY:
  62                return "truncate";
  63        default:
  64                return "unknown/invalid key";
  65        }
  66}
  67
  68static const char *get_dent_type(int type)
  69{
  70        switch (type) {
  71        case UBIFS_ITYPE_REG:
  72                return "file";
  73        case UBIFS_ITYPE_DIR:
  74                return "dir";
  75        case UBIFS_ITYPE_LNK:
  76                return "symlink";
  77        case UBIFS_ITYPE_BLK:
  78                return "blkdev";
  79        case UBIFS_ITYPE_CHR:
  80                return "char dev";
  81        case UBIFS_ITYPE_FIFO:
  82                return "fifo";
  83        case UBIFS_ITYPE_SOCK:
  84                return "socket";
  85        default:
  86                return "unknown/invalid type";
  87        }
  88}
  89
  90const char *dbg_snprintf_key(const struct ubifs_info *c,
  91                             const union ubifs_key *key, char *buffer, int len)
  92{
  93        char *p = buffer;
  94        int type = key_type(c, key);
  95
  96        if (c->key_fmt == UBIFS_SIMPLE_KEY_FMT) {
  97                switch (type) {
  98                case UBIFS_INO_KEY:
  99                        len -= snprintf(p, len, "(%lu, %s)",
 100                                        (unsigned long)key_inum(c, key),
 101                                        get_key_type(type));
 102                        break;
 103                case UBIFS_DENT_KEY:
 104                case UBIFS_XENT_KEY:
 105                        len -= snprintf(p, len, "(%lu, %s, %#08x)",
 106                                        (unsigned long)key_inum(c, key),
 107                                        get_key_type(type), key_hash(c, key));
 108                        break;
 109                case UBIFS_DATA_KEY:
 110                        len -= snprintf(p, len, "(%lu, %s, %u)",
 111                                        (unsigned long)key_inum(c, key),
 112                                        get_key_type(type), key_block(c, key));
 113                        break;
 114                case UBIFS_TRUN_KEY:
 115                        len -= snprintf(p, len, "(%lu, %s)",
 116                                        (unsigned long)key_inum(c, key),
 117                                        get_key_type(type));
 118                        break;
 119                default:
 120                        len -= snprintf(p, len, "(bad key type: %#08x, %#08x)",
 121                                        key->u32[0], key->u32[1]);
 122                }
 123        } else
 124                len -= snprintf(p, len, "bad key format %d", c->key_fmt);
 125        ubifs_assert(c, len > 0);
 126        return p;
 127}
 128
 129const char *dbg_ntype(int type)
 130{
 131        switch (type) {
 132        case UBIFS_PAD_NODE:
 133                return "padding node";
 134        case UBIFS_SB_NODE:
 135                return "superblock node";
 136        case UBIFS_MST_NODE:
 137                return "master node";
 138        case UBIFS_REF_NODE:
 139                return "reference node";
 140        case UBIFS_INO_NODE:
 141                return "inode node";
 142        case UBIFS_DENT_NODE:
 143                return "direntry node";
 144        case UBIFS_XENT_NODE:
 145                return "xentry node";
 146        case UBIFS_DATA_NODE:
 147                return "data node";
 148        case UBIFS_TRUN_NODE:
 149                return "truncate node";
 150        case UBIFS_IDX_NODE:
 151                return "indexing node";
 152        case UBIFS_CS_NODE:
 153                return "commit start node";
 154        case UBIFS_ORPH_NODE:
 155                return "orphan node";
 156        case UBIFS_AUTH_NODE:
 157                return "auth node";
 158        default:
 159                return "unknown node";
 160        }
 161}
 162
 163static const char *dbg_gtype(int type)
 164{
 165        switch (type) {
 166        case UBIFS_NO_NODE_GROUP:
 167                return "no node group";
 168        case UBIFS_IN_NODE_GROUP:
 169                return "in node group";
 170        case UBIFS_LAST_OF_NODE_GROUP:
 171                return "last of node group";
 172        default:
 173                return "unknown";
 174        }
 175}
 176
 177const char *dbg_cstate(int cmt_state)
 178{
 179        switch (cmt_state) {
 180        case COMMIT_RESTING:
 181                return "commit resting";
 182        case COMMIT_BACKGROUND:
 183                return "background commit requested";
 184        case COMMIT_REQUIRED:
 185                return "commit required";
 186        case COMMIT_RUNNING_BACKGROUND:
 187                return "BACKGROUND commit running";
 188        case COMMIT_RUNNING_REQUIRED:
 189                return "commit running and required";
 190        case COMMIT_BROKEN:
 191                return "broken commit";
 192        default:
 193                return "unknown commit state";
 194        }
 195}
 196
 197const char *dbg_jhead(int jhead)
 198{
 199        switch (jhead) {
 200        case GCHD:
 201                return "0 (GC)";
 202        case BASEHD:
 203                return "1 (base)";
 204        case DATAHD:
 205                return "2 (data)";
 206        default:
 207                return "unknown journal head";
 208        }
 209}
 210
 211static void dump_ch(const struct ubifs_ch *ch)
 212{
 213        pr_err("\tmagic          %#x\n", le32_to_cpu(ch->magic));
 214        pr_err("\tcrc            %#x\n", le32_to_cpu(ch->crc));
 215        pr_err("\tnode_type      %d (%s)\n", ch->node_type,
 216               dbg_ntype(ch->node_type));
 217        pr_err("\tgroup_type     %d (%s)\n", ch->group_type,
 218               dbg_gtype(ch->group_type));
 219        pr_err("\tsqnum          %llu\n",
 220               (unsigned long long)le64_to_cpu(ch->sqnum));
 221        pr_err("\tlen            %u\n", le32_to_cpu(ch->len));
 222}
 223
 224void ubifs_dump_inode(struct ubifs_info *c, const struct inode *inode)
 225{
 226        const struct ubifs_inode *ui = ubifs_inode(inode);
 227        struct fscrypt_name nm = {0};
 228        union ubifs_key key;
 229        struct ubifs_dent_node *dent, *pdent = NULL;
 230        int count = 2;
 231
 232        pr_err("Dump in-memory inode:");
 233        pr_err("\tinode          %lu\n", inode->i_ino);
 234        pr_err("\tsize           %llu\n",
 235               (unsigned long long)i_size_read(inode));
 236        pr_err("\tnlink          %u\n", inode->i_nlink);
 237        pr_err("\tuid            %u\n", (unsigned int)i_uid_read(inode));
 238        pr_err("\tgid            %u\n", (unsigned int)i_gid_read(inode));
 239        pr_err("\tatime          %u.%u\n",
 240               (unsigned int)inode->i_atime.tv_sec,
 241               (unsigned int)inode->i_atime.tv_nsec);
 242        pr_err("\tmtime          %u.%u\n",
 243               (unsigned int)inode->i_mtime.tv_sec,
 244               (unsigned int)inode->i_mtime.tv_nsec);
 245        pr_err("\tctime          %u.%u\n",
 246               (unsigned int)inode->i_ctime.tv_sec,
 247               (unsigned int)inode->i_ctime.tv_nsec);
 248        pr_err("\tcreat_sqnum    %llu\n", ui->creat_sqnum);
 249        pr_err("\txattr_size     %u\n", ui->xattr_size);
 250        pr_err("\txattr_cnt      %u\n", ui->xattr_cnt);
 251        pr_err("\txattr_names    %u\n", ui->xattr_names);
 252        pr_err("\tdirty          %u\n", ui->dirty);
 253        pr_err("\txattr          %u\n", ui->xattr);
 254        pr_err("\tbulk_read      %u\n", ui->bulk_read);
 255        pr_err("\tsynced_i_size  %llu\n",
 256               (unsigned long long)ui->synced_i_size);
 257        pr_err("\tui_size        %llu\n",
 258               (unsigned long long)ui->ui_size);
 259        pr_err("\tflags          %d\n", ui->flags);
 260        pr_err("\tcompr_type     %d\n", ui->compr_type);
 261        pr_err("\tlast_page_read %lu\n", ui->last_page_read);
 262        pr_err("\tread_in_a_row  %lu\n", ui->read_in_a_row);
 263        pr_err("\tdata_len       %d\n", ui->data_len);
 264
 265        if (!S_ISDIR(inode->i_mode))
 266                return;
 267
 268        pr_err("List of directory entries:\n");
 269        ubifs_assert(c, !mutex_is_locked(&c->tnc_mutex));
 270
 271        lowest_dent_key(c, &key, inode->i_ino);
 272        while (1) {
 273                dent = ubifs_tnc_next_ent(c, &key, &nm);
 274                if (IS_ERR(dent)) {
 275                        if (PTR_ERR(dent) != -ENOENT)
 276                                pr_err("error %ld\n", PTR_ERR(dent));
 277                        break;
 278                }
 279
 280                pr_err("\t%d: inode %llu, type %s, len %d\n",
 281                       count++, (unsigned long long) le64_to_cpu(dent->inum),
 282                       get_dent_type(dent->type),
 283                       le16_to_cpu(dent->nlen));
 284
 285                fname_name(&nm) = dent->name;
 286                fname_len(&nm) = le16_to_cpu(dent->nlen);
 287                kfree(pdent);
 288                pdent = dent;
 289                key_read(c, &dent->key, &key);
 290        }
 291        kfree(pdent);
 292}
 293
 294void ubifs_dump_node(const struct ubifs_info *c, const void *node)
 295{
 296        int i, n;
 297        union ubifs_key key;
 298        const struct ubifs_ch *ch = node;
 299        char key_buf[DBG_KEY_BUF_LEN];
 300
 301        /* If the magic is incorrect, just hexdump the first bytes */
 302        if (le32_to_cpu(ch->magic) != UBIFS_NODE_MAGIC) {
 303                pr_err("Not a node, first %zu bytes:", UBIFS_CH_SZ);
 304                print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 32, 1,
 305                               (void *)node, UBIFS_CH_SZ, 1);
 306                return;
 307        }
 308
 309        spin_lock(&dbg_lock);
 310        dump_ch(node);
 311
 312        switch (ch->node_type) {
 313        case UBIFS_PAD_NODE:
 314        {
 315                const struct ubifs_pad_node *pad = node;
 316
 317                pr_err("\tpad_len        %u\n", le32_to_cpu(pad->pad_len));
 318                break;
 319        }
 320        case UBIFS_SB_NODE:
 321        {
 322                const struct ubifs_sb_node *sup = node;
 323                unsigned int sup_flags = le32_to_cpu(sup->flags);
 324
 325                pr_err("\tkey_hash       %d (%s)\n",
 326                       (int)sup->key_hash, get_key_hash(sup->key_hash));
 327                pr_err("\tkey_fmt        %d (%s)\n",
 328                       (int)sup->key_fmt, get_key_fmt(sup->key_fmt));
 329                pr_err("\tflags          %#x\n", sup_flags);
 330                pr_err("\tbig_lpt        %u\n",
 331                       !!(sup_flags & UBIFS_FLG_BIGLPT));
 332                pr_err("\tspace_fixup    %u\n",
 333                       !!(sup_flags & UBIFS_FLG_SPACE_FIXUP));
 334                pr_err("\tmin_io_size    %u\n", le32_to_cpu(sup->min_io_size));
 335                pr_err("\tleb_size       %u\n", le32_to_cpu(sup->leb_size));
 336                pr_err("\tleb_cnt        %u\n", le32_to_cpu(sup->leb_cnt));
 337                pr_err("\tmax_leb_cnt    %u\n", le32_to_cpu(sup->max_leb_cnt));
 338                pr_err("\tmax_bud_bytes  %llu\n",
 339                       (unsigned long long)le64_to_cpu(sup->max_bud_bytes));
 340                pr_err("\tlog_lebs       %u\n", le32_to_cpu(sup->log_lebs));
 341                pr_err("\tlpt_lebs       %u\n", le32_to_cpu(sup->lpt_lebs));
 342                pr_err("\torph_lebs      %u\n", le32_to_cpu(sup->orph_lebs));
 343                pr_err("\tjhead_cnt      %u\n", le32_to_cpu(sup->jhead_cnt));
 344                pr_err("\tfanout         %u\n", le32_to_cpu(sup->fanout));
 345                pr_err("\tlsave_cnt      %u\n", le32_to_cpu(sup->lsave_cnt));
 346                pr_err("\tdefault_compr  %u\n",
 347                       (int)le16_to_cpu(sup->default_compr));
 348                pr_err("\trp_size        %llu\n",
 349                       (unsigned long long)le64_to_cpu(sup->rp_size));
 350                pr_err("\trp_uid         %u\n", le32_to_cpu(sup->rp_uid));
 351                pr_err("\trp_gid         %u\n", le32_to_cpu(sup->rp_gid));
 352                pr_err("\tfmt_version    %u\n", le32_to_cpu(sup->fmt_version));
 353                pr_err("\ttime_gran      %u\n", le32_to_cpu(sup->time_gran));
 354                pr_err("\tUUID           %pUB\n", sup->uuid);
 355                break;
 356        }
 357        case UBIFS_MST_NODE:
 358        {
 359                const struct ubifs_mst_node *mst = node;
 360
 361                pr_err("\thighest_inum   %llu\n",
 362                       (unsigned long long)le64_to_cpu(mst->highest_inum));
 363                pr_err("\tcommit number  %llu\n",
 364                       (unsigned long long)le64_to_cpu(mst->cmt_no));
 365                pr_err("\tflags          %#x\n", le32_to_cpu(mst->flags));
 366                pr_err("\tlog_lnum       %u\n", le32_to_cpu(mst->log_lnum));
 367                pr_err("\troot_lnum      %u\n", le32_to_cpu(mst->root_lnum));
 368                pr_err("\troot_offs      %u\n", le32_to_cpu(mst->root_offs));
 369                pr_err("\troot_len       %u\n", le32_to_cpu(mst->root_len));
 370                pr_err("\tgc_lnum        %u\n", le32_to_cpu(mst->gc_lnum));
 371                pr_err("\tihead_lnum     %u\n", le32_to_cpu(mst->ihead_lnum));
 372                pr_err("\tihead_offs     %u\n", le32_to_cpu(mst->ihead_offs));
 373                pr_err("\tindex_size     %llu\n",
 374                       (unsigned long long)le64_to_cpu(mst->index_size));
 375                pr_err("\tlpt_lnum       %u\n", le32_to_cpu(mst->lpt_lnum));
 376                pr_err("\tlpt_offs       %u\n", le32_to_cpu(mst->lpt_offs));
 377                pr_err("\tnhead_lnum     %u\n", le32_to_cpu(mst->nhead_lnum));
 378                pr_err("\tnhead_offs     %u\n", le32_to_cpu(mst->nhead_offs));
 379                pr_err("\tltab_lnum      %u\n", le32_to_cpu(mst->ltab_lnum));
 380                pr_err("\tltab_offs      %u\n", le32_to_cpu(mst->ltab_offs));
 381                pr_err("\tlsave_lnum     %u\n", le32_to_cpu(mst->lsave_lnum));
 382                pr_err("\tlsave_offs     %u\n", le32_to_cpu(mst->lsave_offs));
 383                pr_err("\tlscan_lnum     %u\n", le32_to_cpu(mst->lscan_lnum));
 384                pr_err("\tleb_cnt        %u\n", le32_to_cpu(mst->leb_cnt));
 385                pr_err("\tempty_lebs     %u\n", le32_to_cpu(mst->empty_lebs));
 386                pr_err("\tidx_lebs       %u\n", le32_to_cpu(mst->idx_lebs));
 387                pr_err("\ttotal_free     %llu\n",
 388                       (unsigned long long)le64_to_cpu(mst->total_free));
 389                pr_err("\ttotal_dirty    %llu\n",
 390                       (unsigned long long)le64_to_cpu(mst->total_dirty));
 391                pr_err("\ttotal_used     %llu\n",
 392                       (unsigned long long)le64_to_cpu(mst->total_used));
 393                pr_err("\ttotal_dead     %llu\n",
 394                       (unsigned long long)le64_to_cpu(mst->total_dead));
 395                pr_err("\ttotal_dark     %llu\n",
 396                       (unsigned long long)le64_to_cpu(mst->total_dark));
 397                break;
 398        }
 399        case UBIFS_REF_NODE:
 400        {
 401                const struct ubifs_ref_node *ref = node;
 402
 403                pr_err("\tlnum           %u\n", le32_to_cpu(ref->lnum));
 404                pr_err("\toffs           %u\n", le32_to_cpu(ref->offs));
 405                pr_err("\tjhead          %u\n", le32_to_cpu(ref->jhead));
 406                break;
 407        }
 408        case UBIFS_INO_NODE:
 409        {
 410                const struct ubifs_ino_node *ino = node;
 411
 412                key_read(c, &ino->key, &key);
 413                pr_err("\tkey            %s\n",
 414                       dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN));
 415                pr_err("\tcreat_sqnum    %llu\n",
 416                       (unsigned long long)le64_to_cpu(ino->creat_sqnum));
 417                pr_err("\tsize           %llu\n",
 418                       (unsigned long long)le64_to_cpu(ino->size));
 419                pr_err("\tnlink          %u\n", le32_to_cpu(ino->nlink));
 420                pr_err("\tatime          %lld.%u\n",
 421                       (long long)le64_to_cpu(ino->atime_sec),
 422                       le32_to_cpu(ino->atime_nsec));
 423                pr_err("\tmtime          %lld.%u\n",
 424                       (long long)le64_to_cpu(ino->mtime_sec),
 425                       le32_to_cpu(ino->mtime_nsec));
 426                pr_err("\tctime          %lld.%u\n",
 427                       (long long)le64_to_cpu(ino->ctime_sec),
 428                       le32_to_cpu(ino->ctime_nsec));
 429                pr_err("\tuid            %u\n", le32_to_cpu(ino->uid));
 430                pr_err("\tgid            %u\n", le32_to_cpu(ino->gid));
 431                pr_err("\tmode           %u\n", le32_to_cpu(ino->mode));
 432                pr_err("\tflags          %#x\n", le32_to_cpu(ino->flags));
 433                pr_err("\txattr_cnt      %u\n", le32_to_cpu(ino->xattr_cnt));
 434                pr_err("\txattr_size     %u\n", le32_to_cpu(ino->xattr_size));
 435                pr_err("\txattr_names    %u\n", le32_to_cpu(ino->xattr_names));
 436                pr_err("\tcompr_type     %#x\n",
 437                       (int)le16_to_cpu(ino->compr_type));
 438                pr_err("\tdata len       %u\n", le32_to_cpu(ino->data_len));
 439                break;
 440        }
 441        case UBIFS_DENT_NODE:
 442        case UBIFS_XENT_NODE:
 443        {
 444                const struct ubifs_dent_node *dent = node;
 445                int nlen = le16_to_cpu(dent->nlen);
 446
 447                key_read(c, &dent->key, &key);
 448                pr_err("\tkey            %s\n",
 449                       dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN));
 450                pr_err("\tinum           %llu\n",
 451                       (unsigned long long)le64_to_cpu(dent->inum));
 452                pr_err("\ttype           %d\n", (int)dent->type);
 453                pr_err("\tnlen           %d\n", nlen);
 454                pr_err("\tname           ");
 455
 456                if (nlen > UBIFS_MAX_NLEN)
 457                        pr_err("(bad name length, not printing, bad or corrupted node)");
 458                else {
 459                        for (i = 0; i < nlen && dent->name[i]; i++)
 460                                pr_cont("%c", isprint(dent->name[i]) ?
 461                                        dent->name[i] : '?');
 462                }
 463                pr_cont("\n");
 464
 465                break;
 466        }
 467        case UBIFS_DATA_NODE:
 468        {
 469                const struct ubifs_data_node *dn = node;
 470                int dlen = le32_to_cpu(ch->len) - UBIFS_DATA_NODE_SZ;
 471
 472                key_read(c, &dn->key, &key);
 473                pr_err("\tkey            %s\n",
 474                       dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN));
 475                pr_err("\tsize           %u\n", le32_to_cpu(dn->size));
 476                pr_err("\tcompr_typ      %d\n",
 477                       (int)le16_to_cpu(dn->compr_type));
 478                pr_err("\tdata size      %d\n", dlen);
 479                pr_err("\tdata:\n");
 480                print_hex_dump(KERN_ERR, "\t", DUMP_PREFIX_OFFSET, 32, 1,
 481                               (void *)&dn->data, dlen, 0);
 482                break;
 483        }
 484        case UBIFS_TRUN_NODE:
 485        {
 486                const struct ubifs_trun_node *trun = node;
 487
 488                pr_err("\tinum           %u\n", le32_to_cpu(trun->inum));
 489                pr_err("\told_size       %llu\n",
 490                       (unsigned long long)le64_to_cpu(trun->old_size));
 491                pr_err("\tnew_size       %llu\n",
 492                       (unsigned long long)le64_to_cpu(trun->new_size));
 493                break;
 494        }
 495        case UBIFS_IDX_NODE:
 496        {
 497                const struct ubifs_idx_node *idx = node;
 498
 499                n = le16_to_cpu(idx->child_cnt);
 500                pr_err("\tchild_cnt      %d\n", n);
 501                pr_err("\tlevel          %d\n", (int)le16_to_cpu(idx->level));
 502                pr_err("\tBranches:\n");
 503
 504                for (i = 0; i < n && i < c->fanout - 1; i++) {
 505                        const struct ubifs_branch *br;
 506
 507                        br = ubifs_idx_branch(c, idx, i);
 508                        key_read(c, &br->key, &key);
 509                        pr_err("\t%d: LEB %d:%d len %d key %s\n",
 510                               i, le32_to_cpu(br->lnum), le32_to_cpu(br->offs),
 511                               le32_to_cpu(br->len),
 512                               dbg_snprintf_key(c, &key, key_buf,
 513                                                DBG_KEY_BUF_LEN));
 514                }
 515                break;
 516        }
 517        case UBIFS_CS_NODE:
 518                break;
 519        case UBIFS_ORPH_NODE:
 520        {
 521                const struct ubifs_orph_node *orph = node;
 522
 523                pr_err("\tcommit number  %llu\n",
 524                       (unsigned long long)
 525                                le64_to_cpu(orph->cmt_no) & LLONG_MAX);
 526                pr_err("\tlast node flag %llu\n",
 527                       (unsigned long long)(le64_to_cpu(orph->cmt_no)) >> 63);
 528                n = (le32_to_cpu(ch->len) - UBIFS_ORPH_NODE_SZ) >> 3;
 529                pr_err("\t%d orphan inode numbers:\n", n);
 530                for (i = 0; i < n; i++)
 531                        pr_err("\t  ino %llu\n",
 532                               (unsigned long long)le64_to_cpu(orph->inos[i]));
 533                break;
 534        }
 535        case UBIFS_AUTH_NODE:
 536        {
 537                break;
 538        }
 539        default:
 540                pr_err("node type %d was not recognized\n",
 541                       (int)ch->node_type);
 542        }
 543        spin_unlock(&dbg_lock);
 544}
 545
 546void ubifs_dump_budget_req(const struct ubifs_budget_req *req)
 547{
 548        spin_lock(&dbg_lock);
 549        pr_err("Budgeting request: new_ino %d, dirtied_ino %d\n",
 550               req->new_ino, req->dirtied_ino);
 551        pr_err("\tnew_ino_d   %d, dirtied_ino_d %d\n",
 552               req->new_ino_d, req->dirtied_ino_d);
 553        pr_err("\tnew_page    %d, dirtied_page %d\n",
 554               req->new_page, req->dirtied_page);
 555        pr_err("\tnew_dent    %d, mod_dent     %d\n",
 556               req->new_dent, req->mod_dent);
 557        pr_err("\tidx_growth  %d\n", req->idx_growth);
 558        pr_err("\tdata_growth %d dd_growth     %d\n",
 559               req->data_growth, req->dd_growth);
 560        spin_unlock(&dbg_lock);
 561}
 562
 563void ubifs_dump_lstats(const struct ubifs_lp_stats *lst)
 564{
 565        spin_lock(&dbg_lock);
 566        pr_err("(pid %d) Lprops statistics: empty_lebs %d, idx_lebs  %d\n",
 567               current->pid, lst->empty_lebs, lst->idx_lebs);
 568        pr_err("\ttaken_empty_lebs %d, total_free %lld, total_dirty %lld\n",
 569               lst->taken_empty_lebs, lst->total_free, lst->total_dirty);
 570        pr_err("\ttotal_used %lld, total_dark %lld, total_dead %lld\n",
 571               lst->total_used, lst->total_dark, lst->total_dead);
 572        spin_unlock(&dbg_lock);
 573}
 574
 575void ubifs_dump_budg(struct ubifs_info *c, const struct ubifs_budg_info *bi)
 576{
 577        int i;
 578        struct rb_node *rb;
 579        struct ubifs_bud *bud;
 580        struct ubifs_gced_idx_leb *idx_gc;
 581        long long available, outstanding, free;
 582
 583        spin_lock(&c->space_lock);
 584        spin_lock(&dbg_lock);
 585        pr_err("(pid %d) Budgeting info: data budget sum %lld, total budget sum %lld\n",
 586               current->pid, bi->data_growth + bi->dd_growth,
 587               bi->data_growth + bi->dd_growth + bi->idx_growth);
 588        pr_err("\tbudg_data_growth %lld, budg_dd_growth %lld, budg_idx_growth %lld\n",
 589               bi->data_growth, bi->dd_growth, bi->idx_growth);
 590        pr_err("\tmin_idx_lebs %d, old_idx_sz %llu, uncommitted_idx %lld\n",
 591               bi->min_idx_lebs, bi->old_idx_sz, bi->uncommitted_idx);
 592        pr_err("\tpage_budget %d, inode_budget %d, dent_budget %d\n",
 593               bi->page_budget, bi->inode_budget, bi->dent_budget);
 594        pr_err("\tnospace %u, nospace_rp %u\n", bi->nospace, bi->nospace_rp);
 595        pr_err("\tdark_wm %d, dead_wm %d, max_idx_node_sz %d\n",
 596               c->dark_wm, c->dead_wm, c->max_idx_node_sz);
 597
 598        if (bi != &c->bi)
 599                /*
 600                 * If we are dumping saved budgeting data, do not print
 601                 * additional information which is about the current state, not
 602                 * the old one which corresponded to the saved budgeting data.
 603                 */
 604                goto out_unlock;
 605
 606        pr_err("\tfreeable_cnt %d, calc_idx_sz %lld, idx_gc_cnt %d\n",
 607               c->freeable_cnt, c->calc_idx_sz, c->idx_gc_cnt);
 608        pr_err("\tdirty_pg_cnt %ld, dirty_zn_cnt %ld, clean_zn_cnt %ld\n",
 609               atomic_long_read(&c->dirty_pg_cnt),
 610               atomic_long_read(&c->dirty_zn_cnt),
 611               atomic_long_read(&c->clean_zn_cnt));
 612        pr_err("\tgc_lnum %d, ihead_lnum %d\n", c->gc_lnum, c->ihead_lnum);
 613
 614        /* If we are in R/O mode, journal heads do not exist */
 615        if (c->jheads)
 616                for (i = 0; i < c->jhead_cnt; i++)
 617                        pr_err("\tjhead %s\t LEB %d\n",
 618                               dbg_jhead(c->jheads[i].wbuf.jhead),
 619                               c->jheads[i].wbuf.lnum);
 620        for (rb = rb_first(&c->buds); rb; rb = rb_next(rb)) {
 621                bud = rb_entry(rb, struct ubifs_bud, rb);
 622                pr_err("\tbud LEB %d\n", bud->lnum);
 623        }
 624        list_for_each_entry(bud, &c->old_buds, list)
 625                pr_err("\told bud LEB %d\n", bud->lnum);
 626        list_for_each_entry(idx_gc, &c->idx_gc, list)
 627                pr_err("\tGC'ed idx LEB %d unmap %d\n",
 628                       idx_gc->lnum, idx_gc->unmap);
 629        pr_err("\tcommit state %d\n", c->cmt_state);
 630
 631        /* Print budgeting predictions */
 632        available = ubifs_calc_available(c, c->bi.min_idx_lebs);
 633        outstanding = c->bi.data_growth + c->bi.dd_growth;
 634        free = ubifs_get_free_space_nolock(c);
 635        pr_err("Budgeting predictions:\n");
 636        pr_err("\tavailable: %lld, outstanding %lld, free %lld\n",
 637               available, outstanding, free);
 638out_unlock:
 639        spin_unlock(&dbg_lock);
 640        spin_unlock(&c->space_lock);
 641}
 642
 643void ubifs_dump_lprop(const struct ubifs_info *c, const struct ubifs_lprops *lp)
 644{
 645        int i, spc, dark = 0, dead = 0;
 646        struct rb_node *rb;
 647        struct ubifs_bud *bud;
 648
 649        spc = lp->free + lp->dirty;
 650        if (spc < c->dead_wm)
 651                dead = spc;
 652        else
 653                dark = ubifs_calc_dark(c, spc);
 654
 655        if (lp->flags & LPROPS_INDEX)
 656                pr_err("LEB %-7d free %-8d dirty %-8d used %-8d free + dirty %-8d flags %#x (",
 657                       lp->lnum, lp->free, lp->dirty, c->leb_size - spc, spc,
 658                       lp->flags);
 659        else
 660                pr_err("LEB %-7d free %-8d dirty %-8d used %-8d free + dirty %-8d dark %-4d dead %-4d nodes fit %-3d flags %#-4x (",
 661                       lp->lnum, lp->free, lp->dirty, c->leb_size - spc, spc,
 662                       dark, dead, (int)(spc / UBIFS_MAX_NODE_SZ), lp->flags);
 663
 664        if (lp->flags & LPROPS_TAKEN) {
 665                if (lp->flags & LPROPS_INDEX)
 666                        pr_cont("index, taken");
 667                else
 668                        pr_cont("taken");
 669        } else {
 670                const char *s;
 671
 672                if (lp->flags & LPROPS_INDEX) {
 673                        switch (lp->flags & LPROPS_CAT_MASK) {
 674                        case LPROPS_DIRTY_IDX:
 675                                s = "dirty index";
 676                                break;
 677                        case LPROPS_FRDI_IDX:
 678                                s = "freeable index";
 679                                break;
 680                        default:
 681                                s = "index";
 682                        }
 683                } else {
 684                        switch (lp->flags & LPROPS_CAT_MASK) {
 685                        case LPROPS_UNCAT:
 686                                s = "not categorized";
 687                                break;
 688                        case LPROPS_DIRTY:
 689                                s = "dirty";
 690                                break;
 691                        case LPROPS_FREE:
 692                                s = "free";
 693                                break;
 694                        case LPROPS_EMPTY:
 695                                s = "empty";
 696                                break;
 697                        case LPROPS_FREEABLE:
 698                                s = "freeable";
 699                                break;
 700                        default:
 701                                s = NULL;
 702                                break;
 703                        }
 704                }
 705                pr_cont("%s", s);
 706        }
 707
 708        for (rb = rb_first((struct rb_root *)&c->buds); rb; rb = rb_next(rb)) {
 709                bud = rb_entry(rb, struct ubifs_bud, rb);
 710                if (bud->lnum == lp->lnum) {
 711                        int head = 0;
 712                        for (i = 0; i < c->jhead_cnt; i++) {
 713                                /*
 714                                 * Note, if we are in R/O mode or in the middle
 715                                 * of mounting/re-mounting, the write-buffers do
 716                                 * not exist.
 717                                 */
 718                                if (c->jheads &&
 719                                    lp->lnum == c->jheads[i].wbuf.lnum) {
 720                                        pr_cont(", jhead %s", dbg_jhead(i));
 721                                        head = 1;
 722                                }
 723                        }
 724                        if (!head)
 725                                pr_cont(", bud of jhead %s",
 726                                       dbg_jhead(bud->jhead));
 727                }
 728        }
 729        if (lp->lnum == c->gc_lnum)
 730                pr_cont(", GC LEB");
 731        pr_cont(")\n");
 732}
 733
 734void ubifs_dump_lprops(struct ubifs_info *c)
 735{
 736        int lnum, err;
 737        struct ubifs_lprops lp;
 738        struct ubifs_lp_stats lst;
 739
 740        pr_err("(pid %d) start dumping LEB properties\n", current->pid);
 741        ubifs_get_lp_stats(c, &lst);
 742        ubifs_dump_lstats(&lst);
 743
 744        for (lnum = c->main_first; lnum < c->leb_cnt; lnum++) {
 745                err = ubifs_read_one_lp(c, lnum, &lp);
 746                if (err) {
 747                        ubifs_err(c, "cannot read lprops for LEB %d", lnum);
 748                        continue;
 749                }
 750
 751                ubifs_dump_lprop(c, &lp);
 752        }
 753        pr_err("(pid %d) finish dumping LEB properties\n", current->pid);
 754}
 755
 756void ubifs_dump_lpt_info(struct ubifs_info *c)
 757{
 758        int i;
 759
 760        spin_lock(&dbg_lock);
 761        pr_err("(pid %d) dumping LPT information\n", current->pid);
 762        pr_err("\tlpt_sz:        %lld\n", c->lpt_sz);
 763        pr_err("\tpnode_sz:      %d\n", c->pnode_sz);
 764        pr_err("\tnnode_sz:      %d\n", c->nnode_sz);
 765        pr_err("\tltab_sz:       %d\n", c->ltab_sz);
 766        pr_err("\tlsave_sz:      %d\n", c->lsave_sz);
 767        pr_err("\tbig_lpt:       %d\n", c->big_lpt);
 768        pr_err("\tlpt_hght:      %d\n", c->lpt_hght);
 769        pr_err("\tpnode_cnt:     %d\n", c->pnode_cnt);
 770        pr_err("\tnnode_cnt:     %d\n", c->nnode_cnt);
 771        pr_err("\tdirty_pn_cnt:  %d\n", c->dirty_pn_cnt);
 772        pr_err("\tdirty_nn_cnt:  %d\n", c->dirty_nn_cnt);
 773        pr_err("\tlsave_cnt:     %d\n", c->lsave_cnt);
 774        pr_err("\tspace_bits:    %d\n", c->space_bits);
 775        pr_err("\tlpt_lnum_bits: %d\n", c->lpt_lnum_bits);
 776        pr_err("\tlpt_offs_bits: %d\n", c->lpt_offs_bits);
 777        pr_err("\tlpt_spc_bits:  %d\n", c->lpt_spc_bits);
 778        pr_err("\tpcnt_bits:     %d\n", c->pcnt_bits);
 779        pr_err("\tlnum_bits:     %d\n", c->lnum_bits);
 780        pr_err("\tLPT root is at %d:%d\n", c->lpt_lnum, c->lpt_offs);
 781        pr_err("\tLPT head is at %d:%d\n",
 782               c->nhead_lnum, c->nhead_offs);
 783        pr_err("\tLPT ltab is at %d:%d\n", c->ltab_lnum, c->ltab_offs);
 784        if (c->big_lpt)
 785                pr_err("\tLPT lsave is at %d:%d\n",
 786                       c->lsave_lnum, c->lsave_offs);
 787        for (i = 0; i < c->lpt_lebs; i++)
 788                pr_err("\tLPT LEB %d free %d dirty %d tgc %d cmt %d\n",
 789                       i + c->lpt_first, c->ltab[i].free, c->ltab[i].dirty,
 790                       c->ltab[i].tgc, c->ltab[i].cmt);
 791        spin_unlock(&dbg_lock);
 792}
 793
 794void ubifs_dump_sleb(const struct ubifs_info *c,
 795                     const struct ubifs_scan_leb *sleb, int offs)
 796{
 797        struct ubifs_scan_node *snod;
 798
 799        pr_err("(pid %d) start dumping scanned data from LEB %d:%d\n",
 800               current->pid, sleb->lnum, offs);
 801
 802        list_for_each_entry(snod, &sleb->nodes, list) {
 803                cond_resched();
 804                pr_err("Dumping node at LEB %d:%d len %d\n",
 805                       sleb->lnum, snod->offs, snod->len);
 806                ubifs_dump_node(c, snod->node);
 807        }
 808}
 809
 810void ubifs_dump_leb(const struct ubifs_info *c, int lnum)
 811{
 812        struct ubifs_scan_leb *sleb;
 813        struct ubifs_scan_node *snod;
 814        void *buf;
 815
 816        pr_err("(pid %d) start dumping LEB %d\n", current->pid, lnum);
 817
 818        buf = __vmalloc(c->leb_size, GFP_NOFS, PAGE_KERNEL);
 819        if (!buf) {
 820                ubifs_err(c, "cannot allocate memory for dumping LEB %d", lnum);
 821                return;
 822        }
 823
 824        sleb = ubifs_scan(c, lnum, 0, buf, 0);
 825        if (IS_ERR(sleb)) {
 826                ubifs_err(c, "scan error %d", (int)PTR_ERR(sleb));
 827                goto out;
 828        }
 829
 830        pr_err("LEB %d has %d nodes ending at %d\n", lnum,
 831               sleb->nodes_cnt, sleb->endpt);
 832
 833        list_for_each_entry(snod, &sleb->nodes, list) {
 834                cond_resched();
 835                pr_err("Dumping node at LEB %d:%d len %d\n", lnum,
 836                       snod->offs, snod->len);
 837                ubifs_dump_node(c, snod->node);
 838        }
 839
 840        pr_err("(pid %d) finish dumping LEB %d\n", current->pid, lnum);
 841        ubifs_scan_destroy(sleb);
 842
 843out:
 844        vfree(buf);
 845        return;
 846}
 847
 848void ubifs_dump_znode(const struct ubifs_info *c,
 849                      const struct ubifs_znode *znode)
 850{
 851        int n;
 852        const struct ubifs_zbranch *zbr;
 853        char key_buf[DBG_KEY_BUF_LEN];
 854
 855        spin_lock(&dbg_lock);
 856        if (znode->parent)
 857                zbr = &znode->parent->zbranch[znode->iip];
 858        else
 859                zbr = &c->zroot;
 860
 861        pr_err("znode %p, LEB %d:%d len %d parent %p iip %d level %d child_cnt %d flags %lx\n",
 862               znode, zbr->lnum, zbr->offs, zbr->len, znode->parent, znode->iip,
 863               znode->level, znode->child_cnt, znode->flags);
 864
 865        if (znode->child_cnt <= 0 || znode->child_cnt > c->fanout) {
 866                spin_unlock(&dbg_lock);
 867                return;
 868        }
 869
 870        pr_err("zbranches:\n");
 871        for (n = 0; n < znode->child_cnt; n++) {
 872                zbr = &znode->zbranch[n];
 873                if (znode->level > 0)
 874                        pr_err("\t%d: znode %p LEB %d:%d len %d key %s\n",
 875                               n, zbr->znode, zbr->lnum, zbr->offs, zbr->len,
 876                               dbg_snprintf_key(c, &zbr->key, key_buf,
 877                                                DBG_KEY_BUF_LEN));
 878                else
 879                        pr_err("\t%d: LNC %p LEB %d:%d len %d key %s\n",
 880                               n, zbr->znode, zbr->lnum, zbr->offs, zbr->len,
 881                               dbg_snprintf_key(c, &zbr->key, key_buf,
 882                                                DBG_KEY_BUF_LEN));
 883        }
 884        spin_unlock(&dbg_lock);
 885}
 886
 887void ubifs_dump_heap(struct ubifs_info *c, struct ubifs_lpt_heap *heap, int cat)
 888{
 889        int i;
 890
 891        pr_err("(pid %d) start dumping heap cat %d (%d elements)\n",
 892               current->pid, cat, heap->cnt);
 893        for (i = 0; i < heap->cnt; i++) {
 894                struct ubifs_lprops *lprops = heap->arr[i];
 895
 896                pr_err("\t%d. LEB %d hpos %d free %d dirty %d flags %d\n",
 897                       i, lprops->lnum, lprops->hpos, lprops->free,
 898                       lprops->dirty, lprops->flags);
 899        }
 900        pr_err("(pid %d) finish dumping heap\n", current->pid);
 901}
 902
 903void ubifs_dump_pnode(struct ubifs_info *c, struct ubifs_pnode *pnode,
 904                      struct ubifs_nnode *parent, int iip)
 905{
 906        int i;
 907
 908        pr_err("(pid %d) dumping pnode:\n", current->pid);
 909        pr_err("\taddress %zx parent %zx cnext %zx\n",
 910               (size_t)pnode, (size_t)parent, (size_t)pnode->cnext);
 911        pr_err("\tflags %lu iip %d level %d num %d\n",
 912               pnode->flags, iip, pnode->level, pnode->num);
 913        for (i = 0; i < UBIFS_LPT_FANOUT; i++) {
 914                struct ubifs_lprops *lp = &pnode->lprops[i];
 915
 916                pr_err("\t%d: free %d dirty %d flags %d lnum %d\n",
 917                       i, lp->free, lp->dirty, lp->flags, lp->lnum);
 918        }
 919}
 920
 921void ubifs_dump_tnc(struct ubifs_info *c)
 922{
 923        struct ubifs_znode *znode;
 924        int level;
 925
 926        pr_err("\n");
 927        pr_err("(pid %d) start dumping TNC tree\n", current->pid);
 928        znode = ubifs_tnc_levelorder_next(c, c->zroot.znode, NULL);
 929        level = znode->level;
 930        pr_err("== Level %d ==\n", level);
 931        while (znode) {
 932                if (level != znode->level) {
 933                        level = znode->level;
 934                        pr_err("== Level %d ==\n", level);
 935                }
 936                ubifs_dump_znode(c, znode);
 937                znode = ubifs_tnc_levelorder_next(c, c->zroot.znode, znode);
 938        }
 939        pr_err("(pid %d) finish dumping TNC tree\n", current->pid);
 940}
 941
 942static int dump_znode(struct ubifs_info *c, struct ubifs_znode *znode,
 943                      void *priv)
 944{
 945        ubifs_dump_znode(c, znode);
 946        return 0;
 947}
 948
 949/**
 950 * ubifs_dump_index - dump the on-flash index.
 951 * @c: UBIFS file-system description object
 952 *
 953 * This function dumps whole UBIFS indexing B-tree, unlike 'ubifs_dump_tnc()'
 954 * which dumps only in-memory znodes and does not read znodes which from flash.
 955 */
 956void ubifs_dump_index(struct ubifs_info *c)
 957{
 958        dbg_walk_index(c, NULL, dump_znode, NULL);
 959}
 960
 961/**
 962 * dbg_save_space_info - save information about flash space.
 963 * @c: UBIFS file-system description object
 964 *
 965 * This function saves information about UBIFS free space, dirty space, etc, in
 966 * order to check it later.
 967 */
 968void dbg_save_space_info(struct ubifs_info *c)
 969{
 970        struct ubifs_debug_info *d = c->dbg;
 971        int freeable_cnt;
 972
 973        spin_lock(&c->space_lock);
 974        memcpy(&d->saved_lst, &c->lst, sizeof(struct ubifs_lp_stats));
 975        memcpy(&d->saved_bi, &c->bi, sizeof(struct ubifs_budg_info));
 976        d->saved_idx_gc_cnt = c->idx_gc_cnt;
 977
 978        /*
 979         * We use a dirty hack here and zero out @c->freeable_cnt, because it
 980         * affects the free space calculations, and UBIFS might not know about
 981         * all freeable eraseblocks. Indeed, we know about freeable eraseblocks
 982         * only when we read their lprops, and we do this only lazily, upon the
 983         * need. So at any given point of time @c->freeable_cnt might be not
 984         * exactly accurate.
 985         *
 986         * Just one example about the issue we hit when we did not zero
 987         * @c->freeable_cnt.
 988         * 1. The file-system is mounted R/O, c->freeable_cnt is %0. We save the
 989         *    amount of free space in @d->saved_free
 990         * 2. We re-mount R/W, which makes UBIFS to read the "lsave"
 991         *    information from flash, where we cache LEBs from various
 992         *    categories ('ubifs_remount_fs()' -> 'ubifs_lpt_init()'
 993         *    -> 'lpt_init_wr()' -> 'read_lsave()' -> 'ubifs_lpt_lookup()'
 994         *    -> 'ubifs_get_pnode()' -> 'update_cats()'
 995         *    -> 'ubifs_add_to_cat()').
 996         * 3. Lsave contains a freeable eraseblock, and @c->freeable_cnt
 997         *    becomes %1.
 998         * 4. We calculate the amount of free space when the re-mount is
 999         *    finished in 'dbg_check_space_info()' and it does not match
1000         *    @d->saved_free.
1001         */
1002        freeable_cnt = c->freeable_cnt;
1003        c->freeable_cnt = 0;
1004        d->saved_free = ubifs_get_free_space_nolock(c);
1005        c->freeable_cnt = freeable_cnt;
1006        spin_unlock(&c->space_lock);
1007}
1008
1009/**
1010 * dbg_check_space_info - check flash space information.
1011 * @c: UBIFS file-system description object
1012 *
1013 * This function compares current flash space information with the information
1014 * which was saved when the 'dbg_save_space_info()' function was called.
1015 * Returns zero if the information has not changed, and %-EINVAL it it has
1016 * changed.
1017 */
1018int dbg_check_space_info(struct ubifs_info *c)
1019{
1020        struct ubifs_debug_info *d = c->dbg;
1021        struct ubifs_lp_stats lst;
1022        long long free;
1023        int freeable_cnt;
1024
1025        spin_lock(&c->space_lock);
1026        freeable_cnt = c->freeable_cnt;
1027        c->freeable_cnt = 0;
1028        free = ubifs_get_free_space_nolock(c);
1029        c->freeable_cnt = freeable_cnt;
1030        spin_unlock(&c->space_lock);
1031
1032        if (free != d->saved_free) {
1033                ubifs_err(c, "free space changed from %lld to %lld",
1034                          d->saved_free, free);
1035                goto out;
1036        }
1037
1038        return 0;
1039
1040out:
1041        ubifs_msg(c, "saved lprops statistics dump");
1042        ubifs_dump_lstats(&d->saved_lst);
1043        ubifs_msg(c, "saved budgeting info dump");
1044        ubifs_dump_budg(c, &d->saved_bi);
1045        ubifs_msg(c, "saved idx_gc_cnt %d", d->saved_idx_gc_cnt);
1046        ubifs_msg(c, "current lprops statistics dump");
1047        ubifs_get_lp_stats(c, &lst);
1048        ubifs_dump_lstats(&lst);
1049        ubifs_msg(c, "current budgeting info dump");
1050        ubifs_dump_budg(c, &c->bi);
1051        dump_stack();
1052        return -EINVAL;
1053}
1054
1055/**
1056 * dbg_check_synced_i_size - check synchronized inode size.
1057 * @c: UBIFS file-system description object
1058 * @inode: inode to check
1059 *
1060 * If inode is clean, synchronized inode size has to be equivalent to current
1061 * inode size. This function has to be called only for locked inodes (@i_mutex
1062 * has to be locked). Returns %0 if synchronized inode size if correct, and
1063 * %-EINVAL if not.
1064 */
1065int dbg_check_synced_i_size(const struct ubifs_info *c, struct inode *inode)
1066{
1067        int err = 0;
1068        struct ubifs_inode *ui = ubifs_inode(inode);
1069
1070        if (!dbg_is_chk_gen(c))
1071                return 0;
1072        if (!S_ISREG(inode->i_mode))
1073                return 0;
1074
1075        mutex_lock(&ui->ui_mutex);
1076        spin_lock(&ui->ui_lock);
1077        if (ui->ui_size != ui->synced_i_size && !ui->dirty) {
1078                ubifs_err(c, "ui_size is %lld, synced_i_size is %lld, but inode is clean",
1079                          ui->ui_size, ui->synced_i_size);
1080                ubifs_err(c, "i_ino %lu, i_mode %#x, i_size %lld", inode->i_ino,
1081                          inode->i_mode, i_size_read(inode));
1082                dump_stack();
1083                err = -EINVAL;
1084        }
1085        spin_unlock(&ui->ui_lock);
1086        mutex_unlock(&ui->ui_mutex);
1087        return err;
1088}
1089
1090/*
1091 * dbg_check_dir - check directory inode size and link count.
1092 * @c: UBIFS file-system description object
1093 * @dir: the directory to calculate size for
1094 * @size: the result is returned here
1095 *
1096 * This function makes sure that directory size and link count are correct.
1097 * Returns zero in case of success and a negative error code in case of
1098 * failure.
1099 *
1100 * Note, it is good idea to make sure the @dir->i_mutex is locked before
1101 * calling this function.
1102 */
1103int dbg_check_dir(struct ubifs_info *c, const struct inode *dir)
1104{
1105        unsigned int nlink = 2;
1106        union ubifs_key key;
1107        struct ubifs_dent_node *dent, *pdent = NULL;
1108        struct fscrypt_name nm = {0};
1109        loff_t size = UBIFS_INO_NODE_SZ;
1110
1111        if (!dbg_is_chk_gen(c))
1112                return 0;
1113
1114        if (!S_ISDIR(dir->i_mode))
1115                return 0;
1116
1117        lowest_dent_key(c, &key, dir->i_ino);
1118        while (1) {
1119                int err;
1120
1121                dent = ubifs_tnc_next_ent(c, &key, &nm);
1122                if (IS_ERR(dent)) {
1123                        err = PTR_ERR(dent);
1124                        if (err == -ENOENT)
1125                                break;
1126                        return err;
1127                }
1128
1129                fname_name(&nm) = dent->name;
1130                fname_len(&nm) = le16_to_cpu(dent->nlen);
1131                size += CALC_DENT_SIZE(fname_len(&nm));
1132                if (dent->type == UBIFS_ITYPE_DIR)
1133                        nlink += 1;
1134                kfree(pdent);
1135                pdent = dent;
1136                key_read(c, &dent->key, &key);
1137        }
1138        kfree(pdent);
1139
1140        if (i_size_read(dir) != size) {
1141                ubifs_err(c, "directory inode %lu has size %llu, but calculated size is %llu",
1142                          dir->i_ino, (unsigned long long)i_size_read(dir),
1143                          (unsigned long long)size);
1144                ubifs_dump_inode(c, dir);
1145                dump_stack();
1146                return -EINVAL;
1147        }
1148        if (dir->i_nlink != nlink) {
1149                ubifs_err(c, "directory inode %lu has nlink %u, but calculated nlink is %u",
1150                          dir->i_ino, dir->i_nlink, nlink);
1151                ubifs_dump_inode(c, dir);
1152                dump_stack();
1153                return -EINVAL;
1154        }
1155
1156        return 0;
1157}
1158
1159/**
1160 * dbg_check_key_order - make sure that colliding keys are properly ordered.
1161 * @c: UBIFS file-system description object
1162 * @zbr1: first zbranch
1163 * @zbr2: following zbranch
1164 *
1165 * In UBIFS indexing B-tree colliding keys has to be sorted in binary order of
1166 * names of the direntries/xentries which are referred by the keys. This
1167 * function reads direntries/xentries referred by @zbr1 and @zbr2 and makes
1168 * sure the name of direntry/xentry referred by @zbr1 is less than
1169 * direntry/xentry referred by @zbr2. Returns zero if this is true, %1 if not,
1170 * and a negative error code in case of failure.
1171 */
1172static int dbg_check_key_order(struct ubifs_info *c, struct ubifs_zbranch *zbr1,
1173                               struct ubifs_zbranch *zbr2)
1174{
1175        int err, nlen1, nlen2, cmp;
1176        struct ubifs_dent_node *dent1, *dent2;
1177        union ubifs_key key;
1178        char key_buf[DBG_KEY_BUF_LEN];
1179
1180        ubifs_assert(c, !keys_cmp(c, &zbr1->key, &zbr2->key));
1181        dent1 = kmalloc(UBIFS_MAX_DENT_NODE_SZ, GFP_NOFS);
1182        if (!dent1)
1183                return -ENOMEM;
1184        dent2 = kmalloc(UBIFS_MAX_DENT_NODE_SZ, GFP_NOFS);
1185        if (!dent2) {
1186                err = -ENOMEM;
1187                goto out_free;
1188        }
1189
1190        err = ubifs_tnc_read_node(c, zbr1, dent1);
1191        if (err)
1192                goto out_free;
1193        err = ubifs_validate_entry(c, dent1);
1194        if (err)
1195                goto out_free;
1196
1197        err = ubifs_tnc_read_node(c, zbr2, dent2);
1198        if (err)
1199                goto out_free;
1200        err = ubifs_validate_entry(c, dent2);
1201        if (err)
1202                goto out_free;
1203
1204        /* Make sure node keys are the same as in zbranch */
1205        err = 1;
1206        key_read(c, &dent1->key, &key);
1207        if (keys_cmp(c, &zbr1->key, &key)) {
1208                ubifs_err(c, "1st entry at %d:%d has key %s", zbr1->lnum,
1209                          zbr1->offs, dbg_snprintf_key(c, &key, key_buf,
1210                                                       DBG_KEY_BUF_LEN));
1211                ubifs_err(c, "but it should have key %s according to tnc",
1212                          dbg_snprintf_key(c, &zbr1->key, key_buf,
1213                                           DBG_KEY_BUF_LEN));
1214                ubifs_dump_node(c, dent1);
1215                goto out_free;
1216        }
1217
1218        key_read(c, &dent2->key, &key);
1219        if (keys_cmp(c, &zbr2->key, &key)) {
1220                ubifs_err(c, "2nd entry at %d:%d has key %s", zbr1->lnum,
1221                          zbr1->offs, dbg_snprintf_key(c, &key, key_buf,
1222                                                       DBG_KEY_BUF_LEN));
1223                ubifs_err(c, "but it should have key %s according to tnc",
1224                          dbg_snprintf_key(c, &zbr2->key, key_buf,
1225                                           DBG_KEY_BUF_LEN));
1226                ubifs_dump_node(c, dent2);
1227                goto out_free;
1228        }
1229
1230        nlen1 = le16_to_cpu(dent1->nlen);
1231        nlen2 = le16_to_cpu(dent2->nlen);
1232
1233        cmp = memcmp(dent1->name, dent2->name, min_t(int, nlen1, nlen2));
1234        if (cmp < 0 || (cmp == 0 && nlen1 < nlen2)) {
1235                err = 0;
1236                goto out_free;
1237        }
1238        if (cmp == 0 && nlen1 == nlen2)
1239                ubifs_err(c, "2 xent/dent nodes with the same name");
1240        else
1241                ubifs_err(c, "bad order of colliding key %s",
1242                          dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN));
1243
1244        ubifs_msg(c, "first node at %d:%d\n", zbr1->lnum, zbr1->offs);
1245        ubifs_dump_node(c, dent1);
1246        ubifs_msg(c, "second node at %d:%d\n", zbr2->lnum, zbr2->offs);
1247        ubifs_dump_node(c, dent2);
1248
1249out_free:
1250        kfree(dent2);
1251        kfree(dent1);
1252        return err;
1253}
1254
1255/**
1256 * dbg_check_znode - check if znode is all right.
1257 * @c: UBIFS file-system description object
1258 * @zbr: zbranch which points to this znode
1259 *
1260 * This function makes sure that znode referred to by @zbr is all right.
1261 * Returns zero if it is, and %-EINVAL if it is not.
1262 */
1263static int dbg_check_znode(struct ubifs_info *c, struct ubifs_zbranch *zbr)
1264{
1265        struct ubifs_znode *znode = zbr->znode;
1266        struct ubifs_znode *zp = znode->parent;
1267        int n, err, cmp;
1268
1269        if (znode->child_cnt <= 0 || znode->child_cnt > c->fanout) {
1270                err = 1;
1271                goto out;
1272        }
1273        if (znode->level < 0) {
1274                err = 2;
1275                goto out;
1276        }
1277        if (znode->iip < 0 || znode->iip >= c->fanout) {
1278                err = 3;
1279                goto out;
1280        }
1281
1282        if (zbr->len == 0)
1283                /* Only dirty zbranch may have no on-flash nodes */
1284                if (!ubifs_zn_dirty(znode)) {
1285                        err = 4;
1286                        goto out;
1287                }
1288
1289        if (ubifs_zn_dirty(znode)) {
1290                /*
1291                 * If znode is dirty, its parent has to be dirty as well. The
1292                 * order of the operation is important, so we have to have
1293                 * memory barriers.
1294                 */
1295                smp_mb();
1296                if (zp && !ubifs_zn_dirty(zp)) {
1297                        /*
1298                         * The dirty flag is atomic and is cleared outside the
1299                         * TNC mutex, so znode's dirty flag may now have
1300                         * been cleared. The child is always cleared before the
1301                         * parent, so we just need to check again.
1302                         */
1303                        smp_mb();
1304                        if (ubifs_zn_dirty(znode)) {
1305                                err = 5;
1306                                goto out;
1307                        }
1308                }
1309        }
1310
1311        if (zp) {
1312                const union ubifs_key *min, *max;
1313
1314                if (znode->level != zp->level - 1) {
1315                        err = 6;
1316                        goto out;
1317                }
1318
1319                /* Make sure the 'parent' pointer in our znode is correct */
1320                err = ubifs_search_zbranch(c, zp, &zbr->key, &n);
1321                if (!err) {
1322                        /* This zbranch does not exist in the parent */
1323                        err = 7;
1324                        goto out;
1325                }
1326
1327                if (znode->iip >= zp->child_cnt) {
1328                        err = 8;
1329                        goto out;
1330                }
1331
1332                if (znode->iip != n) {
1333                        /* This may happen only in case of collisions */
1334                        if (keys_cmp(c, &zp->zbranch[n].key,
1335                                     &zp->zbranch[znode->iip].key)) {
1336                                err = 9;
1337                                goto out;
1338                        }
1339                        n = znode->iip;
1340                }
1341
1342                /*
1343                 * Make sure that the first key in our znode is greater than or
1344                 * equal to the key in the pointing zbranch.
1345                 */
1346                min = &zbr->key;
1347                cmp = keys_cmp(c, min, &znode->zbranch[0].key);
1348                if (cmp == 1) {
1349                        err = 10;
1350                        goto out;
1351                }
1352
1353                if (n + 1 < zp->child_cnt) {
1354                        max = &zp->zbranch[n + 1].key;
1355
1356                        /*
1357                         * Make sure the last key in our znode is less or
1358                         * equivalent than the key in the zbranch which goes
1359                         * after our pointing zbranch.
1360                         */
1361                        cmp = keys_cmp(c, max,
1362                                &znode->zbranch[znode->child_cnt - 1].key);
1363                        if (cmp == -1) {
1364                                err = 11;
1365                                goto out;
1366                        }
1367                }
1368        } else {
1369                /* This may only be root znode */
1370                if (zbr != &c->zroot) {
1371                        err = 12;
1372                        goto out;
1373                }
1374        }
1375
1376        /*
1377         * Make sure that next key is greater or equivalent then the previous
1378         * one.
1379         */
1380        for (n = 1; n < znode->child_cnt; n++) {
1381                cmp = keys_cmp(c, &znode->zbranch[n - 1].key,
1382                               &znode->zbranch[n].key);
1383                if (cmp > 0) {
1384                        err = 13;
1385                        goto out;
1386                }
1387                if (cmp == 0) {
1388                        /* This can only be keys with colliding hash */
1389                        if (!is_hash_key(c, &znode->zbranch[n].key)) {
1390                                err = 14;
1391                                goto out;
1392                        }
1393
1394                        if (znode->level != 0 || c->replaying)
1395                                continue;
1396
1397                        /*
1398                         * Colliding keys should follow binary order of
1399                         * corresponding xentry/dentry names.
1400                         */
1401                        err = dbg_check_key_order(c, &znode->zbranch[n - 1],
1402                                                  &znode->zbranch[n]);
1403                        if (err < 0)
1404                                return err;
1405                        if (err) {
1406                                err = 15;
1407                                goto out;
1408                        }
1409                }
1410        }
1411
1412        for (n = 0; n < znode->child_cnt; n++) {
1413                if (!znode->zbranch[n].znode &&
1414                    (znode->zbranch[n].lnum == 0 ||
1415                     znode->zbranch[n].len == 0)) {
1416                        err = 16;
1417                        goto out;
1418                }
1419
1420                if (znode->zbranch[n].lnum != 0 &&
1421                    znode->zbranch[n].len == 0) {
1422                        err = 17;
1423                        goto out;
1424                }
1425
1426                if (znode->zbranch[n].lnum == 0 &&
1427                    znode->zbranch[n].len != 0) {
1428                        err = 18;
1429                        goto out;
1430                }
1431
1432                if (znode->zbranch[n].lnum == 0 &&
1433                    znode->zbranch[n].offs != 0) {
1434                        err = 19;
1435                        goto out;
1436                }
1437
1438                if (znode->level != 0 && znode->zbranch[n].znode)
1439                        if (znode->zbranch[n].znode->parent != znode) {
1440                                err = 20;
1441                                goto out;
1442                        }
1443        }
1444
1445        return 0;
1446
1447out:
1448        ubifs_err(c, "failed, error %d", err);
1449        ubifs_msg(c, "dump of the znode");
1450        ubifs_dump_znode(c, znode);
1451        if (zp) {
1452                ubifs_msg(c, "dump of the parent znode");
1453                ubifs_dump_znode(c, zp);
1454        }
1455        dump_stack();
1456        return -EINVAL;
1457}
1458
1459/**
1460 * dbg_check_tnc - check TNC tree.
1461 * @c: UBIFS file-system description object
1462 * @extra: do extra checks that are possible at start commit
1463 *
1464 * This function traverses whole TNC tree and checks every znode. Returns zero
1465 * if everything is all right and %-EINVAL if something is wrong with TNC.
1466 */
1467int dbg_check_tnc(struct ubifs_info *c, int extra)
1468{
1469        struct ubifs_znode *znode;
1470        long clean_cnt = 0, dirty_cnt = 0;
1471        int err, last;
1472
1473        if (!dbg_is_chk_index(c))
1474                return 0;
1475
1476        ubifs_assert(c, mutex_is_locked(&c->tnc_mutex));
1477        if (!c->zroot.znode)
1478                return 0;
1479
1480        znode = ubifs_tnc_postorder_first(c->zroot.znode);
1481        while (1) {
1482                struct ubifs_znode *prev;
1483                struct ubifs_zbranch *zbr;
1484
1485                if (!znode->parent)
1486                        zbr = &c->zroot;
1487                else
1488                        zbr = &znode->parent->zbranch[znode->iip];
1489
1490                err = dbg_check_znode(c, zbr);
1491                if (err)
1492                        return err;
1493
1494                if (extra) {
1495                        if (ubifs_zn_dirty(znode))
1496                                dirty_cnt += 1;
1497                        else
1498                                clean_cnt += 1;
1499                }
1500
1501                prev = znode;
1502                znode = ubifs_tnc_postorder_next(c, znode);
1503                if (!znode)
1504                        break;
1505
1506                /*
1507                 * If the last key of this znode is equivalent to the first key
1508                 * of the next znode (collision), then check order of the keys.
1509                 */
1510                last = prev->child_cnt - 1;
1511                if (prev->level == 0 && znode->level == 0 && !c->replaying &&
1512                    !keys_cmp(c, &prev->zbranch[last].key,
1513                              &znode->zbranch[0].key)) {
1514                        err = dbg_check_key_order(c, &prev->zbranch[last],
1515                                                  &znode->zbranch[0]);
1516                        if (err < 0)
1517                                return err;
1518                        if (err) {
1519                                ubifs_msg(c, "first znode");
1520                                ubifs_dump_znode(c, prev);
1521                                ubifs_msg(c, "second znode");
1522                                ubifs_dump_znode(c, znode);
1523                                return -EINVAL;
1524                        }
1525                }
1526        }
1527
1528        if (extra) {
1529                if (clean_cnt != atomic_long_read(&c->clean_zn_cnt)) {
1530                        ubifs_err(c, "incorrect clean_zn_cnt %ld, calculated %ld",
1531                                  atomic_long_read(&c->clean_zn_cnt),
1532                                  clean_cnt);
1533                        return -EINVAL;
1534                }
1535                if (dirty_cnt != atomic_long_read(&c->dirty_zn_cnt)) {
1536                        ubifs_err(c, "incorrect dirty_zn_cnt %ld, calculated %ld",
1537                                  atomic_long_read(&c->dirty_zn_cnt),
1538                                  dirty_cnt);
1539                        return -EINVAL;
1540                }
1541        }
1542
1543        return 0;
1544}
1545
1546/**
1547 * dbg_walk_index - walk the on-flash index.
1548 * @c: UBIFS file-system description object
1549 * @leaf_cb: called for each leaf node
1550 * @znode_cb: called for each indexing node
1551 * @priv: private data which is passed to callbacks
1552 *
1553 * This function walks the UBIFS index and calls the @leaf_cb for each leaf
1554 * node and @znode_cb for each indexing node. Returns zero in case of success
1555 * and a negative error code in case of failure.
1556 *
1557 * It would be better if this function removed every znode it pulled to into
1558 * the TNC, so that the behavior more closely matched the non-debugging
1559 * behavior.
1560 */
1561int dbg_walk_index(struct ubifs_info *c, dbg_leaf_callback leaf_cb,
1562                   dbg_znode_callback znode_cb, void *priv)
1563{
1564        int err;
1565        struct ubifs_zbranch *zbr;
1566        struct ubifs_znode *znode, *child;
1567
1568        mutex_lock(&c->tnc_mutex);
1569        /* If the root indexing node is not in TNC - pull it */
1570        if (!c->zroot.znode) {
1571                c->zroot.znode = ubifs_load_znode(c, &c->zroot, NULL, 0);
1572                if (IS_ERR(c->zroot.znode)) {
1573                        err = PTR_ERR(c->zroot.znode);
1574                        c->zroot.znode = NULL;
1575                        goto out_unlock;
1576                }
1577        }
1578
1579        /*
1580         * We are going to traverse the indexing tree in the postorder manner.
1581         * Go down and find the leftmost indexing node where we are going to
1582         * start from.
1583         */
1584        znode = c->zroot.znode;
1585        while (znode->level > 0) {
1586                zbr = &znode->zbranch[0];
1587                child = zbr->znode;
1588                if (!child) {
1589                        child = ubifs_load_znode(c, zbr, znode, 0);
1590                        if (IS_ERR(child)) {
1591                                err = PTR_ERR(child);
1592                                goto out_unlock;
1593                        }
1594                }
1595
1596                znode = child;
1597        }
1598
1599        /* Iterate over all indexing nodes */
1600        while (1) {
1601                int idx;
1602
1603                cond_resched();
1604
1605                if (znode_cb) {
1606                        err = znode_cb(c, znode, priv);
1607                        if (err) {
1608                                ubifs_err(c, "znode checking function returned error %d",
1609                                          err);
1610                                ubifs_dump_znode(c, znode);
1611                                goto out_dump;
1612                        }
1613                }
1614                if (leaf_cb && znode->level == 0) {
1615                        for (idx = 0; idx < znode->child_cnt; idx++) {
1616                                zbr = &znode->zbranch[idx];
1617                                err = leaf_cb(c, zbr, priv);
1618                                if (err) {
1619                                        ubifs_err(c, "leaf checking function returned error %d, for leaf at LEB %d:%d",
1620                                                  err, zbr->lnum, zbr->offs);
1621                                        goto out_dump;
1622                                }
1623                        }
1624                }
1625
1626                if (!znode->parent)
1627                        break;
1628
1629                idx = znode->iip + 1;
1630                znode = znode->parent;
1631                if (idx < znode->child_cnt) {
1632                        /* Switch to the next index in the parent */
1633                        zbr = &znode->zbranch[idx];
1634                        child = zbr->znode;
1635                        if (!child) {
1636                                child = ubifs_load_znode(c, zbr, znode, idx);
1637                                if (IS_ERR(child)) {
1638                                        err = PTR_ERR(child);
1639                                        goto out_unlock;
1640                                }
1641                                zbr->znode = child;
1642                        }
1643                        znode = child;
1644                } else
1645                        /*
1646                         * This is the last child, switch to the parent and
1647                         * continue.
1648                         */
1649                        continue;
1650
1651                /* Go to the lowest leftmost znode in the new sub-tree */
1652                while (znode->level > 0) {
1653                        zbr = &znode->zbranch[0];
1654                        child = zbr->znode;
1655                        if (!child) {
1656                                child = ubifs_load_znode(c, zbr, znode, 0);
1657                                if (IS_ERR(child)) {
1658                                        err = PTR_ERR(child);
1659                                        goto out_unlock;
1660                                }
1661                                zbr->znode = child;
1662                        }
1663                        znode = child;
1664                }
1665        }
1666
1667        mutex_unlock(&c->tnc_mutex);
1668        return 0;
1669
1670out_dump:
1671        if (znode->parent)
1672                zbr = &znode->parent->zbranch[znode->iip];
1673        else
1674                zbr = &c->zroot;
1675        ubifs_msg(c, "dump of znode at LEB %d:%d", zbr->lnum, zbr->offs);
1676        ubifs_dump_znode(c, znode);
1677out_unlock:
1678        mutex_unlock(&c->tnc_mutex);
1679        return err;
1680}
1681
1682/**
1683 * add_size - add znode size to partially calculated index size.
1684 * @c: UBIFS file-system description object
1685 * @znode: znode to add size for
1686 * @priv: partially calculated index size
1687 *
1688 * This is a helper function for 'dbg_check_idx_size()' which is called for
1689 * every indexing node and adds its size to the 'long long' variable pointed to
1690 * by @priv.
1691 */
1692static int add_size(struct ubifs_info *c, struct ubifs_znode *znode, void *priv)
1693{
1694        long long *idx_size = priv;
1695        int add;
1696
1697        add = ubifs_idx_node_sz(c, znode->child_cnt);
1698        add = ALIGN(add, 8);
1699        *idx_size += add;
1700        return 0;
1701}
1702
1703/**
1704 * dbg_check_idx_size - check index size.
1705 * @c: UBIFS file-system description object
1706 * @idx_size: size to check
1707 *
1708 * This function walks the UBIFS index, calculates its size and checks that the
1709 * size is equivalent to @idx_size. Returns zero in case of success and a
1710 * negative error code in case of failure.
1711 */
1712int dbg_check_idx_size(struct ubifs_info *c, long long idx_size)
1713{
1714        int err;
1715        long long calc = 0;
1716
1717        if (!dbg_is_chk_index(c))
1718                return 0;
1719
1720        err = dbg_walk_index(c, NULL, add_size, &calc);
1721        if (err) {
1722                ubifs_err(c, "error %d while walking the index", err);
1723                return err;
1724        }
1725
1726        if (calc != idx_size) {
1727                ubifs_err(c, "index size check failed: calculated size is %lld, should be %lld",
1728                          calc, idx_size);
1729                dump_stack();
1730                return -EINVAL;
1731        }
1732
1733        return 0;
1734}
1735
1736/**
1737 * struct fsck_inode - information about an inode used when checking the file-system.
1738 * @rb: link in the RB-tree of inodes
1739 * @inum: inode number
1740 * @mode: inode type, permissions, etc
1741 * @nlink: inode link count
1742 * @xattr_cnt: count of extended attributes
1743 * @references: how many directory/xattr entries refer this inode (calculated
1744 *              while walking the index)
1745 * @calc_cnt: for directory inode count of child directories
1746 * @size: inode size (read from on-flash inode)
1747 * @xattr_sz: summary size of all extended attributes (read from on-flash
1748 *            inode)
1749 * @calc_sz: for directories calculated directory size
1750 * @calc_xcnt: count of extended attributes
1751 * @calc_xsz: calculated summary size of all extended attributes
1752 * @xattr_nms: sum of lengths of all extended attribute names belonging to this
1753 *             inode (read from on-flash inode)
1754 * @calc_xnms: calculated sum of lengths of all extended attribute names
1755 */
1756struct fsck_inode {
1757        struct rb_node rb;
1758        ino_t inum;
1759        umode_t mode;
1760        unsigned int nlink;
1761        unsigned int xattr_cnt;
1762        int references;
1763        int calc_cnt;
1764        long long size;
1765        unsigned int xattr_sz;
1766        long long calc_sz;
1767        long long calc_xcnt;
1768        long long calc_xsz;
1769        unsigned int xattr_nms;
1770        long long calc_xnms;
1771};
1772
1773/**
1774 * struct fsck_data - private FS checking information.
1775 * @inodes: RB-tree of all inodes (contains @struct fsck_inode objects)
1776 */
1777struct fsck_data {
1778        struct rb_root inodes;
1779};
1780
1781/**
1782 * add_inode - add inode information to RB-tree of inodes.
1783 * @c: UBIFS file-system description object
1784 * @fsckd: FS checking information
1785 * @ino: raw UBIFS inode to add
1786 *
1787 * This is a helper function for 'check_leaf()' which adds information about
1788 * inode @ino to the RB-tree of inodes. Returns inode information pointer in
1789 * case of success and a negative error code in case of failure.
1790 */
1791static struct fsck_inode *add_inode(struct ubifs_info *c,
1792                                    struct fsck_data *fsckd,
1793                                    struct ubifs_ino_node *ino)
1794{
1795        struct rb_node **p, *parent = NULL;
1796        struct fsck_inode *fscki;
1797        ino_t inum = key_inum_flash(c, &ino->key);
1798        struct inode *inode;
1799        struct ubifs_inode *ui;
1800
1801        p = &fsckd->inodes.rb_node;
1802        while (*p) {
1803                parent = *p;
1804                fscki = rb_entry(parent, struct fsck_inode, rb);
1805                if (inum < fscki->inum)
1806                        p = &(*p)->rb_left;
1807                else if (inum > fscki->inum)
1808                        p = &(*p)->rb_right;
1809                else
1810                        return fscki;
1811        }
1812
1813        if (inum > c->highest_inum) {
1814                ubifs_err(c, "too high inode number, max. is %lu",
1815                          (unsigned long)c->highest_inum);
1816                return ERR_PTR(-EINVAL);
1817        }
1818
1819        fscki = kzalloc(sizeof(struct fsck_inode), GFP_NOFS);
1820        if (!fscki)
1821                return ERR_PTR(-ENOMEM);
1822
1823        inode = ilookup(c->vfs_sb, inum);
1824
1825        fscki->inum = inum;
1826        /*
1827         * If the inode is present in the VFS inode cache, use it instead of
1828         * the on-flash inode which might be out-of-date. E.g., the size might
1829         * be out-of-date. If we do not do this, the following may happen, for
1830         * example:
1831         *   1. A power cut happens
1832         *   2. We mount the file-system R/O, the replay process fixes up the
1833         *      inode size in the VFS cache, but on on-flash.
1834         *   3. 'check_leaf()' fails because it hits a data node beyond inode
1835         *      size.
1836         */
1837        if (!inode) {
1838                fscki->nlink = le32_to_cpu(ino->nlink);
1839                fscki->size = le64_to_cpu(ino->size);
1840                fscki->xattr_cnt = le32_to_cpu(ino->xattr_cnt);
1841                fscki->xattr_sz = le32_to_cpu(ino->xattr_size);
1842                fscki->xattr_nms = le32_to_cpu(ino->xattr_names);
1843                fscki->mode = le32_to_cpu(ino->mode);
1844        } else {
1845                ui = ubifs_inode(inode);
1846                fscki->nlink = inode->i_nlink;
1847                fscki->size = inode->i_size;
1848                fscki->xattr_cnt = ui->xattr_cnt;
1849                fscki->xattr_sz = ui->xattr_size;
1850                fscki->xattr_nms = ui->xattr_names;
1851                fscki->mode = inode->i_mode;
1852                iput(inode);
1853        }
1854
1855        if (S_ISDIR(fscki->mode)) {
1856                fscki->calc_sz = UBIFS_INO_NODE_SZ;
1857                fscki->calc_cnt = 2;
1858        }
1859
1860        rb_link_node(&fscki->rb, parent, p);
1861        rb_insert_color(&fscki->rb, &fsckd->inodes);
1862
1863        return fscki;
1864}
1865
1866/**
1867 * search_inode - search inode in the RB-tree of inodes.
1868 * @fsckd: FS checking information
1869 * @inum: inode number to search
1870 *
1871 * This is a helper function for 'check_leaf()' which searches inode @inum in
1872 * the RB-tree of inodes and returns an inode information pointer or %NULL if
1873 * the inode was not found.
1874 */
1875static struct fsck_inode *search_inode(struct fsck_data *fsckd, ino_t inum)
1876{
1877        struct rb_node *p;
1878        struct fsck_inode *fscki;
1879
1880        p = fsckd->inodes.rb_node;
1881        while (p) {
1882                fscki = rb_entry(p, struct fsck_inode, rb);
1883                if (inum < fscki->inum)
1884                        p = p->rb_left;
1885                else if (inum > fscki->inum)
1886                        p = p->rb_right;
1887                else
1888                        return fscki;
1889        }
1890        return NULL;
1891}
1892
1893/**
1894 * read_add_inode - read inode node and add it to RB-tree of inodes.
1895 * @c: UBIFS file-system description object
1896 * @fsckd: FS checking information
1897 * @inum: inode number to read
1898 *
1899 * This is a helper function for 'check_leaf()' which finds inode node @inum in
1900 * the index, reads it, and adds it to the RB-tree of inodes. Returns inode
1901 * information pointer in case of success and a negative error code in case of
1902 * failure.
1903 */
1904static struct fsck_inode *read_add_inode(struct ubifs_info *c,
1905                                         struct fsck_data *fsckd, ino_t inum)
1906{
1907        int n, err;
1908        union ubifs_key key;
1909        struct ubifs_znode *znode;
1910        struct ubifs_zbranch *zbr;
1911        struct ubifs_ino_node *ino;
1912        struct fsck_inode *fscki;
1913
1914        fscki = search_inode(fsckd, inum);
1915        if (fscki)
1916                return fscki;
1917
1918        ino_key_init(c, &key, inum);
1919        err = ubifs_lookup_level0(c, &key, &znode, &n);
1920        if (!err) {
1921                ubifs_err(c, "inode %lu not found in index", (unsigned long)inum);
1922                return ERR_PTR(-ENOENT);
1923        } else if (err < 0) {
1924                ubifs_err(c, "error %d while looking up inode %lu",
1925                          err, (unsigned long)inum);
1926                return ERR_PTR(err);
1927        }
1928
1929        zbr = &znode->zbranch[n];
1930        if (zbr->len < UBIFS_INO_NODE_SZ) {
1931                ubifs_err(c, "bad node %lu node length %d",
1932                          (unsigned long)inum, zbr->len);
1933                return ERR_PTR(-EINVAL);
1934        }
1935
1936        ino = kmalloc(zbr->len, GFP_NOFS);
1937        if (!ino)
1938                return ERR_PTR(-ENOMEM);
1939
1940        err = ubifs_tnc_read_node(c, zbr, ino);
1941        if (err) {
1942                ubifs_err(c, "cannot read inode node at LEB %d:%d, error %d",
1943                          zbr->lnum, zbr->offs, err);
1944                kfree(ino);
1945                return ERR_PTR(err);
1946        }
1947
1948        fscki = add_inode(c, fsckd, ino);
1949        kfree(ino);
1950        if (IS_ERR(fscki)) {
1951                ubifs_err(c, "error %ld while adding inode %lu node",
1952                          PTR_ERR(fscki), (unsigned long)inum);
1953                return fscki;
1954        }
1955
1956        return fscki;
1957}
1958
1959/**
1960 * check_leaf - check leaf node.
1961 * @c: UBIFS file-system description object
1962 * @zbr: zbranch of the leaf node to check
1963 * @priv: FS checking information
1964 *
1965 * This is a helper function for 'dbg_check_filesystem()' which is called for
1966 * every single leaf node while walking the indexing tree. It checks that the
1967 * leaf node referred from the indexing tree exists, has correct CRC, and does
1968 * some other basic validation. This function is also responsible for building
1969 * an RB-tree of inodes - it adds all inodes into the RB-tree. It also
1970 * calculates reference count, size, etc for each inode in order to later
1971 * compare them to the information stored inside the inodes and detect possible
1972 * inconsistencies. Returns zero in case of success and a negative error code
1973 * in case of failure.
1974 */
1975static int check_leaf(struct ubifs_info *c, struct ubifs_zbranch *zbr,
1976                      void *priv)
1977{
1978        ino_t inum;
1979        void *node;
1980        struct ubifs_ch *ch;
1981        int err, type = key_type(c, &zbr->key);
1982        struct fsck_inode *fscki;
1983
1984        if (zbr->len < UBIFS_CH_SZ) {
1985                ubifs_err(c, "bad leaf length %d (LEB %d:%d)",
1986                          zbr->len, zbr->lnum, zbr->offs);
1987                return -EINVAL;
1988        }
1989
1990        node = kmalloc(zbr->len, GFP_NOFS);
1991        if (!node)
1992                return -ENOMEM;
1993
1994        err = ubifs_tnc_read_node(c, zbr, node);
1995        if (err) {
1996                ubifs_err(c, "cannot read leaf node at LEB %d:%d, error %d",
1997                          zbr->lnum, zbr->offs, err);
1998                goto out_free;
1999        }
2000
2001        /* If this is an inode node, add it to RB-tree of inodes */
2002        if (type == UBIFS_INO_KEY) {
2003                fscki = add_inode(c, priv, node);
2004                if (IS_ERR(fscki)) {
2005                        err = PTR_ERR(fscki);
2006                        ubifs_err(c, "error %d while adding inode node", err);
2007                        goto out_dump;
2008                }
2009                goto out;
2010        }
2011
2012        if (type != UBIFS_DENT_KEY && type != UBIFS_XENT_KEY &&
2013            type != UBIFS_DATA_KEY) {
2014                ubifs_err(c, "unexpected node type %d at LEB %d:%d",
2015                          type, zbr->lnum, zbr->offs);
2016                err = -EINVAL;
2017                goto out_free;
2018        }
2019
2020        ch = node;
2021        if (le64_to_cpu(ch->sqnum) > c->max_sqnum) {
2022                ubifs_err(c, "too high sequence number, max. is %llu",
2023                          c->max_sqnum);
2024                err = -EINVAL;
2025                goto out_dump;
2026        }
2027
2028        if (type == UBIFS_DATA_KEY) {
2029                long long blk_offs;
2030                struct ubifs_data_node *dn = node;
2031
2032                ubifs_assert(c, zbr->len >= UBIFS_DATA_NODE_SZ);
2033
2034                /*
2035                 * Search the inode node this data node belongs to and insert
2036                 * it to the RB-tree of inodes.
2037                 */
2038                inum = key_inum_flash(c, &dn->key);
2039                fscki = read_add_inode(c, priv, inum);
2040                if (IS_ERR(fscki)) {
2041                        err = PTR_ERR(fscki);
2042                        ubifs_err(c, "error %d while processing data node and trying to find inode node %lu",
2043                                  err, (unsigned long)inum);
2044                        goto out_dump;
2045                }
2046
2047                /* Make sure the data node is within inode size */
2048                blk_offs = key_block_flash(c, &dn->key);
2049                blk_offs <<= UBIFS_BLOCK_SHIFT;
2050                blk_offs += le32_to_cpu(dn->size);
2051                if (blk_offs > fscki->size) {
2052                        ubifs_err(c, "data node at LEB %d:%d is not within inode size %lld",
2053                                  zbr->lnum, zbr->offs, fscki->size);
2054                        err = -EINVAL;
2055                        goto out_dump;
2056                }
2057        } else {
2058                int nlen;
2059                struct ubifs_dent_node *dent = node;
2060                struct fsck_inode *fscki1;
2061
2062                ubifs_assert(c, zbr->len >= UBIFS_DENT_NODE_SZ);
2063
2064                err = ubifs_validate_entry(c, dent);
2065                if (err)
2066                        goto out_dump;
2067
2068                /*
2069                 * Search the inode node this entry refers to and the parent
2070                 * inode node and insert them to the RB-tree of inodes.
2071                 */
2072                inum = le64_to_cpu(dent->inum);
2073                fscki = read_add_inode(c, priv, inum);
2074                if (IS_ERR(fscki)) {
2075                        err = PTR_ERR(fscki);
2076                        ubifs_err(c, "error %d while processing entry node and trying to find inode node %lu",
2077                                  err, (unsigned long)inum);
2078                        goto out_dump;
2079                }
2080
2081                /* Count how many direntries or xentries refers this inode */
2082                fscki->references += 1;
2083
2084                inum = key_inum_flash(c, &dent->key);
2085                fscki1 = read_add_inode(c, priv, inum);
2086                if (IS_ERR(fscki1)) {
2087                        err = PTR_ERR(fscki1);
2088                        ubifs_err(c, "error %d while processing entry node and trying to find parent inode node %lu",
2089                                  err, (unsigned long)inum);
2090                        goto out_dump;
2091                }
2092
2093                nlen = le16_to_cpu(dent->nlen);
2094                if (type == UBIFS_XENT_KEY) {
2095                        fscki1->calc_xcnt += 1;
2096                        fscki1->calc_xsz += CALC_DENT_SIZE(nlen);
2097                        fscki1->calc_xsz += CALC_XATTR_BYTES(fscki->size);
2098                        fscki1->calc_xnms += nlen;
2099                } else {
2100                        fscki1->calc_sz += CALC_DENT_SIZE(nlen);
2101                        if (dent->type == UBIFS_ITYPE_DIR)
2102                                fscki1->calc_cnt += 1;
2103                }
2104        }
2105
2106out:
2107        kfree(node);
2108        return 0;
2109
2110out_dump:
2111        ubifs_msg(c, "dump of node at LEB %d:%d", zbr->lnum, zbr->offs);
2112        ubifs_dump_node(c, node);
2113out_free:
2114        kfree(node);
2115        return err;
2116}
2117
2118/**
2119 * free_inodes - free RB-tree of inodes.
2120 * @fsckd: FS checking information
2121 */
2122static void free_inodes(struct fsck_data *fsckd)
2123{
2124        struct fsck_inode *fscki, *n;
2125
2126        rbtree_postorder_for_each_entry_safe(fscki, n, &fsckd->inodes, rb)
2127                kfree(fscki);
2128}
2129
2130/**
2131 * check_inodes - checks all inodes.
2132 * @c: UBIFS file-system description object
2133 * @fsckd: FS checking information
2134 *
2135 * This is a helper function for 'dbg_check_filesystem()' which walks the
2136 * RB-tree of inodes after the index scan has been finished, and checks that
2137 * inode nlink, size, etc are correct. Returns zero if inodes are fine,
2138 * %-EINVAL if not, and a negative error code in case of failure.
2139 */
2140static int check_inodes(struct ubifs_info *c, struct fsck_data *fsckd)
2141{
2142        int n, err;
2143        union ubifs_key key;
2144        struct ubifs_znode *znode;
2145        struct ubifs_zbranch *zbr;
2146        struct ubifs_ino_node *ino;
2147        struct fsck_inode *fscki;
2148        struct rb_node *this = rb_first(&fsckd->inodes);
2149
2150        while (this) {
2151                fscki = rb_entry(this, struct fsck_inode, rb);
2152                this = rb_next(this);
2153
2154                if (S_ISDIR(fscki->mode)) {
2155                        /*
2156                         * Directories have to have exactly one reference (they
2157                         * cannot have hardlinks), although root inode is an
2158                         * exception.
2159                         */
2160                        if (fscki->inum != UBIFS_ROOT_INO &&
2161                            fscki->references != 1) {
2162                                ubifs_err(c, "directory inode %lu has %d direntries which refer it, but should be 1",
2163                                          (unsigned long)fscki->inum,
2164                                          fscki->references);
2165                                goto out_dump;
2166                        }
2167                        if (fscki->inum == UBIFS_ROOT_INO &&
2168                            fscki->references != 0) {
2169                                ubifs_err(c, "root inode %lu has non-zero (%d) direntries which refer it",
2170                                          (unsigned long)fscki->inum,
2171                                          fscki->references);
2172                                goto out_dump;
2173                        }
2174                        if (fscki->calc_sz != fscki->size) {
2175                                ubifs_err(c, "directory inode %lu size is %lld, but calculated size is %lld",
2176                                          (unsigned long)fscki->inum,
2177                                          fscki->size, fscki->calc_sz);
2178                                goto out_dump;
2179                        }
2180                        if (fscki->calc_cnt != fscki->nlink) {
2181                                ubifs_err(c, "directory inode %lu nlink is %d, but calculated nlink is %d",
2182                                          (unsigned long)fscki->inum,
2183                                          fscki->nlink, fscki->calc_cnt);
2184                                goto out_dump;
2185                        }
2186                } else {
2187                        if (fscki->references != fscki->nlink) {
2188                                ubifs_err(c, "inode %lu nlink is %d, but calculated nlink is %d",
2189                                          (unsigned long)fscki->inum,
2190                                          fscki->nlink, fscki->references);
2191                                goto out_dump;
2192                        }
2193                }
2194                if (fscki->xattr_sz != fscki->calc_xsz) {
2195                        ubifs_err(c, "inode %lu has xattr size %u, but calculated size is %lld",
2196                                  (unsigned long)fscki->inum, fscki->xattr_sz,
2197                                  fscki->calc_xsz);
2198                        goto out_dump;
2199                }
2200                if (fscki->xattr_cnt != fscki->calc_xcnt) {
2201                        ubifs_err(c, "inode %lu has %u xattrs, but calculated count is %lld",
2202                                  (unsigned long)fscki->inum,
2203                                  fscki->xattr_cnt, fscki->calc_xcnt);
2204                        goto out_dump;
2205                }
2206                if (fscki->xattr_nms != fscki->calc_xnms) {
2207                        ubifs_err(c, "inode %lu has xattr names' size %u, but calculated names' size is %lld",
2208                                  (unsigned long)fscki->inum, fscki->xattr_nms,
2209                                  fscki->calc_xnms);
2210                        goto out_dump;
2211                }
2212        }
2213
2214        return 0;
2215
2216out_dump:
2217        /* Read the bad inode and dump it */
2218        ino_key_init(c, &key, fscki->inum);
2219        err = ubifs_lookup_level0(c, &key, &znode, &n);
2220        if (!err) {
2221                ubifs_err(c, "inode %lu not found in index",
2222                          (unsigned long)fscki->inum);
2223                return -ENOENT;
2224        } else if (err < 0) {
2225                ubifs_err(c, "error %d while looking up inode %lu",
2226                          err, (unsigned long)fscki->inum);
2227                return err;
2228        }
2229
2230        zbr = &znode->zbranch[n];
2231        ino = kmalloc(zbr->len, GFP_NOFS);
2232        if (!ino)
2233                return -ENOMEM;
2234
2235        err = ubifs_tnc_read_node(c, zbr, ino);
2236        if (err) {
2237                ubifs_err(c, "cannot read inode node at LEB %d:%d, error %d",
2238                          zbr->lnum, zbr->offs, err);
2239                kfree(ino);
2240                return err;
2241        }
2242
2243        ubifs_msg(c, "dump of the inode %lu sitting in LEB %d:%d",
2244                  (unsigned long)fscki->inum, zbr->lnum, zbr->offs);
2245        ubifs_dump_node(c, ino);
2246        kfree(ino);
2247        return -EINVAL;
2248}
2249
2250/**
2251 * dbg_check_filesystem - check the file-system.
2252 * @c: UBIFS file-system description object
2253 *
2254 * This function checks the file system, namely:
2255 * o makes sure that all leaf nodes exist and their CRCs are correct;
2256 * o makes sure inode nlink, size, xattr size/count are correct (for all
2257 *   inodes).
2258 *
2259 * The function reads whole indexing tree and all nodes, so it is pretty
2260 * heavy-weight. Returns zero if the file-system is consistent, %-EINVAL if
2261 * not, and a negative error code in case of failure.
2262 */
2263int dbg_check_filesystem(struct ubifs_info *c)
2264{
2265        int err;
2266        struct fsck_data fsckd;
2267
2268        if (!dbg_is_chk_fs(c))
2269                return 0;
2270
2271        fsckd.inodes = RB_ROOT;
2272        err = dbg_walk_index(c, check_leaf, NULL, &fsckd);
2273        if (err)
2274                goto out_free;
2275
2276        err = check_inodes(c, &fsckd);
2277        if (err)
2278                goto out_free;
2279
2280        free_inodes(&fsckd);
2281        return 0;
2282
2283out_free:
2284        ubifs_err(c, "file-system check failed with error %d", err);
2285        dump_stack();
2286        free_inodes(&fsckd);
2287        return err;
2288}
2289
2290/**
2291 * dbg_check_data_nodes_order - check that list of data nodes is sorted.
2292 * @c: UBIFS file-system description object
2293 * @head: the list of nodes ('struct ubifs_scan_node' objects)
2294 *
2295 * This function returns zero if the list of data nodes is sorted correctly,
2296 * and %-EINVAL if not.
2297 */
2298int dbg_check_data_nodes_order(struct ubifs_info *c, struct list_head *head)
2299{
2300        struct list_head *cur;
2301        struct ubifs_scan_node *sa, *sb;
2302
2303        if (!dbg_is_chk_gen(c))
2304                return 0;
2305
2306        for (cur = head->next; cur->next != head; cur = cur->next) {
2307                ino_t inuma, inumb;
2308                uint32_t blka, blkb;
2309
2310                cond_resched();
2311                sa = container_of(cur, struct ubifs_scan_node, list);
2312                sb = container_of(cur->next, struct ubifs_scan_node, list);
2313
2314                if (sa->type != UBIFS_DATA_NODE) {
2315                        ubifs_err(c, "bad node type %d", sa->type);
2316                        ubifs_dump_node(c, sa->node);
2317                        return -EINVAL;
2318                }
2319                if (sb->type != UBIFS_DATA_NODE) {
2320                        ubifs_err(c, "bad node type %d", sb->type);
2321                        ubifs_dump_node(c, sb->node);
2322                        return -EINVAL;
2323                }
2324
2325                inuma = key_inum(c, &sa->key);
2326                inumb = key_inum(c, &sb->key);
2327
2328                if (inuma < inumb)
2329                        continue;
2330                if (inuma > inumb) {
2331                        ubifs_err(c, "larger inum %lu goes before inum %lu",
2332                                  (unsigned long)inuma, (unsigned long)inumb);
2333                        goto error_dump;
2334                }
2335
2336                blka = key_block(c, &sa->key);
2337                blkb = key_block(c, &sb->key);
2338
2339                if (blka > blkb) {
2340                        ubifs_err(c, "larger block %u goes before %u", blka, blkb);
2341                        goto error_dump;
2342                }
2343                if (blka == blkb) {
2344                        ubifs_err(c, "two data nodes for the same block");
2345                        goto error_dump;
2346                }
2347        }
2348
2349        return 0;
2350
2351error_dump:
2352        ubifs_dump_node(c, sa->node);
2353        ubifs_dump_node(c, sb->node);
2354        return -EINVAL;
2355}
2356
2357/**
2358 * dbg_check_nondata_nodes_order - check that list of data nodes is sorted.
2359 * @c: UBIFS file-system description object
2360 * @head: the list of nodes ('struct ubifs_scan_node' objects)
2361 *
2362 * This function returns zero if the list of non-data nodes is sorted correctly,
2363 * and %-EINVAL if not.
2364 */
2365int dbg_check_nondata_nodes_order(struct ubifs_info *c, struct list_head *head)
2366{
2367        struct list_head *cur;
2368        struct ubifs_scan_node *sa, *sb;
2369
2370        if (!dbg_is_chk_gen(c))
2371                return 0;
2372
2373        for (cur = head->next; cur->next != head; cur = cur->next) {
2374                ino_t inuma, inumb;
2375                uint32_t hasha, hashb;
2376
2377                cond_resched();
2378                sa = container_of(cur, struct ubifs_scan_node, list);
2379                sb = container_of(cur->next, struct ubifs_scan_node, list);
2380
2381                if (sa->type != UBIFS_INO_NODE && sa->type != UBIFS_DENT_NODE &&
2382                    sa->type != UBIFS_XENT_NODE) {
2383                        ubifs_err(c, "bad node type %d", sa->type);
2384                        ubifs_dump_node(c, sa->node);
2385                        return -EINVAL;
2386                }
2387                if (sb->type != UBIFS_INO_NODE && sb->type != UBIFS_DENT_NODE &&
2388                    sb->type != UBIFS_XENT_NODE) {
2389                        ubifs_err(c, "bad node type %d", sb->type);
2390                        ubifs_dump_node(c, sb->node);
2391                        return -EINVAL;
2392                }
2393
2394                if (sa->type != UBIFS_INO_NODE && sb->type == UBIFS_INO_NODE) {
2395                        ubifs_err(c, "non-inode node goes before inode node");
2396                        goto error_dump;
2397                }
2398
2399                if (sa->type == UBIFS_INO_NODE && sb->type != UBIFS_INO_NODE)
2400                        continue;
2401
2402                if (sa->type == UBIFS_INO_NODE && sb->type == UBIFS_INO_NODE) {
2403                        /* Inode nodes are sorted in descending size order */
2404                        if (sa->len < sb->len) {
2405                                ubifs_err(c, "smaller inode node goes first");
2406                                goto error_dump;
2407                        }
2408                        continue;
2409                }
2410
2411                /*
2412                 * This is either a dentry or xentry, which should be sorted in
2413                 * ascending (parent ino, hash) order.
2414                 */
2415                inuma = key_inum(c, &sa->key);
2416                inumb = key_inum(c, &sb->key);
2417
2418                if (inuma < inumb)
2419                        continue;
2420                if (inuma > inumb) {
2421                        ubifs_err(c, "larger inum %lu goes before inum %lu",
2422                                  (unsigned long)inuma, (unsigned long)inumb);
2423                        goto error_dump;
2424                }
2425
2426                hasha = key_block(c, &sa->key);
2427                hashb = key_block(c, &sb->key);
2428
2429                if (hasha > hashb) {
2430                        ubifs_err(c, "larger hash %u goes before %u",
2431                                  hasha, hashb);
2432                        goto error_dump;
2433                }
2434        }
2435
2436        return 0;
2437
2438error_dump:
2439        ubifs_msg(c, "dumping first node");
2440        ubifs_dump_node(c, sa->node);
2441        ubifs_msg(c, "dumping second node");
2442        ubifs_dump_node(c, sb->node);
2443        return -EINVAL;
2444        return 0;
2445}
2446
2447static inline int chance(unsigned int n, unsigned int out_of)
2448{
2449        return !!((prandom_u32() % out_of) + 1 <= n);
2450
2451}
2452
2453static int power_cut_emulated(struct ubifs_info *c, int lnum, int write)
2454{
2455        struct ubifs_debug_info *d = c->dbg;
2456
2457        ubifs_assert(c, dbg_is_tst_rcvry(c));
2458
2459        if (!d->pc_cnt) {
2460                /* First call - decide delay to the power cut */
2461                if (chance(1, 2)) {
2462                        unsigned long delay;
2463
2464                        if (chance(1, 2)) {
2465                                d->pc_delay = 1;
2466                                /* Fail within 1 minute */
2467                                delay = prandom_u32() % 60000;
2468                                d->pc_timeout = jiffies;
2469                                d->pc_timeout += msecs_to_jiffies(delay);
2470                                ubifs_warn(c, "failing after %lums", delay);
2471                        } else {
2472                                d->pc_delay = 2;
2473                                delay = prandom_u32() % 10000;
2474                                /* Fail within 10000 operations */
2475                                d->pc_cnt_max = delay;
2476                                ubifs_warn(c, "failing after %lu calls", delay);
2477                        }
2478                }
2479
2480                d->pc_cnt += 1;
2481        }
2482
2483        /* Determine if failure delay has expired */
2484        if (d->pc_delay == 1 && time_before(jiffies, d->pc_timeout))
2485                        return 0;
2486        if (d->pc_delay == 2 && d->pc_cnt++ < d->pc_cnt_max)
2487                        return 0;
2488
2489        if (lnum == UBIFS_SB_LNUM) {
2490                if (write && chance(1, 2))
2491                        return 0;
2492                if (chance(19, 20))
2493                        return 0;
2494                ubifs_warn(c, "failing in super block LEB %d", lnum);
2495        } else if (lnum == UBIFS_MST_LNUM || lnum == UBIFS_MST_LNUM + 1) {
2496                if (chance(19, 20))
2497                        return 0;
2498                ubifs_warn(c, "failing in master LEB %d", lnum);
2499        } else if (lnum >= UBIFS_LOG_LNUM && lnum <= c->log_last) {
2500                if (write && chance(99, 100))
2501                        return 0;
2502                if (chance(399, 400))
2503                        return 0;
2504                ubifs_warn(c, "failing in log LEB %d", lnum);
2505        } else if (lnum >= c->lpt_first && lnum <= c->lpt_last) {
2506                if (write && chance(7, 8))
2507                        return 0;
2508                if (chance(19, 20))
2509                        return 0;
2510                ubifs_warn(c, "failing in LPT LEB %d", lnum);
2511        } else if (lnum >= c->orph_first && lnum <= c->orph_last) {
2512                if (write && chance(1, 2))
2513                        return 0;
2514                if (chance(9, 10))
2515                        return 0;
2516                ubifs_warn(c, "failing in orphan LEB %d", lnum);
2517        } else if (lnum == c->ihead_lnum) {
2518                if (chance(99, 100))
2519                        return 0;
2520                ubifs_warn(c, "failing in index head LEB %d", lnum);
2521        } else if (c->jheads && lnum == c->jheads[GCHD].wbuf.lnum) {
2522                if (chance(9, 10))
2523                        return 0;
2524                ubifs_warn(c, "failing in GC head LEB %d", lnum);
2525        } else if (write && !RB_EMPTY_ROOT(&c->buds) &&
2526                   !ubifs_search_bud(c, lnum)) {
2527                if (chance(19, 20))
2528                        return 0;
2529                ubifs_warn(c, "failing in non-bud LEB %d", lnum);
2530        } else if (c->cmt_state == COMMIT_RUNNING_BACKGROUND ||
2531                   c->cmt_state == COMMIT_RUNNING_REQUIRED) {
2532                if (chance(999, 1000))
2533                        return 0;
2534                ubifs_warn(c, "failing in bud LEB %d commit running", lnum);
2535        } else {
2536                if (chance(9999, 10000))
2537                        return 0;
2538                ubifs_warn(c, "failing in bud LEB %d commit not running", lnum);
2539        }
2540
2541        d->pc_happened = 1;
2542        ubifs_warn(c, "========== Power cut emulated ==========");
2543        dump_stack();
2544        return 1;
2545}
2546
2547static int corrupt_data(const struct ubifs_info *c, const void *buf,
2548                        unsigned int len)
2549{
2550        unsigned int from, to, ffs = chance(1, 2);
2551        unsigned char *p = (void *)buf;
2552
2553        from = prandom_u32() % len;
2554        /* Corruption span max to end of write unit */
2555        to = min(len, ALIGN(from + 1, c->max_write_size));
2556
2557        ubifs_warn(c, "filled bytes %u-%u with %s", from, to - 1,
2558                   ffs ? "0xFFs" : "random data");
2559
2560        if (ffs)
2561                memset(p + from, 0xFF, to - from);
2562        else
2563                prandom_bytes(p + from, to - from);
2564
2565        return to;
2566}
2567
2568int dbg_leb_write(struct ubifs_info *c, int lnum, const void *buf,
2569                  int offs, int len)
2570{
2571        int err, failing;
2572
2573        if (dbg_is_power_cut(c))
2574                return -EROFS;
2575
2576        failing = power_cut_emulated(c, lnum, 1);
2577        if (failing) {
2578                len = corrupt_data(c, buf, len);
2579                ubifs_warn(c, "actually write %d bytes to LEB %d:%d (the buffer was corrupted)",
2580                           len, lnum, offs);
2581        }
2582        err = ubi_leb_write(c->ubi, lnum, buf, offs, len);
2583        if (err)
2584                return err;
2585        if (failing)
2586                return -EROFS;
2587        return 0;
2588}
2589
2590int dbg_leb_change(struct ubifs_info *c, int lnum, const void *buf,
2591                   int len)
2592{
2593        int err;
2594
2595        if (dbg_is_power_cut(c))
2596                return -EROFS;
2597        if (power_cut_emulated(c, lnum, 1))
2598                return -EROFS;
2599        err = ubi_leb_change(c->ubi, lnum, buf, len);
2600        if (err)
2601                return err;
2602        if (power_cut_emulated(c, lnum, 1))
2603                return -EROFS;
2604        return 0;
2605}
2606
2607int dbg_leb_unmap(struct ubifs_info *c, int lnum)
2608{
2609        int err;
2610
2611        if (dbg_is_power_cut(c))
2612                return -EROFS;
2613        if (power_cut_emulated(c, lnum, 0))
2614                return -EROFS;
2615        err = ubi_leb_unmap(c->ubi, lnum);
2616        if (err)
2617                return err;
2618        if (power_cut_emulated(c, lnum, 0))
2619                return -EROFS;
2620        return 0;
2621}
2622
2623int dbg_leb_map(struct ubifs_info *c, int lnum)
2624{
2625        int err;
2626
2627        if (dbg_is_power_cut(c))
2628                return -EROFS;
2629        if (power_cut_emulated(c, lnum, 0))
2630                return -EROFS;
2631        err = ubi_leb_map(c->ubi, lnum);
2632        if (err)
2633                return err;
2634        if (power_cut_emulated(c, lnum, 0))
2635                return -EROFS;
2636        return 0;
2637}
2638
2639/*
2640 * Root directory for UBIFS stuff in debugfs. Contains sub-directories which
2641 * contain the stuff specific to particular file-system mounts.
2642 */
2643static struct dentry *dfs_rootdir;
2644
2645static int dfs_file_open(struct inode *inode, struct file *file)
2646{
2647        file->private_data = inode->i_private;
2648        return nonseekable_open(inode, file);
2649}
2650
2651/**
2652 * provide_user_output - provide output to the user reading a debugfs file.
2653 * @val: boolean value for the answer
2654 * @u: the buffer to store the answer at
2655 * @count: size of the buffer
2656 * @ppos: position in the @u output buffer
2657 *
2658 * This is a simple helper function which stores @val boolean value in the user
2659 * buffer when the user reads one of UBIFS debugfs files. Returns amount of
2660 * bytes written to @u in case of success and a negative error code in case of
2661 * failure.
2662 */
2663static int provide_user_output(int val, char __user *u, size_t count,
2664                               loff_t *ppos)
2665{
2666        char buf[3];
2667
2668        if (val)
2669                buf[0] = '1';
2670        else
2671                buf[0] = '0';
2672        buf[1] = '\n';
2673        buf[2] = 0x00;
2674
2675        return simple_read_from_buffer(u, count, ppos, buf, 2);
2676}
2677
2678static ssize_t dfs_file_read(struct file *file, char __user *u, size_t count,
2679                             loff_t *ppos)
2680{
2681        struct dentry *dent = file->f_path.dentry;
2682        struct ubifs_info *c = file->private_data;
2683        struct ubifs_debug_info *d = c->dbg;
2684        int val;
2685
2686        if (dent == d->dfs_chk_gen)
2687                val = d->chk_gen;
2688        else if (dent == d->dfs_chk_index)
2689                val = d->chk_index;
2690        else if (dent == d->dfs_chk_orph)
2691                val = d->chk_orph;
2692        else if (dent == d->dfs_chk_lprops)
2693                val = d->chk_lprops;
2694        else if (dent == d->dfs_chk_fs)
2695                val = d->chk_fs;
2696        else if (dent == d->dfs_tst_rcvry)
2697                val = d->tst_rcvry;
2698        else if (dent == d->dfs_ro_error)
2699                val = c->ro_error;
2700        else
2701                return -EINVAL;
2702
2703        return provide_user_output(val, u, count, ppos);
2704}
2705
2706/**
2707 * interpret_user_input - interpret user debugfs file input.
2708 * @u: user-provided buffer with the input
2709 * @count: buffer size
2710 *
2711 * This is a helper function which interpret user input to a boolean UBIFS
2712 * debugfs file. Returns %0 or %1 in case of success and a negative error code
2713 * in case of failure.
2714 */
2715static int interpret_user_input(const char __user *u, size_t count)
2716{
2717        size_t buf_size;
2718        char buf[8];
2719
2720        buf_size = min_t(size_t, count, (sizeof(buf) - 1));
2721        if (copy_from_user(buf, u, buf_size))
2722                return -EFAULT;
2723
2724        if (buf[0] == '1')
2725                return 1;
2726        else if (buf[0] == '0')
2727                return 0;
2728
2729        return -EINVAL;
2730}
2731
2732static ssize_t dfs_file_write(struct file *file, const char __user *u,
2733                              size_t count, loff_t *ppos)
2734{
2735        struct ubifs_info *c = file->private_data;
2736        struct ubifs_debug_info *d = c->dbg;
2737        struct dentry *dent = file->f_path.dentry;
2738        int val;
2739
2740        /*
2741         * TODO: this is racy - the file-system might have already been
2742         * unmounted and we'd oops in this case. The plan is to fix it with
2743         * help of 'iterate_supers_type()' which we should have in v3.0: when
2744         * a debugfs opened, we rember FS's UUID in file->private_data. Then
2745         * whenever we access the FS via a debugfs file, we iterate all UBIFS
2746         * superblocks and fine the one with the same UUID, and take the
2747         * locking right.
2748         *
2749         * The other way to go suggested by Al Viro is to create a separate
2750         * 'ubifs-debug' file-system instead.
2751         */
2752        if (file->f_path.dentry == d->dfs_dump_lprops) {
2753                ubifs_dump_lprops(c);
2754                return count;
2755        }
2756        if (file->f_path.dentry == d->dfs_dump_budg) {
2757                ubifs_dump_budg(c, &c->bi);
2758                return count;
2759        }
2760        if (file->f_path.dentry == d->dfs_dump_tnc) {
2761                mutex_lock(&c->tnc_mutex);
2762                ubifs_dump_tnc(c);
2763                mutex_unlock(&c->tnc_mutex);
2764                return count;
2765        }
2766
2767        val = interpret_user_input(u, count);
2768        if (val < 0)
2769                return val;
2770
2771        if (dent == d->dfs_chk_gen)
2772                d->chk_gen = val;
2773        else if (dent == d->dfs_chk_index)
2774                d->chk_index = val;
2775        else if (dent == d->dfs_chk_orph)
2776                d->chk_orph = val;
2777        else if (dent == d->dfs_chk_lprops)
2778                d->chk_lprops = val;
2779        else if (dent == d->dfs_chk_fs)
2780                d->chk_fs = val;
2781        else if (dent == d->dfs_tst_rcvry)
2782                d->tst_rcvry = val;
2783        else if (dent == d->dfs_ro_error)
2784                c->ro_error = !!val;
2785        else
2786                return -EINVAL;
2787
2788        return count;
2789}
2790
2791static const struct file_operations dfs_fops = {
2792        .open = dfs_file_open,
2793        .read = dfs_file_read,
2794        .write = dfs_file_write,
2795        .owner = THIS_MODULE,
2796        .llseek = no_llseek,
2797};
2798
2799/**
2800 * dbg_debugfs_init_fs - initialize debugfs for UBIFS instance.
2801 * @c: UBIFS file-system description object
2802 *
2803 * This function creates all debugfs files for this instance of UBIFS.
2804 *
2805 * Note, the only reason we have not merged this function with the
2806 * 'ubifs_debugging_init()' function is because it is better to initialize
2807 * debugfs interfaces at the very end of the mount process, and remove them at
2808 * the very beginning of the mount process.
2809 */
2810void dbg_debugfs_init_fs(struct ubifs_info *c)
2811{
2812        int n;
2813        const char *fname;
2814        struct ubifs_debug_info *d = c->dbg;
2815
2816        n = snprintf(d->dfs_dir_name, UBIFS_DFS_DIR_LEN + 1, UBIFS_DFS_DIR_NAME,
2817                     c->vi.ubi_num, c->vi.vol_id);
2818        if (n == UBIFS_DFS_DIR_LEN) {
2819                /* The array size is too small */
2820                fname = UBIFS_DFS_DIR_NAME;
2821                return;
2822        }
2823
2824        fname = d->dfs_dir_name;
2825        d->dfs_dir = debugfs_create_dir(fname, dfs_rootdir);
2826
2827        fname = "dump_lprops";
2828        d->dfs_dump_lprops = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c,
2829                                                 &dfs_fops);
2830
2831        fname = "dump_budg";
2832        d->dfs_dump_budg = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c,
2833                                               &dfs_fops);
2834
2835        fname = "dump_tnc";
2836        d->dfs_dump_tnc = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c,
2837                                              &dfs_fops);
2838
2839        fname = "chk_general";
2840        d->dfs_chk_gen = debugfs_create_file(fname, S_IRUSR | S_IWUSR,
2841                                             d->dfs_dir, c, &dfs_fops);
2842
2843        fname = "chk_index";
2844        d->dfs_chk_index = debugfs_create_file(fname, S_IRUSR | S_IWUSR,
2845                                               d->dfs_dir, c, &dfs_fops);
2846
2847        fname = "chk_orphans";
2848        d->dfs_chk_orph = debugfs_create_file(fname, S_IRUSR | S_IWUSR,
2849                                              d->dfs_dir, c, &dfs_fops);
2850
2851        fname = "chk_lprops";
2852        d->dfs_chk_lprops = debugfs_create_file(fname, S_IRUSR | S_IWUSR,
2853                                                d->dfs_dir, c, &dfs_fops);
2854
2855        fname = "chk_fs";
2856        d->dfs_chk_fs = debugfs_create_file(fname, S_IRUSR | S_IWUSR,
2857                                            d->dfs_dir, c, &dfs_fops);
2858
2859        fname = "tst_recovery";
2860        d->dfs_tst_rcvry = debugfs_create_file(fname, S_IRUSR | S_IWUSR,
2861                                               d->dfs_dir, c, &dfs_fops);
2862
2863        fname = "ro_error";
2864        d->dfs_ro_error = debugfs_create_file(fname, S_IRUSR | S_IWUSR,
2865                                              d->dfs_dir, c, &dfs_fops);
2866}
2867
2868/**
2869 * dbg_debugfs_exit_fs - remove all debugfs files.
2870 * @c: UBIFS file-system description object
2871 */
2872void dbg_debugfs_exit_fs(struct ubifs_info *c)
2873{
2874        debugfs_remove_recursive(c->dbg->dfs_dir);
2875}
2876
2877struct ubifs_global_debug_info ubifs_dbg;
2878
2879static struct dentry *dfs_chk_gen;
2880static struct dentry *dfs_chk_index;
2881static struct dentry *dfs_chk_orph;
2882static struct dentry *dfs_chk_lprops;
2883static struct dentry *dfs_chk_fs;
2884static struct dentry *dfs_tst_rcvry;
2885
2886static ssize_t dfs_global_file_read(struct file *file, char __user *u,
2887                                    size_t count, loff_t *ppos)
2888{
2889        struct dentry *dent = file->f_path.dentry;
2890        int val;
2891
2892        if (dent == dfs_chk_gen)
2893                val = ubifs_dbg.chk_gen;
2894        else if (dent == dfs_chk_index)
2895                val = ubifs_dbg.chk_index;
2896        else if (dent == dfs_chk_orph)
2897                val = ubifs_dbg.chk_orph;
2898        else if (dent == dfs_chk_lprops)
2899                val = ubifs_dbg.chk_lprops;
2900        else if (dent == dfs_chk_fs)
2901                val = ubifs_dbg.chk_fs;
2902        else if (dent == dfs_tst_rcvry)
2903                val = ubifs_dbg.tst_rcvry;
2904        else
2905                return -EINVAL;
2906
2907        return provide_user_output(val, u, count, ppos);
2908}
2909
2910static ssize_t dfs_global_file_write(struct file *file, const char __user *u,
2911                                     size_t count, loff_t *ppos)
2912{
2913        struct dentry *dent = file->f_path.dentry;
2914        int val;
2915
2916        val = interpret_user_input(u, count);
2917        if (val < 0)
2918                return val;
2919
2920        if (dent == dfs_chk_gen)
2921                ubifs_dbg.chk_gen = val;
2922        else if (dent == dfs_chk_index)
2923                ubifs_dbg.chk_index = val;
2924        else if (dent == dfs_chk_orph)
2925                ubifs_dbg.chk_orph = val;
2926        else if (dent == dfs_chk_lprops)
2927                ubifs_dbg.chk_lprops = val;
2928        else if (dent == dfs_chk_fs)
2929                ubifs_dbg.chk_fs = val;
2930        else if (dent == dfs_tst_rcvry)
2931                ubifs_dbg.tst_rcvry = val;
2932        else
2933                return -EINVAL;
2934
2935        return count;
2936}
2937
2938static const struct file_operations dfs_global_fops = {
2939        .read = dfs_global_file_read,
2940        .write = dfs_global_file_write,
2941        .owner = THIS_MODULE,
2942        .llseek = no_llseek,
2943};
2944
2945/**
2946 * dbg_debugfs_init - initialize debugfs file-system.
2947 *
2948 * UBIFS uses debugfs file-system to expose various debugging knobs to
2949 * user-space. This function creates "ubifs" directory in the debugfs
2950 * file-system.
2951 */
2952void dbg_debugfs_init(void)
2953{
2954        const char *fname;
2955
2956        fname = "ubifs";
2957        dfs_rootdir = debugfs_create_dir(fname, NULL);
2958
2959        fname = "chk_general";
2960        dfs_chk_gen = debugfs_create_file(fname, S_IRUSR | S_IWUSR, dfs_rootdir,
2961                                          NULL, &dfs_global_fops);
2962
2963        fname = "chk_index";
2964        dfs_chk_index = debugfs_create_file(fname, S_IRUSR | S_IWUSR,
2965                                            dfs_rootdir, NULL, &dfs_global_fops);
2966
2967        fname = "chk_orphans";
2968        dfs_chk_orph = debugfs_create_file(fname, S_IRUSR | S_IWUSR,
2969                                           dfs_rootdir, NULL, &dfs_global_fops);
2970
2971        fname = "chk_lprops";
2972        dfs_chk_lprops = debugfs_create_file(fname, S_IRUSR | S_IWUSR,
2973                                             dfs_rootdir, NULL, &dfs_global_fops);
2974
2975        fname = "chk_fs";
2976        dfs_chk_fs = debugfs_create_file(fname, S_IRUSR | S_IWUSR, dfs_rootdir,
2977                                         NULL, &dfs_global_fops);
2978
2979        fname = "tst_recovery";
2980        dfs_tst_rcvry = debugfs_create_file(fname, S_IRUSR | S_IWUSR,
2981                                            dfs_rootdir, NULL, &dfs_global_fops);
2982}
2983
2984/**
2985 * dbg_debugfs_exit - remove the "ubifs" directory from debugfs file-system.
2986 */
2987void dbg_debugfs_exit(void)
2988{
2989        debugfs_remove_recursive(dfs_rootdir);
2990}
2991
2992void ubifs_assert_failed(struct ubifs_info *c, const char *expr,
2993                         const char *file, int line)
2994{
2995        ubifs_err(c, "UBIFS assert failed: %s, in %s:%u", expr, file, line);
2996
2997        switch (c->assert_action) {
2998                case ASSACT_PANIC:
2999                BUG();
3000                break;
3001
3002                case ASSACT_RO:
3003                ubifs_ro_mode(c, -EINVAL);
3004                break;
3005
3006                case ASSACT_REPORT:
3007                default:
3008                dump_stack();
3009                break;
3010
3011        }
3012}
3013
3014/**
3015 * ubifs_debugging_init - initialize UBIFS debugging.
3016 * @c: UBIFS file-system description object
3017 *
3018 * This function initializes debugging-related data for the file system.
3019 * Returns zero in case of success and a negative error code in case of
3020 * failure.
3021 */
3022int ubifs_debugging_init(struct ubifs_info *c)
3023{
3024        c->dbg = kzalloc(sizeof(struct ubifs_debug_info), GFP_KERNEL);
3025        if (!c->dbg)
3026                return -ENOMEM;
3027
3028        return 0;
3029}
3030
3031/**
3032 * ubifs_debugging_exit - free debugging data.
3033 * @c: UBIFS file-system description object
3034 */
3035void ubifs_debugging_exit(struct ubifs_info *c)
3036{
3037        kfree(c->dbg);
3038}
3039