xref: /openbmc/linux/fs/nilfs2/the_nilfs.c (revision ee1cd5048959de496cd005c50b137212a5b62062)
1  // SPDX-License-Identifier: GPL-2.0+
2  /*
3   * the_nilfs shared structure.
4   *
5   * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
6   *
7   * Written by Ryusuke Konishi.
8   *
9   */
10  
11  #include <linux/buffer_head.h>
12  #include <linux/slab.h>
13  #include <linux/blkdev.h>
14  #include <linux/backing-dev.h>
15  #include <linux/random.h>
16  #include <linux/log2.h>
17  #include <linux/crc32.h>
18  #include "nilfs.h"
19  #include "segment.h"
20  #include "alloc.h"
21  #include "cpfile.h"
22  #include "sufile.h"
23  #include "dat.h"
24  #include "segbuf.h"
25  
26  
27  static int nilfs_valid_sb(struct nilfs_super_block *sbp);
28  
nilfs_set_last_segment(struct the_nilfs * nilfs,sector_t start_blocknr,u64 seq,__u64 cno)29  void nilfs_set_last_segment(struct the_nilfs *nilfs,
30  			    sector_t start_blocknr, u64 seq, __u64 cno)
31  {
32  	spin_lock(&nilfs->ns_last_segment_lock);
33  	nilfs->ns_last_pseg = start_blocknr;
34  	nilfs->ns_last_seq = seq;
35  	nilfs->ns_last_cno = cno;
36  
37  	if (!nilfs_sb_dirty(nilfs)) {
38  		if (nilfs->ns_prev_seq == nilfs->ns_last_seq)
39  			goto stay_cursor;
40  
41  		set_nilfs_sb_dirty(nilfs);
42  	}
43  	nilfs->ns_prev_seq = nilfs->ns_last_seq;
44  
45   stay_cursor:
46  	spin_unlock(&nilfs->ns_last_segment_lock);
47  }
48  
49  /**
50   * alloc_nilfs - allocate a nilfs object
51   * @sb: super block instance
52   *
53   * Return Value: On success, pointer to the_nilfs is returned.
54   * On error, NULL is returned.
55   */
alloc_nilfs(struct super_block * sb)56  struct the_nilfs *alloc_nilfs(struct super_block *sb)
57  {
58  	struct the_nilfs *nilfs;
59  
60  	nilfs = kzalloc(sizeof(*nilfs), GFP_KERNEL);
61  	if (!nilfs)
62  		return NULL;
63  
64  	nilfs->ns_sb = sb;
65  	nilfs->ns_bdev = sb->s_bdev;
66  	atomic_set(&nilfs->ns_ndirtyblks, 0);
67  	init_rwsem(&nilfs->ns_sem);
68  	mutex_init(&nilfs->ns_snapshot_mount_mutex);
69  	INIT_LIST_HEAD(&nilfs->ns_dirty_files);
70  	INIT_LIST_HEAD(&nilfs->ns_gc_inodes);
71  	spin_lock_init(&nilfs->ns_inode_lock);
72  	spin_lock_init(&nilfs->ns_next_gen_lock);
73  	spin_lock_init(&nilfs->ns_last_segment_lock);
74  	nilfs->ns_cptree = RB_ROOT;
75  	spin_lock_init(&nilfs->ns_cptree_lock);
76  	init_rwsem(&nilfs->ns_segctor_sem);
77  	nilfs->ns_sb_update_freq = NILFS_SB_FREQ;
78  
79  	return nilfs;
80  }
81  
82  /**
83   * destroy_nilfs - destroy nilfs object
84   * @nilfs: nilfs object to be released
85   */
destroy_nilfs(struct the_nilfs * nilfs)86  void destroy_nilfs(struct the_nilfs *nilfs)
87  {
88  	might_sleep();
89  	if (nilfs_init(nilfs)) {
90  		brelse(nilfs->ns_sbh[0]);
91  		brelse(nilfs->ns_sbh[1]);
92  	}
93  	kfree(nilfs);
94  }
95  
nilfs_load_super_root(struct the_nilfs * nilfs,struct super_block * sb,sector_t sr_block)96  static int nilfs_load_super_root(struct the_nilfs *nilfs,
97  				 struct super_block *sb, sector_t sr_block)
98  {
99  	struct buffer_head *bh_sr;
100  	struct nilfs_super_root *raw_sr;
101  	struct nilfs_super_block **sbp = nilfs->ns_sbp;
102  	struct nilfs_inode *rawi;
103  	unsigned int dat_entry_size, segment_usage_size, checkpoint_size;
104  	unsigned int inode_size;
105  	int err;
106  
107  	err = nilfs_read_super_root_block(nilfs, sr_block, &bh_sr, 1);
108  	if (unlikely(err))
109  		return err;
110  
111  	down_read(&nilfs->ns_sem);
112  	dat_entry_size = le16_to_cpu(sbp[0]->s_dat_entry_size);
113  	checkpoint_size = le16_to_cpu(sbp[0]->s_checkpoint_size);
114  	segment_usage_size = le16_to_cpu(sbp[0]->s_segment_usage_size);
115  	up_read(&nilfs->ns_sem);
116  
117  	inode_size = nilfs->ns_inode_size;
118  
119  	rawi = (void *)bh_sr->b_data + NILFS_SR_DAT_OFFSET(inode_size);
120  	err = nilfs_dat_read(sb, dat_entry_size, rawi, &nilfs->ns_dat);
121  	if (err)
122  		goto failed;
123  
124  	rawi = (void *)bh_sr->b_data + NILFS_SR_CPFILE_OFFSET(inode_size);
125  	err = nilfs_cpfile_read(sb, checkpoint_size, rawi, &nilfs->ns_cpfile);
126  	if (err)
127  		goto failed_dat;
128  
129  	rawi = (void *)bh_sr->b_data + NILFS_SR_SUFILE_OFFSET(inode_size);
130  	err = nilfs_sufile_read(sb, segment_usage_size, rawi,
131  				&nilfs->ns_sufile);
132  	if (err)
133  		goto failed_cpfile;
134  
135  	raw_sr = (struct nilfs_super_root *)bh_sr->b_data;
136  	nilfs->ns_nongc_ctime = le64_to_cpu(raw_sr->sr_nongc_ctime);
137  
138   failed:
139  	brelse(bh_sr);
140  	return err;
141  
142   failed_cpfile:
143  	iput(nilfs->ns_cpfile);
144  
145   failed_dat:
146  	iput(nilfs->ns_dat);
147  	goto failed;
148  }
149  
nilfs_init_recovery_info(struct nilfs_recovery_info * ri)150  static void nilfs_init_recovery_info(struct nilfs_recovery_info *ri)
151  {
152  	memset(ri, 0, sizeof(*ri));
153  	INIT_LIST_HEAD(&ri->ri_used_segments);
154  }
155  
nilfs_clear_recovery_info(struct nilfs_recovery_info * ri)156  static void nilfs_clear_recovery_info(struct nilfs_recovery_info *ri)
157  {
158  	nilfs_dispose_segment_list(&ri->ri_used_segments);
159  }
160  
161  /**
162   * nilfs_store_log_cursor - load log cursor from a super block
163   * @nilfs: nilfs object
164   * @sbp: buffer storing super block to be read
165   *
166   * nilfs_store_log_cursor() reads the last position of the log
167   * containing a super root from a given super block, and initializes
168   * relevant information on the nilfs object preparatory for log
169   * scanning and recovery.
170   */
nilfs_store_log_cursor(struct the_nilfs * nilfs,struct nilfs_super_block * sbp)171  static int nilfs_store_log_cursor(struct the_nilfs *nilfs,
172  				  struct nilfs_super_block *sbp)
173  {
174  	int ret = 0;
175  
176  	nilfs->ns_last_pseg = le64_to_cpu(sbp->s_last_pseg);
177  	nilfs->ns_last_cno = le64_to_cpu(sbp->s_last_cno);
178  	nilfs->ns_last_seq = le64_to_cpu(sbp->s_last_seq);
179  
180  	nilfs->ns_prev_seq = nilfs->ns_last_seq;
181  	nilfs->ns_seg_seq = nilfs->ns_last_seq;
182  	nilfs->ns_segnum =
183  		nilfs_get_segnum_of_block(nilfs, nilfs->ns_last_pseg);
184  	nilfs->ns_cno = nilfs->ns_last_cno + 1;
185  	if (nilfs->ns_segnum >= nilfs->ns_nsegments) {
186  		nilfs_err(nilfs->ns_sb,
187  			  "pointed segment number is out of range: segnum=%llu, nsegments=%lu",
188  			  (unsigned long long)nilfs->ns_segnum,
189  			  nilfs->ns_nsegments);
190  		ret = -EINVAL;
191  	}
192  	return ret;
193  }
194  
195  /**
196   * nilfs_get_blocksize - get block size from raw superblock data
197   * @sb: super block instance
198   * @sbp: superblock raw data buffer
199   * @blocksize: place to store block size
200   *
201   * nilfs_get_blocksize() calculates the block size from the block size
202   * exponent information written in @sbp and stores it in @blocksize,
203   * or aborts with an error message if it's too large.
204   *
205   * Return Value: On success, 0 is returned. If the block size is too
206   * large, -EINVAL is returned.
207   */
nilfs_get_blocksize(struct super_block * sb,struct nilfs_super_block * sbp,int * blocksize)208  static int nilfs_get_blocksize(struct super_block *sb,
209  			       struct nilfs_super_block *sbp, int *blocksize)
210  {
211  	unsigned int shift_bits = le32_to_cpu(sbp->s_log_block_size);
212  
213  	if (unlikely(shift_bits >
214  		     ilog2(NILFS_MAX_BLOCK_SIZE) - BLOCK_SIZE_BITS)) {
215  		nilfs_err(sb, "too large filesystem blocksize: 2 ^ %u KiB",
216  			  shift_bits);
217  		return -EINVAL;
218  	}
219  	*blocksize = BLOCK_SIZE << shift_bits;
220  	return 0;
221  }
222  
223  /**
224   * load_nilfs - load and recover the nilfs
225   * @nilfs: the_nilfs structure to be released
226   * @sb: super block instance used to recover past segment
227   *
228   * load_nilfs() searches and load the latest super root,
229   * attaches the last segment, and does recovery if needed.
230   * The caller must call this exclusively for simultaneous mounts.
231   */
load_nilfs(struct the_nilfs * nilfs,struct super_block * sb)232  int load_nilfs(struct the_nilfs *nilfs, struct super_block *sb)
233  {
234  	struct nilfs_recovery_info ri;
235  	unsigned int s_flags = sb->s_flags;
236  	int really_read_only = bdev_read_only(nilfs->ns_bdev);
237  	int valid_fs = nilfs_valid_fs(nilfs);
238  	int err;
239  
240  	if (!valid_fs) {
241  		nilfs_warn(sb, "mounting unchecked fs");
242  		if (s_flags & SB_RDONLY) {
243  			nilfs_info(sb,
244  				   "recovery required for readonly filesystem");
245  			nilfs_info(sb,
246  				   "write access will be enabled during recovery");
247  		}
248  	}
249  
250  	nilfs_init_recovery_info(&ri);
251  
252  	err = nilfs_search_super_root(nilfs, &ri);
253  	if (unlikely(err)) {
254  		struct nilfs_super_block **sbp = nilfs->ns_sbp;
255  		int blocksize;
256  
257  		if (err != -EINVAL)
258  			goto scan_error;
259  
260  		if (!nilfs_valid_sb(sbp[1])) {
261  			nilfs_warn(sb,
262  				   "unable to fall back to spare super block");
263  			goto scan_error;
264  		}
265  		nilfs_info(sb, "trying rollback from an earlier position");
266  
267  		/*
268  		 * restore super block with its spare and reconfigure
269  		 * relevant states of the nilfs object.
270  		 */
271  		memcpy(sbp[0], sbp[1], nilfs->ns_sbsize);
272  		nilfs->ns_crc_seed = le32_to_cpu(sbp[0]->s_crc_seed);
273  		nilfs->ns_sbwtime = le64_to_cpu(sbp[0]->s_wtime);
274  
275  		/* verify consistency between two super blocks */
276  		err = nilfs_get_blocksize(sb, sbp[0], &blocksize);
277  		if (err)
278  			goto scan_error;
279  
280  		if (blocksize != nilfs->ns_blocksize) {
281  			nilfs_warn(sb,
282  				   "blocksize differs between two super blocks (%d != %d)",
283  				   blocksize, nilfs->ns_blocksize);
284  			err = -EINVAL;
285  			goto scan_error;
286  		}
287  
288  		err = nilfs_store_log_cursor(nilfs, sbp[0]);
289  		if (err)
290  			goto scan_error;
291  
292  		/* drop clean flag to allow roll-forward and recovery */
293  		nilfs->ns_mount_state &= ~NILFS_VALID_FS;
294  		valid_fs = 0;
295  
296  		err = nilfs_search_super_root(nilfs, &ri);
297  		if (err)
298  			goto scan_error;
299  	}
300  
301  	err = nilfs_load_super_root(nilfs, sb, ri.ri_super_root);
302  	if (unlikely(err)) {
303  		nilfs_err(sb, "error %d while loading super root", err);
304  		goto failed;
305  	}
306  
307  	err = nilfs_sysfs_create_device_group(sb);
308  	if (unlikely(err))
309  		goto sysfs_error;
310  
311  	if (valid_fs)
312  		goto skip_recovery;
313  
314  	if (s_flags & SB_RDONLY) {
315  		__u64 features;
316  
317  		if (nilfs_test_opt(nilfs, NORECOVERY)) {
318  			nilfs_info(sb,
319  				   "norecovery option specified, skipping roll-forward recovery");
320  			goto skip_recovery;
321  		}
322  		features = le64_to_cpu(nilfs->ns_sbp[0]->s_feature_compat_ro) &
323  			~NILFS_FEATURE_COMPAT_RO_SUPP;
324  		if (features) {
325  			nilfs_err(sb,
326  				  "couldn't proceed with recovery because of unsupported optional features (%llx)",
327  				  (unsigned long long)features);
328  			err = -EROFS;
329  			goto failed_unload;
330  		}
331  		if (really_read_only) {
332  			nilfs_err(sb,
333  				  "write access unavailable, cannot proceed");
334  			err = -EROFS;
335  			goto failed_unload;
336  		}
337  		sb->s_flags &= ~SB_RDONLY;
338  	} else if (nilfs_test_opt(nilfs, NORECOVERY)) {
339  		nilfs_err(sb,
340  			  "recovery cancelled because norecovery option was specified for a read/write mount");
341  		err = -EINVAL;
342  		goto failed_unload;
343  	}
344  
345  	err = nilfs_salvage_orphan_logs(nilfs, sb, &ri);
346  	if (err)
347  		goto failed_unload;
348  
349  	down_write(&nilfs->ns_sem);
350  	nilfs->ns_mount_state |= NILFS_VALID_FS; /* set "clean" flag */
351  	err = nilfs_cleanup_super(sb);
352  	up_write(&nilfs->ns_sem);
353  
354  	if (err) {
355  		nilfs_err(sb,
356  			  "error %d updating super block. recovery unfinished.",
357  			  err);
358  		goto failed_unload;
359  	}
360  	nilfs_info(sb, "recovery complete");
361  
362   skip_recovery:
363  	nilfs_clear_recovery_info(&ri);
364  	sb->s_flags = s_flags;
365  	return 0;
366  
367   scan_error:
368  	nilfs_err(sb, "error %d while searching super root", err);
369  	goto failed;
370  
371   failed_unload:
372  	nilfs_sysfs_delete_device_group(nilfs);
373  
374   sysfs_error:
375  	iput(nilfs->ns_cpfile);
376  	iput(nilfs->ns_sufile);
377  	iput(nilfs->ns_dat);
378  
379   failed:
380  	nilfs_clear_recovery_info(&ri);
381  	sb->s_flags = s_flags;
382  	return err;
383  }
384  
nilfs_max_size(unsigned int blkbits)385  static unsigned long long nilfs_max_size(unsigned int blkbits)
386  {
387  	unsigned int max_bits;
388  	unsigned long long res = MAX_LFS_FILESIZE; /* page cache limit */
389  
390  	max_bits = blkbits + NILFS_BMAP_KEY_BIT; /* bmap size limit */
391  	if (max_bits < 64)
392  		res = min_t(unsigned long long, res, (1ULL << max_bits) - 1);
393  	return res;
394  }
395  
396  /**
397   * nilfs_nrsvsegs - calculate the number of reserved segments
398   * @nilfs: nilfs object
399   * @nsegs: total number of segments
400   */
nilfs_nrsvsegs(struct the_nilfs * nilfs,unsigned long nsegs)401  unsigned long nilfs_nrsvsegs(struct the_nilfs *nilfs, unsigned long nsegs)
402  {
403  	return max_t(unsigned long, NILFS_MIN_NRSVSEGS,
404  		     DIV_ROUND_UP(nsegs * nilfs->ns_r_segments_percentage,
405  				  100));
406  }
407  
408  /**
409   * nilfs_max_segment_count - calculate the maximum number of segments
410   * @nilfs: nilfs object
411   */
nilfs_max_segment_count(struct the_nilfs * nilfs)412  static u64 nilfs_max_segment_count(struct the_nilfs *nilfs)
413  {
414  	u64 max_count = U64_MAX;
415  
416  	do_div(max_count, nilfs->ns_blocks_per_segment);
417  	return min_t(u64, max_count, ULONG_MAX);
418  }
419  
nilfs_set_nsegments(struct the_nilfs * nilfs,unsigned long nsegs)420  void nilfs_set_nsegments(struct the_nilfs *nilfs, unsigned long nsegs)
421  {
422  	nilfs->ns_nsegments = nsegs;
423  	nilfs->ns_nrsvsegs = nilfs_nrsvsegs(nilfs, nsegs);
424  }
425  
nilfs_store_disk_layout(struct the_nilfs * nilfs,struct nilfs_super_block * sbp)426  static int nilfs_store_disk_layout(struct the_nilfs *nilfs,
427  				   struct nilfs_super_block *sbp)
428  {
429  	u64 nsegments, nblocks;
430  
431  	if (le32_to_cpu(sbp->s_rev_level) < NILFS_MIN_SUPP_REV) {
432  		nilfs_err(nilfs->ns_sb,
433  			  "unsupported revision (superblock rev.=%d.%d, current rev.=%d.%d). Please check the version of mkfs.nilfs(2).",
434  			  le32_to_cpu(sbp->s_rev_level),
435  			  le16_to_cpu(sbp->s_minor_rev_level),
436  			  NILFS_CURRENT_REV, NILFS_MINOR_REV);
437  		return -EINVAL;
438  	}
439  	nilfs->ns_sbsize = le16_to_cpu(sbp->s_bytes);
440  	if (nilfs->ns_sbsize > BLOCK_SIZE)
441  		return -EINVAL;
442  
443  	nilfs->ns_inode_size = le16_to_cpu(sbp->s_inode_size);
444  	if (nilfs->ns_inode_size > nilfs->ns_blocksize) {
445  		nilfs_err(nilfs->ns_sb, "too large inode size: %d bytes",
446  			  nilfs->ns_inode_size);
447  		return -EINVAL;
448  	} else if (nilfs->ns_inode_size < NILFS_MIN_INODE_SIZE) {
449  		nilfs_err(nilfs->ns_sb, "too small inode size: %d bytes",
450  			  nilfs->ns_inode_size);
451  		return -EINVAL;
452  	}
453  
454  	nilfs->ns_first_ino = le32_to_cpu(sbp->s_first_ino);
455  	if (nilfs->ns_first_ino < NILFS_USER_INO) {
456  		nilfs_err(nilfs->ns_sb,
457  			  "too small lower limit for non-reserved inode numbers: %u",
458  			  nilfs->ns_first_ino);
459  		return -EINVAL;
460  	}
461  
462  	nilfs->ns_blocks_per_segment = le32_to_cpu(sbp->s_blocks_per_segment);
463  	if (nilfs->ns_blocks_per_segment < NILFS_SEG_MIN_BLOCKS) {
464  		nilfs_err(nilfs->ns_sb, "too short segment: %lu blocks",
465  			  nilfs->ns_blocks_per_segment);
466  		return -EINVAL;
467  	}
468  
469  	nilfs->ns_first_data_block = le64_to_cpu(sbp->s_first_data_block);
470  	nilfs->ns_r_segments_percentage =
471  		le32_to_cpu(sbp->s_r_segments_percentage);
472  	if (nilfs->ns_r_segments_percentage < 1 ||
473  	    nilfs->ns_r_segments_percentage > 99) {
474  		nilfs_err(nilfs->ns_sb,
475  			  "invalid reserved segments percentage: %lu",
476  			  nilfs->ns_r_segments_percentage);
477  		return -EINVAL;
478  	}
479  
480  	nsegments = le64_to_cpu(sbp->s_nsegments);
481  	if (nsegments > nilfs_max_segment_count(nilfs)) {
482  		nilfs_err(nilfs->ns_sb,
483  			  "segment count %llu exceeds upper limit (%llu segments)",
484  			  (unsigned long long)nsegments,
485  			  (unsigned long long)nilfs_max_segment_count(nilfs));
486  		return -EINVAL;
487  	}
488  
489  	nblocks = sb_bdev_nr_blocks(nilfs->ns_sb);
490  	if (nblocks) {
491  		u64 min_block_count = nsegments * nilfs->ns_blocks_per_segment;
492  		/*
493  		 * To avoid failing to mount early device images without a
494  		 * second superblock, exclude that block count from the
495  		 * "min_block_count" calculation.
496  		 */
497  
498  		if (nblocks < min_block_count) {
499  			nilfs_err(nilfs->ns_sb,
500  				  "total number of segment blocks %llu exceeds device size (%llu blocks)",
501  				  (unsigned long long)min_block_count,
502  				  (unsigned long long)nblocks);
503  			return -EINVAL;
504  		}
505  	}
506  
507  	nilfs_set_nsegments(nilfs, nsegments);
508  	nilfs->ns_crc_seed = le32_to_cpu(sbp->s_crc_seed);
509  	return 0;
510  }
511  
nilfs_valid_sb(struct nilfs_super_block * sbp)512  static int nilfs_valid_sb(struct nilfs_super_block *sbp)
513  {
514  	static unsigned char sum[4];
515  	const int sumoff = offsetof(struct nilfs_super_block, s_sum);
516  	size_t bytes;
517  	u32 crc;
518  
519  	if (!sbp || le16_to_cpu(sbp->s_magic) != NILFS_SUPER_MAGIC)
520  		return 0;
521  	bytes = le16_to_cpu(sbp->s_bytes);
522  	if (bytes < sumoff + 4 || bytes > BLOCK_SIZE)
523  		return 0;
524  	crc = crc32_le(le32_to_cpu(sbp->s_crc_seed), (unsigned char *)sbp,
525  		       sumoff);
526  	crc = crc32_le(crc, sum, 4);
527  	crc = crc32_le(crc, (unsigned char *)sbp + sumoff + 4,
528  		       bytes - sumoff - 4);
529  	return crc == le32_to_cpu(sbp->s_sum);
530  }
531  
532  /**
533   * nilfs_sb2_bad_offset - check the location of the second superblock
534   * @sbp: superblock raw data buffer
535   * @offset: byte offset of second superblock calculated from device size
536   *
537   * nilfs_sb2_bad_offset() checks if the position on the second
538   * superblock is valid or not based on the filesystem parameters
539   * stored in @sbp.  If @offset points to a location within the segment
540   * area, or if the parameters themselves are not normal, it is
541   * determined to be invalid.
542   *
543   * Return Value: true if invalid, false if valid.
544   */
nilfs_sb2_bad_offset(struct nilfs_super_block * sbp,u64 offset)545  static bool nilfs_sb2_bad_offset(struct nilfs_super_block *sbp, u64 offset)
546  {
547  	unsigned int shift_bits = le32_to_cpu(sbp->s_log_block_size);
548  	u32 blocks_per_segment = le32_to_cpu(sbp->s_blocks_per_segment);
549  	u64 nsegments = le64_to_cpu(sbp->s_nsegments);
550  	u64 index;
551  
552  	if (blocks_per_segment < NILFS_SEG_MIN_BLOCKS ||
553  	    shift_bits > ilog2(NILFS_MAX_BLOCK_SIZE) - BLOCK_SIZE_BITS)
554  		return true;
555  
556  	index = offset >> (shift_bits + BLOCK_SIZE_BITS);
557  	do_div(index, blocks_per_segment);
558  	return index < nsegments;
559  }
560  
nilfs_release_super_block(struct the_nilfs * nilfs)561  static void nilfs_release_super_block(struct the_nilfs *nilfs)
562  {
563  	int i;
564  
565  	for (i = 0; i < 2; i++) {
566  		if (nilfs->ns_sbp[i]) {
567  			brelse(nilfs->ns_sbh[i]);
568  			nilfs->ns_sbh[i] = NULL;
569  			nilfs->ns_sbp[i] = NULL;
570  		}
571  	}
572  }
573  
nilfs_fall_back_super_block(struct the_nilfs * nilfs)574  void nilfs_fall_back_super_block(struct the_nilfs *nilfs)
575  {
576  	brelse(nilfs->ns_sbh[0]);
577  	nilfs->ns_sbh[0] = nilfs->ns_sbh[1];
578  	nilfs->ns_sbp[0] = nilfs->ns_sbp[1];
579  	nilfs->ns_sbh[1] = NULL;
580  	nilfs->ns_sbp[1] = NULL;
581  }
582  
nilfs_swap_super_block(struct the_nilfs * nilfs)583  void nilfs_swap_super_block(struct the_nilfs *nilfs)
584  {
585  	struct buffer_head *tsbh = nilfs->ns_sbh[0];
586  	struct nilfs_super_block *tsbp = nilfs->ns_sbp[0];
587  
588  	nilfs->ns_sbh[0] = nilfs->ns_sbh[1];
589  	nilfs->ns_sbp[0] = nilfs->ns_sbp[1];
590  	nilfs->ns_sbh[1] = tsbh;
591  	nilfs->ns_sbp[1] = tsbp;
592  }
593  
nilfs_load_super_block(struct the_nilfs * nilfs,struct super_block * sb,int blocksize,struct nilfs_super_block ** sbpp)594  static int nilfs_load_super_block(struct the_nilfs *nilfs,
595  				  struct super_block *sb, int blocksize,
596  				  struct nilfs_super_block **sbpp)
597  {
598  	struct nilfs_super_block **sbp = nilfs->ns_sbp;
599  	struct buffer_head **sbh = nilfs->ns_sbh;
600  	u64 sb2off, devsize = bdev_nr_bytes(nilfs->ns_bdev);
601  	int valid[2], swp = 0;
602  
603  	if (devsize < NILFS_SEG_MIN_BLOCKS * NILFS_MIN_BLOCK_SIZE + 4096) {
604  		nilfs_err(sb, "device size too small");
605  		return -EINVAL;
606  	}
607  	sb2off = NILFS_SB2_OFFSET_BYTES(devsize);
608  
609  	sbp[0] = nilfs_read_super_block(sb, NILFS_SB_OFFSET_BYTES, blocksize,
610  					&sbh[0]);
611  	sbp[1] = nilfs_read_super_block(sb, sb2off, blocksize, &sbh[1]);
612  
613  	if (!sbp[0]) {
614  		if (!sbp[1]) {
615  			nilfs_err(sb, "unable to read superblock");
616  			return -EIO;
617  		}
618  		nilfs_warn(sb,
619  			   "unable to read primary superblock (blocksize = %d)",
620  			   blocksize);
621  	} else if (!sbp[1]) {
622  		nilfs_warn(sb,
623  			   "unable to read secondary superblock (blocksize = %d)",
624  			   blocksize);
625  	}
626  
627  	/*
628  	 * Compare two super blocks and set 1 in swp if the secondary
629  	 * super block is valid and newer.  Otherwise, set 0 in swp.
630  	 */
631  	valid[0] = nilfs_valid_sb(sbp[0]);
632  	valid[1] = nilfs_valid_sb(sbp[1]);
633  	swp = valid[1] && (!valid[0] ||
634  			   le64_to_cpu(sbp[1]->s_last_cno) >
635  			   le64_to_cpu(sbp[0]->s_last_cno));
636  
637  	if (valid[swp] && nilfs_sb2_bad_offset(sbp[swp], sb2off)) {
638  		brelse(sbh[1]);
639  		sbh[1] = NULL;
640  		sbp[1] = NULL;
641  		valid[1] = 0;
642  		swp = 0;
643  	}
644  	if (!valid[swp]) {
645  		nilfs_release_super_block(nilfs);
646  		nilfs_err(sb, "couldn't find nilfs on the device");
647  		return -EINVAL;
648  	}
649  
650  	if (!valid[!swp])
651  		nilfs_warn(sb,
652  			   "broken superblock, retrying with spare superblock (blocksize = %d)",
653  			   blocksize);
654  	if (swp)
655  		nilfs_swap_super_block(nilfs);
656  
657  	nilfs->ns_sbwcount = 0;
658  	nilfs->ns_sbwtime = le64_to_cpu(sbp[0]->s_wtime);
659  	nilfs->ns_prot_seq = le64_to_cpu(sbp[valid[1] & !swp]->s_last_seq);
660  	*sbpp = sbp[0];
661  	return 0;
662  }
663  
664  /**
665   * init_nilfs - initialize a NILFS instance.
666   * @nilfs: the_nilfs structure
667   * @sb: super block
668   * @data: mount options
669   *
670   * init_nilfs() performs common initialization per block device (e.g.
671   * reading the super block, getting disk layout information, initializing
672   * shared fields in the_nilfs).
673   *
674   * Return Value: On success, 0 is returned. On error, a negative error
675   * code is returned.
676   */
init_nilfs(struct the_nilfs * nilfs,struct super_block * sb,char * data)677  int init_nilfs(struct the_nilfs *nilfs, struct super_block *sb, char *data)
678  {
679  	struct nilfs_super_block *sbp;
680  	int blocksize;
681  	int err;
682  
683  	down_write(&nilfs->ns_sem);
684  
685  	blocksize = sb_min_blocksize(sb, NILFS_MIN_BLOCK_SIZE);
686  	if (!blocksize) {
687  		nilfs_err(sb, "unable to set blocksize");
688  		err = -EINVAL;
689  		goto out;
690  	}
691  	err = nilfs_load_super_block(nilfs, sb, blocksize, &sbp);
692  	if (err)
693  		goto out;
694  
695  	err = nilfs_store_magic_and_option(sb, sbp, data);
696  	if (err)
697  		goto failed_sbh;
698  
699  	err = nilfs_check_feature_compatibility(sb, sbp);
700  	if (err)
701  		goto failed_sbh;
702  
703  	err = nilfs_get_blocksize(sb, sbp, &blocksize);
704  	if (err)
705  		goto failed_sbh;
706  
707  	if (blocksize < NILFS_MIN_BLOCK_SIZE) {
708  		nilfs_err(sb,
709  			  "couldn't mount because of unsupported filesystem blocksize %d",
710  			  blocksize);
711  		err = -EINVAL;
712  		goto failed_sbh;
713  	}
714  	if (sb->s_blocksize != blocksize) {
715  		int hw_blocksize = bdev_logical_block_size(sb->s_bdev);
716  
717  		if (blocksize < hw_blocksize) {
718  			nilfs_err(sb,
719  				  "blocksize %d too small for device (sector-size = %d)",
720  				  blocksize, hw_blocksize);
721  			err = -EINVAL;
722  			goto failed_sbh;
723  		}
724  		nilfs_release_super_block(nilfs);
725  		if (!sb_set_blocksize(sb, blocksize)) {
726  			nilfs_err(sb, "bad blocksize %d", blocksize);
727  			err = -EINVAL;
728  			goto out;
729  		}
730  
731  		err = nilfs_load_super_block(nilfs, sb, blocksize, &sbp);
732  		if (err)
733  			goto out;
734  			/*
735  			 * Not to failed_sbh; sbh is released automatically
736  			 * when reloading fails.
737  			 */
738  	}
739  	nilfs->ns_blocksize_bits = sb->s_blocksize_bits;
740  	nilfs->ns_blocksize = blocksize;
741  
742  	get_random_bytes(&nilfs->ns_next_generation,
743  			 sizeof(nilfs->ns_next_generation));
744  
745  	err = nilfs_store_disk_layout(nilfs, sbp);
746  	if (err)
747  		goto failed_sbh;
748  
749  	sb->s_maxbytes = nilfs_max_size(sb->s_blocksize_bits);
750  
751  	nilfs->ns_mount_state = le16_to_cpu(sbp->s_state);
752  
753  	err = nilfs_store_log_cursor(nilfs, sbp);
754  	if (err)
755  		goto failed_sbh;
756  
757  	set_nilfs_init(nilfs);
758  	err = 0;
759   out:
760  	up_write(&nilfs->ns_sem);
761  	return err;
762  
763   failed_sbh:
764  	nilfs_release_super_block(nilfs);
765  	goto out;
766  }
767  
nilfs_discard_segments(struct the_nilfs * nilfs,__u64 * segnump,size_t nsegs)768  int nilfs_discard_segments(struct the_nilfs *nilfs, __u64 *segnump,
769  			    size_t nsegs)
770  {
771  	sector_t seg_start, seg_end;
772  	sector_t start = 0, nblocks = 0;
773  	unsigned int sects_per_block;
774  	__u64 *sn;
775  	int ret = 0;
776  
777  	sects_per_block = (1 << nilfs->ns_blocksize_bits) /
778  		bdev_logical_block_size(nilfs->ns_bdev);
779  	for (sn = segnump; sn < segnump + nsegs; sn++) {
780  		nilfs_get_segment_range(nilfs, *sn, &seg_start, &seg_end);
781  
782  		if (!nblocks) {
783  			start = seg_start;
784  			nblocks = seg_end - seg_start + 1;
785  		} else if (start + nblocks == seg_start) {
786  			nblocks += seg_end - seg_start + 1;
787  		} else {
788  			ret = blkdev_issue_discard(nilfs->ns_bdev,
789  						   start * sects_per_block,
790  						   nblocks * sects_per_block,
791  						   GFP_NOFS);
792  			if (ret < 0)
793  				return ret;
794  			nblocks = 0;
795  		}
796  	}
797  	if (nblocks)
798  		ret = blkdev_issue_discard(nilfs->ns_bdev,
799  					   start * sects_per_block,
800  					   nblocks * sects_per_block,
801  					   GFP_NOFS);
802  	return ret;
803  }
804  
nilfs_count_free_blocks(struct the_nilfs * nilfs,sector_t * nblocks)805  int nilfs_count_free_blocks(struct the_nilfs *nilfs, sector_t *nblocks)
806  {
807  	unsigned long ncleansegs;
808  
809  	ncleansegs = nilfs_sufile_get_ncleansegs(nilfs->ns_sufile);
810  	*nblocks = (sector_t)ncleansegs * nilfs->ns_blocks_per_segment;
811  	return 0;
812  }
813  
nilfs_near_disk_full(struct the_nilfs * nilfs)814  int nilfs_near_disk_full(struct the_nilfs *nilfs)
815  {
816  	unsigned long ncleansegs, nincsegs;
817  
818  	ncleansegs = nilfs_sufile_get_ncleansegs(nilfs->ns_sufile);
819  	nincsegs = atomic_read(&nilfs->ns_ndirtyblks) /
820  		nilfs->ns_blocks_per_segment + 1;
821  
822  	return ncleansegs <= nilfs->ns_nrsvsegs + nincsegs;
823  }
824  
nilfs_lookup_root(struct the_nilfs * nilfs,__u64 cno)825  struct nilfs_root *nilfs_lookup_root(struct the_nilfs *nilfs, __u64 cno)
826  {
827  	struct rb_node *n;
828  	struct nilfs_root *root;
829  
830  	spin_lock(&nilfs->ns_cptree_lock);
831  	n = nilfs->ns_cptree.rb_node;
832  	while (n) {
833  		root = rb_entry(n, struct nilfs_root, rb_node);
834  
835  		if (cno < root->cno) {
836  			n = n->rb_left;
837  		} else if (cno > root->cno) {
838  			n = n->rb_right;
839  		} else {
840  			refcount_inc(&root->count);
841  			spin_unlock(&nilfs->ns_cptree_lock);
842  			return root;
843  		}
844  	}
845  	spin_unlock(&nilfs->ns_cptree_lock);
846  
847  	return NULL;
848  }
849  
850  struct nilfs_root *
nilfs_find_or_create_root(struct the_nilfs * nilfs,__u64 cno)851  nilfs_find_or_create_root(struct the_nilfs *nilfs, __u64 cno)
852  {
853  	struct rb_node **p, *parent;
854  	struct nilfs_root *root, *new;
855  	int err;
856  
857  	root = nilfs_lookup_root(nilfs, cno);
858  	if (root)
859  		return root;
860  
861  	new = kzalloc(sizeof(*root), GFP_KERNEL);
862  	if (!new)
863  		return NULL;
864  
865  	spin_lock(&nilfs->ns_cptree_lock);
866  
867  	p = &nilfs->ns_cptree.rb_node;
868  	parent = NULL;
869  
870  	while (*p) {
871  		parent = *p;
872  		root = rb_entry(parent, struct nilfs_root, rb_node);
873  
874  		if (cno < root->cno) {
875  			p = &(*p)->rb_left;
876  		} else if (cno > root->cno) {
877  			p = &(*p)->rb_right;
878  		} else {
879  			refcount_inc(&root->count);
880  			spin_unlock(&nilfs->ns_cptree_lock);
881  			kfree(new);
882  			return root;
883  		}
884  	}
885  
886  	new->cno = cno;
887  	new->ifile = NULL;
888  	new->nilfs = nilfs;
889  	refcount_set(&new->count, 1);
890  	atomic64_set(&new->inodes_count, 0);
891  	atomic64_set(&new->blocks_count, 0);
892  
893  	rb_link_node(&new->rb_node, parent, p);
894  	rb_insert_color(&new->rb_node, &nilfs->ns_cptree);
895  
896  	spin_unlock(&nilfs->ns_cptree_lock);
897  
898  	err = nilfs_sysfs_create_snapshot_group(new);
899  	if (err) {
900  		kfree(new);
901  		new = NULL;
902  	}
903  
904  	return new;
905  }
906  
nilfs_put_root(struct nilfs_root * root)907  void nilfs_put_root(struct nilfs_root *root)
908  {
909  	struct the_nilfs *nilfs = root->nilfs;
910  
911  	if (refcount_dec_and_lock(&root->count, &nilfs->ns_cptree_lock)) {
912  		rb_erase(&root->rb_node, &nilfs->ns_cptree);
913  		spin_unlock(&nilfs->ns_cptree_lock);
914  
915  		nilfs_sysfs_delete_snapshot_group(root);
916  		iput(root->ifile);
917  
918  		kfree(root);
919  	}
920  }
921