Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * NILFS module and super block management.
0004  *
0005  * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
0006  *
0007  * Written by Ryusuke Konishi.
0008  */
0009 /*
0010  *  linux/fs/ext2/super.c
0011  *
0012  * Copyright (C) 1992, 1993, 1994, 1995
0013  * Remy Card (card@masi.ibp.fr)
0014  * Laboratoire MASI - Institut Blaise Pascal
0015  * Universite Pierre et Marie Curie (Paris VI)
0016  *
0017  *  from
0018  *
0019  *  linux/fs/minix/inode.c
0020  *
0021  *  Copyright (C) 1991, 1992  Linus Torvalds
0022  *
0023  *  Big-endian to little-endian byte-swapping/bitmaps by
0024  *        David S. Miller (davem@caip.rutgers.edu), 1995
0025  */
0026 
0027 #include <linux/module.h>
0028 #include <linux/string.h>
0029 #include <linux/slab.h>
0030 #include <linux/init.h>
0031 #include <linux/blkdev.h>
0032 #include <linux/parser.h>
0033 #include <linux/crc32.h>
0034 #include <linux/vfs.h>
0035 #include <linux/writeback.h>
0036 #include <linux/seq_file.h>
0037 #include <linux/mount.h>
0038 #include "nilfs.h"
0039 #include "export.h"
0040 #include "mdt.h"
0041 #include "alloc.h"
0042 #include "btree.h"
0043 #include "btnode.h"
0044 #include "page.h"
0045 #include "cpfile.h"
0046 #include "sufile.h" /* nilfs_sufile_resize(), nilfs_sufile_set_alloc_range() */
0047 #include "ifile.h"
0048 #include "dat.h"
0049 #include "segment.h"
0050 #include "segbuf.h"
0051 
0052 MODULE_AUTHOR("NTT Corp.");
0053 MODULE_DESCRIPTION("A New Implementation of the Log-structured Filesystem "
0054            "(NILFS)");
0055 MODULE_LICENSE("GPL");
0056 
0057 static struct kmem_cache *nilfs_inode_cachep;
0058 struct kmem_cache *nilfs_transaction_cachep;
0059 struct kmem_cache *nilfs_segbuf_cachep;
0060 struct kmem_cache *nilfs_btree_path_cache;
0061 
0062 static int nilfs_setup_super(struct super_block *sb, int is_mount);
0063 static int nilfs_remount(struct super_block *sb, int *flags, char *data);
0064 
0065 void __nilfs_msg(struct super_block *sb, const char *fmt, ...)
0066 {
0067     struct va_format vaf;
0068     va_list args;
0069     int level;
0070 
0071     va_start(args, fmt);
0072 
0073     level = printk_get_level(fmt);
0074     vaf.fmt = printk_skip_level(fmt);
0075     vaf.va = &args;
0076 
0077     if (sb)
0078         printk("%c%cNILFS (%s): %pV\n",
0079                KERN_SOH_ASCII, level, sb->s_id, &vaf);
0080     else
0081         printk("%c%cNILFS: %pV\n",
0082                KERN_SOH_ASCII, level, &vaf);
0083 
0084     va_end(args);
0085 }
0086 
0087 static void nilfs_set_error(struct super_block *sb)
0088 {
0089     struct the_nilfs *nilfs = sb->s_fs_info;
0090     struct nilfs_super_block **sbp;
0091 
0092     down_write(&nilfs->ns_sem);
0093     if (!(nilfs->ns_mount_state & NILFS_ERROR_FS)) {
0094         nilfs->ns_mount_state |= NILFS_ERROR_FS;
0095         sbp = nilfs_prepare_super(sb, 0);
0096         if (likely(sbp)) {
0097             sbp[0]->s_state |= cpu_to_le16(NILFS_ERROR_FS);
0098             if (sbp[1])
0099                 sbp[1]->s_state |= cpu_to_le16(NILFS_ERROR_FS);
0100             nilfs_commit_super(sb, NILFS_SB_COMMIT_ALL);
0101         }
0102     }
0103     up_write(&nilfs->ns_sem);
0104 }
0105 
0106 /**
0107  * __nilfs_error() - report failure condition on a filesystem
0108  *
0109  * __nilfs_error() sets an ERROR_FS flag on the superblock as well as
0110  * reporting an error message.  This function should be called when
0111  * NILFS detects incoherences or defects of meta data on disk.
0112  *
0113  * This implements the body of nilfs_error() macro.  Normally,
0114  * nilfs_error() should be used.  As for sustainable errors such as a
0115  * single-shot I/O error, nilfs_err() should be used instead.
0116  *
0117  * Callers should not add a trailing newline since this will do it.
0118  */
0119 void __nilfs_error(struct super_block *sb, const char *function,
0120            const char *fmt, ...)
0121 {
0122     struct the_nilfs *nilfs = sb->s_fs_info;
0123     struct va_format vaf;
0124     va_list args;
0125 
0126     va_start(args, fmt);
0127 
0128     vaf.fmt = fmt;
0129     vaf.va = &args;
0130 
0131     printk(KERN_CRIT "NILFS error (device %s): %s: %pV\n",
0132            sb->s_id, function, &vaf);
0133 
0134     va_end(args);
0135 
0136     if (!sb_rdonly(sb)) {
0137         nilfs_set_error(sb);
0138 
0139         if (nilfs_test_opt(nilfs, ERRORS_RO)) {
0140             printk(KERN_CRIT "Remounting filesystem read-only\n");
0141             sb->s_flags |= SB_RDONLY;
0142         }
0143     }
0144 
0145     if (nilfs_test_opt(nilfs, ERRORS_PANIC))
0146         panic("NILFS (device %s): panic forced after error\n",
0147               sb->s_id);
0148 }
0149 
0150 struct inode *nilfs_alloc_inode(struct super_block *sb)
0151 {
0152     struct nilfs_inode_info *ii;
0153 
0154     ii = alloc_inode_sb(sb, nilfs_inode_cachep, GFP_NOFS);
0155     if (!ii)
0156         return NULL;
0157     ii->i_bh = NULL;
0158     ii->i_state = 0;
0159     ii->i_cno = 0;
0160     ii->i_assoc_inode = NULL;
0161     ii->i_bmap = &ii->i_bmap_data;
0162     return &ii->vfs_inode;
0163 }
0164 
0165 static void nilfs_free_inode(struct inode *inode)
0166 {
0167     if (nilfs_is_metadata_file_inode(inode))
0168         nilfs_mdt_destroy(inode);
0169 
0170     kmem_cache_free(nilfs_inode_cachep, NILFS_I(inode));
0171 }
0172 
0173 static int nilfs_sync_super(struct super_block *sb, int flag)
0174 {
0175     struct the_nilfs *nilfs = sb->s_fs_info;
0176     int err;
0177 
0178  retry:
0179     set_buffer_dirty(nilfs->ns_sbh[0]);
0180     if (nilfs_test_opt(nilfs, BARRIER)) {
0181         err = __sync_dirty_buffer(nilfs->ns_sbh[0],
0182                       REQ_SYNC | REQ_PREFLUSH | REQ_FUA);
0183     } else {
0184         err = sync_dirty_buffer(nilfs->ns_sbh[0]);
0185     }
0186 
0187     if (unlikely(err)) {
0188         nilfs_err(sb, "unable to write superblock: err=%d", err);
0189         if (err == -EIO && nilfs->ns_sbh[1]) {
0190             /*
0191              * sbp[0] points to newer log than sbp[1],
0192              * so copy sbp[0] to sbp[1] to take over sbp[0].
0193              */
0194             memcpy(nilfs->ns_sbp[1], nilfs->ns_sbp[0],
0195                    nilfs->ns_sbsize);
0196             nilfs_fall_back_super_block(nilfs);
0197             goto retry;
0198         }
0199     } else {
0200         struct nilfs_super_block *sbp = nilfs->ns_sbp[0];
0201 
0202         nilfs->ns_sbwcount++;
0203 
0204         /*
0205          * The latest segment becomes trailable from the position
0206          * written in superblock.
0207          */
0208         clear_nilfs_discontinued(nilfs);
0209 
0210         /* update GC protection for recent segments */
0211         if (nilfs->ns_sbh[1]) {
0212             if (flag == NILFS_SB_COMMIT_ALL) {
0213                 set_buffer_dirty(nilfs->ns_sbh[1]);
0214                 if (sync_dirty_buffer(nilfs->ns_sbh[1]) < 0)
0215                     goto out;
0216             }
0217             if (le64_to_cpu(nilfs->ns_sbp[1]->s_last_cno) <
0218                 le64_to_cpu(nilfs->ns_sbp[0]->s_last_cno))
0219                 sbp = nilfs->ns_sbp[1];
0220         }
0221 
0222         spin_lock(&nilfs->ns_last_segment_lock);
0223         nilfs->ns_prot_seq = le64_to_cpu(sbp->s_last_seq);
0224         spin_unlock(&nilfs->ns_last_segment_lock);
0225     }
0226  out:
0227     return err;
0228 }
0229 
0230 void nilfs_set_log_cursor(struct nilfs_super_block *sbp,
0231               struct the_nilfs *nilfs)
0232 {
0233     sector_t nfreeblocks;
0234 
0235     /* nilfs->ns_sem must be locked by the caller. */
0236     nilfs_count_free_blocks(nilfs, &nfreeblocks);
0237     sbp->s_free_blocks_count = cpu_to_le64(nfreeblocks);
0238 
0239     spin_lock(&nilfs->ns_last_segment_lock);
0240     sbp->s_last_seq = cpu_to_le64(nilfs->ns_last_seq);
0241     sbp->s_last_pseg = cpu_to_le64(nilfs->ns_last_pseg);
0242     sbp->s_last_cno = cpu_to_le64(nilfs->ns_last_cno);
0243     spin_unlock(&nilfs->ns_last_segment_lock);
0244 }
0245 
0246 struct nilfs_super_block **nilfs_prepare_super(struct super_block *sb,
0247                            int flip)
0248 {
0249     struct the_nilfs *nilfs = sb->s_fs_info;
0250     struct nilfs_super_block **sbp = nilfs->ns_sbp;
0251 
0252     /* nilfs->ns_sem must be locked by the caller. */
0253     if (sbp[0]->s_magic != cpu_to_le16(NILFS_SUPER_MAGIC)) {
0254         if (sbp[1] &&
0255             sbp[1]->s_magic == cpu_to_le16(NILFS_SUPER_MAGIC)) {
0256             memcpy(sbp[0], sbp[1], nilfs->ns_sbsize);
0257         } else {
0258             nilfs_crit(sb, "superblock broke");
0259             return NULL;
0260         }
0261     } else if (sbp[1] &&
0262            sbp[1]->s_magic != cpu_to_le16(NILFS_SUPER_MAGIC)) {
0263         memcpy(sbp[1], sbp[0], nilfs->ns_sbsize);
0264     }
0265 
0266     if (flip && sbp[1])
0267         nilfs_swap_super_block(nilfs);
0268 
0269     return sbp;
0270 }
0271 
0272 int nilfs_commit_super(struct super_block *sb, int flag)
0273 {
0274     struct the_nilfs *nilfs = sb->s_fs_info;
0275     struct nilfs_super_block **sbp = nilfs->ns_sbp;
0276     time64_t t;
0277 
0278     /* nilfs->ns_sem must be locked by the caller. */
0279     t = ktime_get_real_seconds();
0280     nilfs->ns_sbwtime = t;
0281     sbp[0]->s_wtime = cpu_to_le64(t);
0282     sbp[0]->s_sum = 0;
0283     sbp[0]->s_sum = cpu_to_le32(crc32_le(nilfs->ns_crc_seed,
0284                          (unsigned char *)sbp[0],
0285                          nilfs->ns_sbsize));
0286     if (flag == NILFS_SB_COMMIT_ALL && sbp[1]) {
0287         sbp[1]->s_wtime = sbp[0]->s_wtime;
0288         sbp[1]->s_sum = 0;
0289         sbp[1]->s_sum = cpu_to_le32(crc32_le(nilfs->ns_crc_seed,
0290                         (unsigned char *)sbp[1],
0291                         nilfs->ns_sbsize));
0292     }
0293     clear_nilfs_sb_dirty(nilfs);
0294     nilfs->ns_flushed_device = 1;
0295     /* make sure store to ns_flushed_device cannot be reordered */
0296     smp_wmb();
0297     return nilfs_sync_super(sb, flag);
0298 }
0299 
0300 /**
0301  * nilfs_cleanup_super() - write filesystem state for cleanup
0302  * @sb: super block instance to be unmounted or degraded to read-only
0303  *
0304  * This function restores state flags in the on-disk super block.
0305  * This will set "clean" flag (i.e. NILFS_VALID_FS) unless the
0306  * filesystem was not clean previously.
0307  */
0308 int nilfs_cleanup_super(struct super_block *sb)
0309 {
0310     struct the_nilfs *nilfs = sb->s_fs_info;
0311     struct nilfs_super_block **sbp;
0312     int flag = NILFS_SB_COMMIT;
0313     int ret = -EIO;
0314 
0315     sbp = nilfs_prepare_super(sb, 0);
0316     if (sbp) {
0317         sbp[0]->s_state = cpu_to_le16(nilfs->ns_mount_state);
0318         nilfs_set_log_cursor(sbp[0], nilfs);
0319         if (sbp[1] && sbp[0]->s_last_cno == sbp[1]->s_last_cno) {
0320             /*
0321              * make the "clean" flag also to the opposite
0322              * super block if both super blocks point to
0323              * the same checkpoint.
0324              */
0325             sbp[1]->s_state = sbp[0]->s_state;
0326             flag = NILFS_SB_COMMIT_ALL;
0327         }
0328         ret = nilfs_commit_super(sb, flag);
0329     }
0330     return ret;
0331 }
0332 
0333 /**
0334  * nilfs_move_2nd_super - relocate secondary super block
0335  * @sb: super block instance
0336  * @sb2off: new offset of the secondary super block (in bytes)
0337  */
0338 static int nilfs_move_2nd_super(struct super_block *sb, loff_t sb2off)
0339 {
0340     struct the_nilfs *nilfs = sb->s_fs_info;
0341     struct buffer_head *nsbh;
0342     struct nilfs_super_block *nsbp;
0343     sector_t blocknr, newblocknr;
0344     unsigned long offset;
0345     int sb2i;  /* array index of the secondary superblock */
0346     int ret = 0;
0347 
0348     /* nilfs->ns_sem must be locked by the caller. */
0349     if (nilfs->ns_sbh[1] &&
0350         nilfs->ns_sbh[1]->b_blocknr > nilfs->ns_first_data_block) {
0351         sb2i = 1;
0352         blocknr = nilfs->ns_sbh[1]->b_blocknr;
0353     } else if (nilfs->ns_sbh[0]->b_blocknr > nilfs->ns_first_data_block) {
0354         sb2i = 0;
0355         blocknr = nilfs->ns_sbh[0]->b_blocknr;
0356     } else {
0357         sb2i = -1;
0358         blocknr = 0;
0359     }
0360     if (sb2i >= 0 && (u64)blocknr << nilfs->ns_blocksize_bits == sb2off)
0361         goto out;  /* super block location is unchanged */
0362 
0363     /* Get new super block buffer */
0364     newblocknr = sb2off >> nilfs->ns_blocksize_bits;
0365     offset = sb2off & (nilfs->ns_blocksize - 1);
0366     nsbh = sb_getblk(sb, newblocknr);
0367     if (!nsbh) {
0368         nilfs_warn(sb,
0369                "unable to move secondary superblock to block %llu",
0370                (unsigned long long)newblocknr);
0371         ret = -EIO;
0372         goto out;
0373     }
0374     nsbp = (void *)nsbh->b_data + offset;
0375     memset(nsbp, 0, nilfs->ns_blocksize);
0376 
0377     if (sb2i >= 0) {
0378         memcpy(nsbp, nilfs->ns_sbp[sb2i], nilfs->ns_sbsize);
0379         brelse(nilfs->ns_sbh[sb2i]);
0380         nilfs->ns_sbh[sb2i] = nsbh;
0381         nilfs->ns_sbp[sb2i] = nsbp;
0382     } else if (nilfs->ns_sbh[0]->b_blocknr < nilfs->ns_first_data_block) {
0383         /* secondary super block will be restored to index 1 */
0384         nilfs->ns_sbh[1] = nsbh;
0385         nilfs->ns_sbp[1] = nsbp;
0386     } else {
0387         brelse(nsbh);
0388     }
0389 out:
0390     return ret;
0391 }
0392 
0393 /**
0394  * nilfs_resize_fs - resize the filesystem
0395  * @sb: super block instance
0396  * @newsize: new size of the filesystem (in bytes)
0397  */
0398 int nilfs_resize_fs(struct super_block *sb, __u64 newsize)
0399 {
0400     struct the_nilfs *nilfs = sb->s_fs_info;
0401     struct nilfs_super_block **sbp;
0402     __u64 devsize, newnsegs;
0403     loff_t sb2off;
0404     int ret;
0405 
0406     ret = -ERANGE;
0407     devsize = bdev_nr_bytes(sb->s_bdev);
0408     if (newsize > devsize)
0409         goto out;
0410 
0411     /*
0412      * Write lock is required to protect some functions depending
0413      * on the number of segments, the number of reserved segments,
0414      * and so forth.
0415      */
0416     down_write(&nilfs->ns_segctor_sem);
0417 
0418     sb2off = NILFS_SB2_OFFSET_BYTES(newsize);
0419     newnsegs = sb2off >> nilfs->ns_blocksize_bits;
0420     do_div(newnsegs, nilfs->ns_blocks_per_segment);
0421 
0422     ret = nilfs_sufile_resize(nilfs->ns_sufile, newnsegs);
0423     up_write(&nilfs->ns_segctor_sem);
0424     if (ret < 0)
0425         goto out;
0426 
0427     ret = nilfs_construct_segment(sb);
0428     if (ret < 0)
0429         goto out;
0430 
0431     down_write(&nilfs->ns_sem);
0432     nilfs_move_2nd_super(sb, sb2off);
0433     ret = -EIO;
0434     sbp = nilfs_prepare_super(sb, 0);
0435     if (likely(sbp)) {
0436         nilfs_set_log_cursor(sbp[0], nilfs);
0437         /*
0438          * Drop NILFS_RESIZE_FS flag for compatibility with
0439          * mount-time resize which may be implemented in a
0440          * future release.
0441          */
0442         sbp[0]->s_state = cpu_to_le16(le16_to_cpu(sbp[0]->s_state) &
0443                           ~NILFS_RESIZE_FS);
0444         sbp[0]->s_dev_size = cpu_to_le64(newsize);
0445         sbp[0]->s_nsegments = cpu_to_le64(nilfs->ns_nsegments);
0446         if (sbp[1])
0447             memcpy(sbp[1], sbp[0], nilfs->ns_sbsize);
0448         ret = nilfs_commit_super(sb, NILFS_SB_COMMIT_ALL);
0449     }
0450     up_write(&nilfs->ns_sem);
0451 
0452     /*
0453      * Reset the range of allocatable segments last.  This order
0454      * is important in the case of expansion because the secondary
0455      * superblock must be protected from log write until migration
0456      * completes.
0457      */
0458     if (!ret)
0459         nilfs_sufile_set_alloc_range(nilfs->ns_sufile, 0, newnsegs - 1);
0460 out:
0461     return ret;
0462 }
0463 
0464 static void nilfs_put_super(struct super_block *sb)
0465 {
0466     struct the_nilfs *nilfs = sb->s_fs_info;
0467 
0468     nilfs_detach_log_writer(sb);
0469 
0470     if (!sb_rdonly(sb)) {
0471         down_write(&nilfs->ns_sem);
0472         nilfs_cleanup_super(sb);
0473         up_write(&nilfs->ns_sem);
0474     }
0475 
0476     iput(nilfs->ns_sufile);
0477     iput(nilfs->ns_cpfile);
0478     iput(nilfs->ns_dat);
0479 
0480     destroy_nilfs(nilfs);
0481     sb->s_fs_info = NULL;
0482 }
0483 
0484 static int nilfs_sync_fs(struct super_block *sb, int wait)
0485 {
0486     struct the_nilfs *nilfs = sb->s_fs_info;
0487     struct nilfs_super_block **sbp;
0488     int err = 0;
0489 
0490     /* This function is called when super block should be written back */
0491     if (wait)
0492         err = nilfs_construct_segment(sb);
0493 
0494     down_write(&nilfs->ns_sem);
0495     if (nilfs_sb_dirty(nilfs)) {
0496         sbp = nilfs_prepare_super(sb, nilfs_sb_will_flip(nilfs));
0497         if (likely(sbp)) {
0498             nilfs_set_log_cursor(sbp[0], nilfs);
0499             nilfs_commit_super(sb, NILFS_SB_COMMIT);
0500         }
0501     }
0502     up_write(&nilfs->ns_sem);
0503 
0504     if (!err)
0505         err = nilfs_flush_device(nilfs);
0506 
0507     return err;
0508 }
0509 
0510 int nilfs_attach_checkpoint(struct super_block *sb, __u64 cno, int curr_mnt,
0511                 struct nilfs_root **rootp)
0512 {
0513     struct the_nilfs *nilfs = sb->s_fs_info;
0514     struct nilfs_root *root;
0515     struct nilfs_checkpoint *raw_cp;
0516     struct buffer_head *bh_cp;
0517     int err = -ENOMEM;
0518 
0519     root = nilfs_find_or_create_root(
0520         nilfs, curr_mnt ? NILFS_CPTREE_CURRENT_CNO : cno);
0521     if (!root)
0522         return err;
0523 
0524     if (root->ifile)
0525         goto reuse; /* already attached checkpoint */
0526 
0527     down_read(&nilfs->ns_segctor_sem);
0528     err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, cno, 0, &raw_cp,
0529                       &bh_cp);
0530     up_read(&nilfs->ns_segctor_sem);
0531     if (unlikely(err)) {
0532         if (err == -ENOENT || err == -EINVAL) {
0533             nilfs_err(sb,
0534                   "Invalid checkpoint (checkpoint number=%llu)",
0535                   (unsigned long long)cno);
0536             err = -EINVAL;
0537         }
0538         goto failed;
0539     }
0540 
0541     err = nilfs_ifile_read(sb, root, nilfs->ns_inode_size,
0542                    &raw_cp->cp_ifile_inode, &root->ifile);
0543     if (err)
0544         goto failed_bh;
0545 
0546     atomic64_set(&root->inodes_count,
0547             le64_to_cpu(raw_cp->cp_inodes_count));
0548     atomic64_set(&root->blocks_count,
0549             le64_to_cpu(raw_cp->cp_blocks_count));
0550 
0551     nilfs_cpfile_put_checkpoint(nilfs->ns_cpfile, cno, bh_cp);
0552 
0553  reuse:
0554     *rootp = root;
0555     return 0;
0556 
0557  failed_bh:
0558     nilfs_cpfile_put_checkpoint(nilfs->ns_cpfile, cno, bh_cp);
0559  failed:
0560     nilfs_put_root(root);
0561 
0562     return err;
0563 }
0564 
0565 static int nilfs_freeze(struct super_block *sb)
0566 {
0567     struct the_nilfs *nilfs = sb->s_fs_info;
0568     int err;
0569 
0570     if (sb_rdonly(sb))
0571         return 0;
0572 
0573     /* Mark super block clean */
0574     down_write(&nilfs->ns_sem);
0575     err = nilfs_cleanup_super(sb);
0576     up_write(&nilfs->ns_sem);
0577     return err;
0578 }
0579 
0580 static int nilfs_unfreeze(struct super_block *sb)
0581 {
0582     struct the_nilfs *nilfs = sb->s_fs_info;
0583 
0584     if (sb_rdonly(sb))
0585         return 0;
0586 
0587     down_write(&nilfs->ns_sem);
0588     nilfs_setup_super(sb, false);
0589     up_write(&nilfs->ns_sem);
0590     return 0;
0591 }
0592 
0593 static int nilfs_statfs(struct dentry *dentry, struct kstatfs *buf)
0594 {
0595     struct super_block *sb = dentry->d_sb;
0596     struct nilfs_root *root = NILFS_I(d_inode(dentry))->i_root;
0597     struct the_nilfs *nilfs = root->nilfs;
0598     u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
0599     unsigned long long blocks;
0600     unsigned long overhead;
0601     unsigned long nrsvblocks;
0602     sector_t nfreeblocks;
0603     u64 nmaxinodes, nfreeinodes;
0604     int err;
0605 
0606     /*
0607      * Compute all of the segment blocks
0608      *
0609      * The blocks before first segment and after last segment
0610      * are excluded.
0611      */
0612     blocks = nilfs->ns_blocks_per_segment * nilfs->ns_nsegments
0613         - nilfs->ns_first_data_block;
0614     nrsvblocks = nilfs->ns_nrsvsegs * nilfs->ns_blocks_per_segment;
0615 
0616     /*
0617      * Compute the overhead
0618      *
0619      * When distributing meta data blocks outside segment structure,
0620      * We must count them as the overhead.
0621      */
0622     overhead = 0;
0623 
0624     err = nilfs_count_free_blocks(nilfs, &nfreeblocks);
0625     if (unlikely(err))
0626         return err;
0627 
0628     err = nilfs_ifile_count_free_inodes(root->ifile,
0629                         &nmaxinodes, &nfreeinodes);
0630     if (unlikely(err)) {
0631         nilfs_warn(sb, "failed to count free inodes: err=%d", err);
0632         if (err == -ERANGE) {
0633             /*
0634              * If nilfs_palloc_count_max_entries() returns
0635              * -ERANGE error code then we simply treat
0636              * curent inodes count as maximum possible and
0637              * zero as free inodes value.
0638              */
0639             nmaxinodes = atomic64_read(&root->inodes_count);
0640             nfreeinodes = 0;
0641             err = 0;
0642         } else
0643             return err;
0644     }
0645 
0646     buf->f_type = NILFS_SUPER_MAGIC;
0647     buf->f_bsize = sb->s_blocksize;
0648     buf->f_blocks = blocks - overhead;
0649     buf->f_bfree = nfreeblocks;
0650     buf->f_bavail = (buf->f_bfree >= nrsvblocks) ?
0651         (buf->f_bfree - nrsvblocks) : 0;
0652     buf->f_files = nmaxinodes;
0653     buf->f_ffree = nfreeinodes;
0654     buf->f_namelen = NILFS_NAME_LEN;
0655     buf->f_fsid = u64_to_fsid(id);
0656 
0657     return 0;
0658 }
0659 
0660 static int nilfs_show_options(struct seq_file *seq, struct dentry *dentry)
0661 {
0662     struct super_block *sb = dentry->d_sb;
0663     struct the_nilfs *nilfs = sb->s_fs_info;
0664     struct nilfs_root *root = NILFS_I(d_inode(dentry))->i_root;
0665 
0666     if (!nilfs_test_opt(nilfs, BARRIER))
0667         seq_puts(seq, ",nobarrier");
0668     if (root->cno != NILFS_CPTREE_CURRENT_CNO)
0669         seq_printf(seq, ",cp=%llu", (unsigned long long)root->cno);
0670     if (nilfs_test_opt(nilfs, ERRORS_PANIC))
0671         seq_puts(seq, ",errors=panic");
0672     if (nilfs_test_opt(nilfs, ERRORS_CONT))
0673         seq_puts(seq, ",errors=continue");
0674     if (nilfs_test_opt(nilfs, STRICT_ORDER))
0675         seq_puts(seq, ",order=strict");
0676     if (nilfs_test_opt(nilfs, NORECOVERY))
0677         seq_puts(seq, ",norecovery");
0678     if (nilfs_test_opt(nilfs, DISCARD))
0679         seq_puts(seq, ",discard");
0680 
0681     return 0;
0682 }
0683 
0684 static const struct super_operations nilfs_sops = {
0685     .alloc_inode    = nilfs_alloc_inode,
0686     .free_inode     = nilfs_free_inode,
0687     .dirty_inode    = nilfs_dirty_inode,
0688     .evict_inode    = nilfs_evict_inode,
0689     .put_super      = nilfs_put_super,
0690     .sync_fs        = nilfs_sync_fs,
0691     .freeze_fs  = nilfs_freeze,
0692     .unfreeze_fs    = nilfs_unfreeze,
0693     .statfs         = nilfs_statfs,
0694     .remount_fs     = nilfs_remount,
0695     .show_options = nilfs_show_options
0696 };
0697 
0698 enum {
0699     Opt_err_cont, Opt_err_panic, Opt_err_ro,
0700     Opt_barrier, Opt_nobarrier, Opt_snapshot, Opt_order, Opt_norecovery,
0701     Opt_discard, Opt_nodiscard, Opt_err,
0702 };
0703 
0704 static match_table_t tokens = {
0705     {Opt_err_cont, "errors=continue"},
0706     {Opt_err_panic, "errors=panic"},
0707     {Opt_err_ro, "errors=remount-ro"},
0708     {Opt_barrier, "barrier"},
0709     {Opt_nobarrier, "nobarrier"},
0710     {Opt_snapshot, "cp=%u"},
0711     {Opt_order, "order=%s"},
0712     {Opt_norecovery, "norecovery"},
0713     {Opt_discard, "discard"},
0714     {Opt_nodiscard, "nodiscard"},
0715     {Opt_err, NULL}
0716 };
0717 
0718 static int parse_options(char *options, struct super_block *sb, int is_remount)
0719 {
0720     struct the_nilfs *nilfs = sb->s_fs_info;
0721     char *p;
0722     substring_t args[MAX_OPT_ARGS];
0723 
0724     if (!options)
0725         return 1;
0726 
0727     while ((p = strsep(&options, ",")) != NULL) {
0728         int token;
0729 
0730         if (!*p)
0731             continue;
0732 
0733         token = match_token(p, tokens, args);
0734         switch (token) {
0735         case Opt_barrier:
0736             nilfs_set_opt(nilfs, BARRIER);
0737             break;
0738         case Opt_nobarrier:
0739             nilfs_clear_opt(nilfs, BARRIER);
0740             break;
0741         case Opt_order:
0742             if (strcmp(args[0].from, "relaxed") == 0)
0743                 /* Ordered data semantics */
0744                 nilfs_clear_opt(nilfs, STRICT_ORDER);
0745             else if (strcmp(args[0].from, "strict") == 0)
0746                 /* Strict in-order semantics */
0747                 nilfs_set_opt(nilfs, STRICT_ORDER);
0748             else
0749                 return 0;
0750             break;
0751         case Opt_err_panic:
0752             nilfs_write_opt(nilfs, ERROR_MODE, ERRORS_PANIC);
0753             break;
0754         case Opt_err_ro:
0755             nilfs_write_opt(nilfs, ERROR_MODE, ERRORS_RO);
0756             break;
0757         case Opt_err_cont:
0758             nilfs_write_opt(nilfs, ERROR_MODE, ERRORS_CONT);
0759             break;
0760         case Opt_snapshot:
0761             if (is_remount) {
0762                 nilfs_err(sb,
0763                       "\"%s\" option is invalid for remount",
0764                       p);
0765                 return 0;
0766             }
0767             break;
0768         case Opt_norecovery:
0769             nilfs_set_opt(nilfs, NORECOVERY);
0770             break;
0771         case Opt_discard:
0772             nilfs_set_opt(nilfs, DISCARD);
0773             break;
0774         case Opt_nodiscard:
0775             nilfs_clear_opt(nilfs, DISCARD);
0776             break;
0777         default:
0778             nilfs_err(sb, "unrecognized mount option \"%s\"", p);
0779             return 0;
0780         }
0781     }
0782     return 1;
0783 }
0784 
0785 static inline void
0786 nilfs_set_default_options(struct super_block *sb,
0787               struct nilfs_super_block *sbp)
0788 {
0789     struct the_nilfs *nilfs = sb->s_fs_info;
0790 
0791     nilfs->ns_mount_opt =
0792         NILFS_MOUNT_ERRORS_RO | NILFS_MOUNT_BARRIER;
0793 }
0794 
0795 static int nilfs_setup_super(struct super_block *sb, int is_mount)
0796 {
0797     struct the_nilfs *nilfs = sb->s_fs_info;
0798     struct nilfs_super_block **sbp;
0799     int max_mnt_count;
0800     int mnt_count;
0801 
0802     /* nilfs->ns_sem must be locked by the caller. */
0803     sbp = nilfs_prepare_super(sb, 0);
0804     if (!sbp)
0805         return -EIO;
0806 
0807     if (!is_mount)
0808         goto skip_mount_setup;
0809 
0810     max_mnt_count = le16_to_cpu(sbp[0]->s_max_mnt_count);
0811     mnt_count = le16_to_cpu(sbp[0]->s_mnt_count);
0812 
0813     if (nilfs->ns_mount_state & NILFS_ERROR_FS) {
0814         nilfs_warn(sb, "mounting fs with errors");
0815 #if 0
0816     } else if (max_mnt_count >= 0 && mnt_count >= max_mnt_count) {
0817         nilfs_warn(sb, "maximal mount count reached");
0818 #endif
0819     }
0820     if (!max_mnt_count)
0821         sbp[0]->s_max_mnt_count = cpu_to_le16(NILFS_DFL_MAX_MNT_COUNT);
0822 
0823     sbp[0]->s_mnt_count = cpu_to_le16(mnt_count + 1);
0824     sbp[0]->s_mtime = cpu_to_le64(ktime_get_real_seconds());
0825 
0826 skip_mount_setup:
0827     sbp[0]->s_state =
0828         cpu_to_le16(le16_to_cpu(sbp[0]->s_state) & ~NILFS_VALID_FS);
0829     /* synchronize sbp[1] with sbp[0] */
0830     if (sbp[1])
0831         memcpy(sbp[1], sbp[0], nilfs->ns_sbsize);
0832     return nilfs_commit_super(sb, NILFS_SB_COMMIT_ALL);
0833 }
0834 
0835 struct nilfs_super_block *nilfs_read_super_block(struct super_block *sb,
0836                          u64 pos, int blocksize,
0837                          struct buffer_head **pbh)
0838 {
0839     unsigned long long sb_index = pos;
0840     unsigned long offset;
0841 
0842     offset = do_div(sb_index, blocksize);
0843     *pbh = sb_bread(sb, sb_index);
0844     if (!*pbh)
0845         return NULL;
0846     return (struct nilfs_super_block *)((char *)(*pbh)->b_data + offset);
0847 }
0848 
0849 int nilfs_store_magic_and_option(struct super_block *sb,
0850                  struct nilfs_super_block *sbp,
0851                  char *data)
0852 {
0853     struct the_nilfs *nilfs = sb->s_fs_info;
0854 
0855     sb->s_magic = le16_to_cpu(sbp->s_magic);
0856 
0857     /* FS independent flags */
0858 #ifdef NILFS_ATIME_DISABLE
0859     sb->s_flags |= SB_NOATIME;
0860 #endif
0861 
0862     nilfs_set_default_options(sb, sbp);
0863 
0864     nilfs->ns_resuid = le16_to_cpu(sbp->s_def_resuid);
0865     nilfs->ns_resgid = le16_to_cpu(sbp->s_def_resgid);
0866     nilfs->ns_interval = le32_to_cpu(sbp->s_c_interval);
0867     nilfs->ns_watermark = le32_to_cpu(sbp->s_c_block_max);
0868 
0869     return !parse_options(data, sb, 0) ? -EINVAL : 0;
0870 }
0871 
0872 int nilfs_check_feature_compatibility(struct super_block *sb,
0873                       struct nilfs_super_block *sbp)
0874 {
0875     __u64 features;
0876 
0877     features = le64_to_cpu(sbp->s_feature_incompat) &
0878         ~NILFS_FEATURE_INCOMPAT_SUPP;
0879     if (features) {
0880         nilfs_err(sb,
0881               "couldn't mount because of unsupported optional features (%llx)",
0882               (unsigned long long)features);
0883         return -EINVAL;
0884     }
0885     features = le64_to_cpu(sbp->s_feature_compat_ro) &
0886         ~NILFS_FEATURE_COMPAT_RO_SUPP;
0887     if (!sb_rdonly(sb) && features) {
0888         nilfs_err(sb,
0889               "couldn't mount RDWR because of unsupported optional features (%llx)",
0890               (unsigned long long)features);
0891         return -EINVAL;
0892     }
0893     return 0;
0894 }
0895 
0896 static int nilfs_get_root_dentry(struct super_block *sb,
0897                  struct nilfs_root *root,
0898                  struct dentry **root_dentry)
0899 {
0900     struct inode *inode;
0901     struct dentry *dentry;
0902     int ret = 0;
0903 
0904     inode = nilfs_iget(sb, root, NILFS_ROOT_INO);
0905     if (IS_ERR(inode)) {
0906         ret = PTR_ERR(inode);
0907         nilfs_err(sb, "error %d getting root inode", ret);
0908         goto out;
0909     }
0910     if (!S_ISDIR(inode->i_mode) || !inode->i_blocks || !inode->i_size) {
0911         iput(inode);
0912         nilfs_err(sb, "corrupt root inode");
0913         ret = -EINVAL;
0914         goto out;
0915     }
0916 
0917     if (root->cno == NILFS_CPTREE_CURRENT_CNO) {
0918         dentry = d_find_alias(inode);
0919         if (!dentry) {
0920             dentry = d_make_root(inode);
0921             if (!dentry) {
0922                 ret = -ENOMEM;
0923                 goto failed_dentry;
0924             }
0925         } else {
0926             iput(inode);
0927         }
0928     } else {
0929         dentry = d_obtain_root(inode);
0930         if (IS_ERR(dentry)) {
0931             ret = PTR_ERR(dentry);
0932             goto failed_dentry;
0933         }
0934     }
0935     *root_dentry = dentry;
0936  out:
0937     return ret;
0938 
0939  failed_dentry:
0940     nilfs_err(sb, "error %d getting root dentry", ret);
0941     goto out;
0942 }
0943 
0944 static int nilfs_attach_snapshot(struct super_block *s, __u64 cno,
0945                  struct dentry **root_dentry)
0946 {
0947     struct the_nilfs *nilfs = s->s_fs_info;
0948     struct nilfs_root *root;
0949     int ret;
0950 
0951     mutex_lock(&nilfs->ns_snapshot_mount_mutex);
0952 
0953     down_read(&nilfs->ns_segctor_sem);
0954     ret = nilfs_cpfile_is_snapshot(nilfs->ns_cpfile, cno);
0955     up_read(&nilfs->ns_segctor_sem);
0956     if (ret < 0) {
0957         ret = (ret == -ENOENT) ? -EINVAL : ret;
0958         goto out;
0959     } else if (!ret) {
0960         nilfs_err(s,
0961               "The specified checkpoint is not a snapshot (checkpoint number=%llu)",
0962               (unsigned long long)cno);
0963         ret = -EINVAL;
0964         goto out;
0965     }
0966 
0967     ret = nilfs_attach_checkpoint(s, cno, false, &root);
0968     if (ret) {
0969         nilfs_err(s,
0970               "error %d while loading snapshot (checkpoint number=%llu)",
0971               ret, (unsigned long long)cno);
0972         goto out;
0973     }
0974     ret = nilfs_get_root_dentry(s, root, root_dentry);
0975     nilfs_put_root(root);
0976  out:
0977     mutex_unlock(&nilfs->ns_snapshot_mount_mutex);
0978     return ret;
0979 }
0980 
0981 /**
0982  * nilfs_tree_is_busy() - try to shrink dentries of a checkpoint
0983  * @root_dentry: root dentry of the tree to be shrunk
0984  *
0985  * This function returns true if the tree was in-use.
0986  */
0987 static bool nilfs_tree_is_busy(struct dentry *root_dentry)
0988 {
0989     shrink_dcache_parent(root_dentry);
0990     return d_count(root_dentry) > 1;
0991 }
0992 
0993 int nilfs_checkpoint_is_mounted(struct super_block *sb, __u64 cno)
0994 {
0995     struct the_nilfs *nilfs = sb->s_fs_info;
0996     struct nilfs_root *root;
0997     struct inode *inode;
0998     struct dentry *dentry;
0999     int ret;
1000 
1001     if (cno > nilfs->ns_cno)
1002         return false;
1003 
1004     if (cno >= nilfs_last_cno(nilfs))
1005         return true;    /* protect recent checkpoints */
1006 
1007     ret = false;
1008     root = nilfs_lookup_root(nilfs, cno);
1009     if (root) {
1010         inode = nilfs_ilookup(sb, root, NILFS_ROOT_INO);
1011         if (inode) {
1012             dentry = d_find_alias(inode);
1013             if (dentry) {
1014                 ret = nilfs_tree_is_busy(dentry);
1015                 dput(dentry);
1016             }
1017             iput(inode);
1018         }
1019         nilfs_put_root(root);
1020     }
1021     return ret;
1022 }
1023 
1024 /**
1025  * nilfs_fill_super() - initialize a super block instance
1026  * @sb: super_block
1027  * @data: mount options
1028  * @silent: silent mode flag
1029  *
1030  * This function is called exclusively by nilfs->ns_mount_mutex.
1031  * So, the recovery process is protected from other simultaneous mounts.
1032  */
1033 static int
1034 nilfs_fill_super(struct super_block *sb, void *data, int silent)
1035 {
1036     struct the_nilfs *nilfs;
1037     struct nilfs_root *fsroot;
1038     __u64 cno;
1039     int err;
1040 
1041     nilfs = alloc_nilfs(sb);
1042     if (!nilfs)
1043         return -ENOMEM;
1044 
1045     sb->s_fs_info = nilfs;
1046 
1047     err = init_nilfs(nilfs, sb, (char *)data);
1048     if (err)
1049         goto failed_nilfs;
1050 
1051     sb->s_op = &nilfs_sops;
1052     sb->s_export_op = &nilfs_export_ops;
1053     sb->s_root = NULL;
1054     sb->s_time_gran = 1;
1055     sb->s_max_links = NILFS_LINK_MAX;
1056 
1057     sb->s_bdi = bdi_get(sb->s_bdev->bd_disk->bdi);
1058 
1059     err = load_nilfs(nilfs, sb);
1060     if (err)
1061         goto failed_nilfs;
1062 
1063     cno = nilfs_last_cno(nilfs);
1064     err = nilfs_attach_checkpoint(sb, cno, true, &fsroot);
1065     if (err) {
1066         nilfs_err(sb,
1067               "error %d while loading last checkpoint (checkpoint number=%llu)",
1068               err, (unsigned long long)cno);
1069         goto failed_unload;
1070     }
1071 
1072     if (!sb_rdonly(sb)) {
1073         err = nilfs_attach_log_writer(sb, fsroot);
1074         if (err)
1075             goto failed_checkpoint;
1076     }
1077 
1078     err = nilfs_get_root_dentry(sb, fsroot, &sb->s_root);
1079     if (err)
1080         goto failed_segctor;
1081 
1082     nilfs_put_root(fsroot);
1083 
1084     if (!sb_rdonly(sb)) {
1085         down_write(&nilfs->ns_sem);
1086         nilfs_setup_super(sb, true);
1087         up_write(&nilfs->ns_sem);
1088     }
1089 
1090     return 0;
1091 
1092  failed_segctor:
1093     nilfs_detach_log_writer(sb);
1094 
1095  failed_checkpoint:
1096     nilfs_put_root(fsroot);
1097 
1098  failed_unload:
1099     iput(nilfs->ns_sufile);
1100     iput(nilfs->ns_cpfile);
1101     iput(nilfs->ns_dat);
1102 
1103  failed_nilfs:
1104     destroy_nilfs(nilfs);
1105     return err;
1106 }
1107 
1108 static int nilfs_remount(struct super_block *sb, int *flags, char *data)
1109 {
1110     struct the_nilfs *nilfs = sb->s_fs_info;
1111     unsigned long old_sb_flags;
1112     unsigned long old_mount_opt;
1113     int err;
1114 
1115     sync_filesystem(sb);
1116     old_sb_flags = sb->s_flags;
1117     old_mount_opt = nilfs->ns_mount_opt;
1118 
1119     if (!parse_options(data, sb, 1)) {
1120         err = -EINVAL;
1121         goto restore_opts;
1122     }
1123     sb->s_flags = (sb->s_flags & ~SB_POSIXACL);
1124 
1125     err = -EINVAL;
1126 
1127     if (!nilfs_valid_fs(nilfs)) {
1128         nilfs_warn(sb,
1129                "couldn't remount because the filesystem is in an incomplete recovery state");
1130         goto restore_opts;
1131     }
1132 
1133     if ((bool)(*flags & SB_RDONLY) == sb_rdonly(sb))
1134         goto out;
1135     if (*flags & SB_RDONLY) {
1136         /* Shutting down log writer */
1137         nilfs_detach_log_writer(sb);
1138         sb->s_flags |= SB_RDONLY;
1139 
1140         /*
1141          * Remounting a valid RW partition RDONLY, so set
1142          * the RDONLY flag and then mark the partition as valid again.
1143          */
1144         down_write(&nilfs->ns_sem);
1145         nilfs_cleanup_super(sb);
1146         up_write(&nilfs->ns_sem);
1147     } else {
1148         __u64 features;
1149         struct nilfs_root *root;
1150 
1151         /*
1152          * Mounting a RDONLY partition read-write, so reread and
1153          * store the current valid flag.  (It may have been changed
1154          * by fsck since we originally mounted the partition.)
1155          */
1156         down_read(&nilfs->ns_sem);
1157         features = le64_to_cpu(nilfs->ns_sbp[0]->s_feature_compat_ro) &
1158             ~NILFS_FEATURE_COMPAT_RO_SUPP;
1159         up_read(&nilfs->ns_sem);
1160         if (features) {
1161             nilfs_warn(sb,
1162                    "couldn't remount RDWR because of unsupported optional features (%llx)",
1163                    (unsigned long long)features);
1164             err = -EROFS;
1165             goto restore_opts;
1166         }
1167 
1168         sb->s_flags &= ~SB_RDONLY;
1169 
1170         root = NILFS_I(d_inode(sb->s_root))->i_root;
1171         err = nilfs_attach_log_writer(sb, root);
1172         if (err)
1173             goto restore_opts;
1174 
1175         down_write(&nilfs->ns_sem);
1176         nilfs_setup_super(sb, true);
1177         up_write(&nilfs->ns_sem);
1178     }
1179  out:
1180     return 0;
1181 
1182  restore_opts:
1183     sb->s_flags = old_sb_flags;
1184     nilfs->ns_mount_opt = old_mount_opt;
1185     return err;
1186 }
1187 
1188 struct nilfs_super_data {
1189     struct block_device *bdev;
1190     __u64 cno;
1191     int flags;
1192 };
1193 
1194 static int nilfs_parse_snapshot_option(const char *option,
1195                        const substring_t *arg,
1196                        struct nilfs_super_data *sd)
1197 {
1198     unsigned long long val;
1199     const char *msg = NULL;
1200     int err;
1201 
1202     if (!(sd->flags & SB_RDONLY)) {
1203         msg = "read-only option is not specified";
1204         goto parse_error;
1205     }
1206 
1207     err = kstrtoull(arg->from, 0, &val);
1208     if (err) {
1209         if (err == -ERANGE)
1210             msg = "too large checkpoint number";
1211         else
1212             msg = "malformed argument";
1213         goto parse_error;
1214     } else if (val == 0) {
1215         msg = "invalid checkpoint number 0";
1216         goto parse_error;
1217     }
1218     sd->cno = val;
1219     return 0;
1220 
1221 parse_error:
1222     nilfs_err(NULL, "invalid option \"%s\": %s", option, msg);
1223     return 1;
1224 }
1225 
1226 /**
1227  * nilfs_identify - pre-read mount options needed to identify mount instance
1228  * @data: mount options
1229  * @sd: nilfs_super_data
1230  */
1231 static int nilfs_identify(char *data, struct nilfs_super_data *sd)
1232 {
1233     char *p, *options = data;
1234     substring_t args[MAX_OPT_ARGS];
1235     int token;
1236     int ret = 0;
1237 
1238     do {
1239         p = strsep(&options, ",");
1240         if (p != NULL && *p) {
1241             token = match_token(p, tokens, args);
1242             if (token == Opt_snapshot)
1243                 ret = nilfs_parse_snapshot_option(p, &args[0],
1244                                   sd);
1245         }
1246         if (!options)
1247             break;
1248         BUG_ON(options == data);
1249         *(options - 1) = ',';
1250     } while (!ret);
1251     return ret;
1252 }
1253 
1254 static int nilfs_set_bdev_super(struct super_block *s, void *data)
1255 {
1256     s->s_bdev = data;
1257     s->s_dev = s->s_bdev->bd_dev;
1258     return 0;
1259 }
1260 
1261 static int nilfs_test_bdev_super(struct super_block *s, void *data)
1262 {
1263     return (void *)s->s_bdev == data;
1264 }
1265 
1266 static struct dentry *
1267 nilfs_mount(struct file_system_type *fs_type, int flags,
1268          const char *dev_name, void *data)
1269 {
1270     struct nilfs_super_data sd;
1271     struct super_block *s;
1272     fmode_t mode = FMODE_READ | FMODE_EXCL;
1273     struct dentry *root_dentry;
1274     int err, s_new = false;
1275 
1276     if (!(flags & SB_RDONLY))
1277         mode |= FMODE_WRITE;
1278 
1279     sd.bdev = blkdev_get_by_path(dev_name, mode, fs_type);
1280     if (IS_ERR(sd.bdev))
1281         return ERR_CAST(sd.bdev);
1282 
1283     sd.cno = 0;
1284     sd.flags = flags;
1285     if (nilfs_identify((char *)data, &sd)) {
1286         err = -EINVAL;
1287         goto failed;
1288     }
1289 
1290     /*
1291      * once the super is inserted into the list by sget, s_umount
1292      * will protect the lockfs code from trying to start a snapshot
1293      * while we are mounting
1294      */
1295     mutex_lock(&sd.bdev->bd_fsfreeze_mutex);
1296     if (sd.bdev->bd_fsfreeze_count > 0) {
1297         mutex_unlock(&sd.bdev->bd_fsfreeze_mutex);
1298         err = -EBUSY;
1299         goto failed;
1300     }
1301     s = sget(fs_type, nilfs_test_bdev_super, nilfs_set_bdev_super, flags,
1302          sd.bdev);
1303     mutex_unlock(&sd.bdev->bd_fsfreeze_mutex);
1304     if (IS_ERR(s)) {
1305         err = PTR_ERR(s);
1306         goto failed;
1307     }
1308 
1309     if (!s->s_root) {
1310         s_new = true;
1311 
1312         /* New superblock instance created */
1313         s->s_mode = mode;
1314         snprintf(s->s_id, sizeof(s->s_id), "%pg", sd.bdev);
1315         sb_set_blocksize(s, block_size(sd.bdev));
1316 
1317         err = nilfs_fill_super(s, data, flags & SB_SILENT ? 1 : 0);
1318         if (err)
1319             goto failed_super;
1320 
1321         s->s_flags |= SB_ACTIVE;
1322     } else if (!sd.cno) {
1323         if (nilfs_tree_is_busy(s->s_root)) {
1324             if ((flags ^ s->s_flags) & SB_RDONLY) {
1325                 nilfs_err(s,
1326                       "the device already has a %s mount.",
1327                       sb_rdonly(s) ? "read-only" : "read/write");
1328                 err = -EBUSY;
1329                 goto failed_super;
1330             }
1331         } else {
1332             /*
1333              * Try remount to setup mount states if the current
1334              * tree is not mounted and only snapshots use this sb.
1335              */
1336             err = nilfs_remount(s, &flags, data);
1337             if (err)
1338                 goto failed_super;
1339         }
1340     }
1341 
1342     if (sd.cno) {
1343         err = nilfs_attach_snapshot(s, sd.cno, &root_dentry);
1344         if (err)
1345             goto failed_super;
1346     } else {
1347         root_dentry = dget(s->s_root);
1348     }
1349 
1350     if (!s_new)
1351         blkdev_put(sd.bdev, mode);
1352 
1353     return root_dentry;
1354 
1355  failed_super:
1356     deactivate_locked_super(s);
1357 
1358  failed:
1359     if (!s_new)
1360         blkdev_put(sd.bdev, mode);
1361     return ERR_PTR(err);
1362 }
1363 
1364 struct file_system_type nilfs_fs_type = {
1365     .owner    = THIS_MODULE,
1366     .name     = "nilfs2",
1367     .mount    = nilfs_mount,
1368     .kill_sb  = kill_block_super,
1369     .fs_flags = FS_REQUIRES_DEV,
1370 };
1371 MODULE_ALIAS_FS("nilfs2");
1372 
1373 static void nilfs_inode_init_once(void *obj)
1374 {
1375     struct nilfs_inode_info *ii = obj;
1376 
1377     INIT_LIST_HEAD(&ii->i_dirty);
1378 #ifdef CONFIG_NILFS_XATTR
1379     init_rwsem(&ii->xattr_sem);
1380 #endif
1381     inode_init_once(&ii->vfs_inode);
1382 }
1383 
1384 static void nilfs_segbuf_init_once(void *obj)
1385 {
1386     memset(obj, 0, sizeof(struct nilfs_segment_buffer));
1387 }
1388 
1389 static void nilfs_destroy_cachep(void)
1390 {
1391     /*
1392      * Make sure all delayed rcu free inodes are flushed before we
1393      * destroy cache.
1394      */
1395     rcu_barrier();
1396 
1397     kmem_cache_destroy(nilfs_inode_cachep);
1398     kmem_cache_destroy(nilfs_transaction_cachep);
1399     kmem_cache_destroy(nilfs_segbuf_cachep);
1400     kmem_cache_destroy(nilfs_btree_path_cache);
1401 }
1402 
1403 static int __init nilfs_init_cachep(void)
1404 {
1405     nilfs_inode_cachep = kmem_cache_create("nilfs2_inode_cache",
1406             sizeof(struct nilfs_inode_info), 0,
1407             SLAB_RECLAIM_ACCOUNT|SLAB_ACCOUNT,
1408             nilfs_inode_init_once);
1409     if (!nilfs_inode_cachep)
1410         goto fail;
1411 
1412     nilfs_transaction_cachep = kmem_cache_create("nilfs2_transaction_cache",
1413             sizeof(struct nilfs_transaction_info), 0,
1414             SLAB_RECLAIM_ACCOUNT, NULL);
1415     if (!nilfs_transaction_cachep)
1416         goto fail;
1417 
1418     nilfs_segbuf_cachep = kmem_cache_create("nilfs2_segbuf_cache",
1419             sizeof(struct nilfs_segment_buffer), 0,
1420             SLAB_RECLAIM_ACCOUNT, nilfs_segbuf_init_once);
1421     if (!nilfs_segbuf_cachep)
1422         goto fail;
1423 
1424     nilfs_btree_path_cache = kmem_cache_create("nilfs2_btree_path_cache",
1425             sizeof(struct nilfs_btree_path) * NILFS_BTREE_LEVEL_MAX,
1426             0, 0, NULL);
1427     if (!nilfs_btree_path_cache)
1428         goto fail;
1429 
1430     return 0;
1431 
1432 fail:
1433     nilfs_destroy_cachep();
1434     return -ENOMEM;
1435 }
1436 
1437 static int __init init_nilfs_fs(void)
1438 {
1439     int err;
1440 
1441     err = nilfs_init_cachep();
1442     if (err)
1443         goto fail;
1444 
1445     err = nilfs_sysfs_init();
1446     if (err)
1447         goto free_cachep;
1448 
1449     err = register_filesystem(&nilfs_fs_type);
1450     if (err)
1451         goto deinit_sysfs_entry;
1452 
1453     printk(KERN_INFO "NILFS version 2 loaded\n");
1454     return 0;
1455 
1456 deinit_sysfs_entry:
1457     nilfs_sysfs_exit();
1458 free_cachep:
1459     nilfs_destroy_cachep();
1460 fail:
1461     return err;
1462 }
1463 
1464 static void __exit exit_nilfs_fs(void)
1465 {
1466     nilfs_destroy_cachep();
1467     nilfs_sysfs_exit();
1468     unregister_filesystem(&nilfs_fs_type);
1469 }
1470 
1471 module_init(init_nilfs_fs)
1472 module_exit(exit_nilfs_fs)