|
@@ -71,23 +71,23 @@ struct kmem_cache *nilfs_transaction_cachep;
|
|
|
struct kmem_cache *nilfs_segbuf_cachep;
|
|
|
struct kmem_cache *nilfs_btree_path_cache;
|
|
|
|
|
|
-static int nilfs_setup_super(struct nilfs_sb_info *sbi, int is_mount);
|
|
|
+static int nilfs_setup_super(struct super_block *sb, int is_mount);
|
|
|
static int nilfs_remount(struct super_block *sb, int *flags, char *data);
|
|
|
|
|
|
-static void nilfs_set_error(struct nilfs_sb_info *sbi)
|
|
|
+static void nilfs_set_error(struct super_block *sb)
|
|
|
{
|
|
|
- struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
struct nilfs_super_block **sbp;
|
|
|
|
|
|
down_write(&nilfs->ns_sem);
|
|
|
if (!(nilfs->ns_mount_state & NILFS_ERROR_FS)) {
|
|
|
nilfs->ns_mount_state |= NILFS_ERROR_FS;
|
|
|
- sbp = nilfs_prepare_super(sbi, 0);
|
|
|
+ sbp = nilfs_prepare_super(sb, 0);
|
|
|
if (likely(sbp)) {
|
|
|
sbp[0]->s_state |= cpu_to_le16(NILFS_ERROR_FS);
|
|
|
if (sbp[1])
|
|
|
sbp[1]->s_state |= cpu_to_le16(NILFS_ERROR_FS);
|
|
|
- nilfs_commit_super(sbi, NILFS_SB_COMMIT_ALL);
|
|
|
+ nilfs_commit_super(sb, NILFS_SB_COMMIT_ALL);
|
|
|
}
|
|
|
}
|
|
|
up_write(&nilfs->ns_sem);
|
|
@@ -108,7 +108,7 @@ static void nilfs_set_error(struct nilfs_sb_info *sbi)
|
|
|
void nilfs_error(struct super_block *sb, const char *function,
|
|
|
const char *fmt, ...)
|
|
|
{
|
|
|
- struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
struct va_format vaf;
|
|
|
va_list args;
|
|
|
|
|
@@ -123,7 +123,7 @@ void nilfs_error(struct super_block *sb, const char *function,
|
|
|
va_end(args);
|
|
|
|
|
|
if (!(sb->s_flags & MS_RDONLY)) {
|
|
|
- nilfs_set_error(sbi);
|
|
|
+ nilfs_set_error(sb);
|
|
|
|
|
|
if (nilfs_test_opt(nilfs, ERRORS_RO)) {
|
|
|
printk(KERN_CRIT "Remounting filesystem read-only\n");
|
|
@@ -188,9 +188,9 @@ void nilfs_destroy_inode(struct inode *inode)
|
|
|
call_rcu(&inode->i_rcu, nilfs_i_callback);
|
|
|
}
|
|
|
|
|
|
-static int nilfs_sync_super(struct nilfs_sb_info *sbi, int flag)
|
|
|
+static int nilfs_sync_super(struct super_block *sb, int flag)
|
|
|
{
|
|
|
- struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
int err;
|
|
|
|
|
|
retry:
|
|
@@ -262,10 +262,10 @@ void nilfs_set_log_cursor(struct nilfs_super_block *sbp,
|
|
|
spin_unlock(&nilfs->ns_last_segment_lock);
|
|
|
}
|
|
|
|
|
|
-struct nilfs_super_block **nilfs_prepare_super(struct nilfs_sb_info *sbi,
|
|
|
+struct nilfs_super_block **nilfs_prepare_super(struct super_block *sb,
|
|
|
int flip)
|
|
|
{
|
|
|
- struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
struct nilfs_super_block **sbp = nilfs->ns_sbp;
|
|
|
|
|
|
/* nilfs->ns_sem must be locked by the caller. */
|
|
@@ -275,7 +275,7 @@ struct nilfs_super_block **nilfs_prepare_super(struct nilfs_sb_info *sbi,
|
|
|
memcpy(sbp[0], sbp[1], nilfs->ns_sbsize);
|
|
|
} else {
|
|
|
printk(KERN_CRIT "NILFS: superblock broke on dev %s\n",
|
|
|
- sbi->s_super->s_id);
|
|
|
+ sb->s_id);
|
|
|
return NULL;
|
|
|
}
|
|
|
} else if (sbp[1] &&
|
|
@@ -289,9 +289,9 @@ struct nilfs_super_block **nilfs_prepare_super(struct nilfs_sb_info *sbi,
|
|
|
return sbp;
|
|
|
}
|
|
|
|
|
|
-int nilfs_commit_super(struct nilfs_sb_info *sbi, int flag)
|
|
|
+int nilfs_commit_super(struct super_block *sb, int flag)
|
|
|
{
|
|
|
- struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
struct nilfs_super_block **sbp = nilfs->ns_sbp;
|
|
|
time_t t;
|
|
|
|
|
@@ -311,27 +311,28 @@ int nilfs_commit_super(struct nilfs_sb_info *sbi, int flag)
|
|
|
nilfs->ns_sbsize));
|
|
|
}
|
|
|
clear_nilfs_sb_dirty(nilfs);
|
|
|
- return nilfs_sync_super(sbi, flag);
|
|
|
+ return nilfs_sync_super(sb, flag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* nilfs_cleanup_super() - write filesystem state for cleanup
|
|
|
- * @sbi: nilfs_sb_info to be unmounted or degraded to read-only
|
|
|
+ * @sb: super block instance to be unmounted or degraded to read-only
|
|
|
*
|
|
|
* This function restores state flags in the on-disk super block.
|
|
|
* This will set "clean" flag (i.e. NILFS_VALID_FS) unless the
|
|
|
* filesystem was not clean previously.
|
|
|
*/
|
|
|
-int nilfs_cleanup_super(struct nilfs_sb_info *sbi)
|
|
|
+int nilfs_cleanup_super(struct super_block *sb)
|
|
|
{
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
struct nilfs_super_block **sbp;
|
|
|
int flag = NILFS_SB_COMMIT;
|
|
|
int ret = -EIO;
|
|
|
|
|
|
- sbp = nilfs_prepare_super(sbi, 0);
|
|
|
+ sbp = nilfs_prepare_super(sb, 0);
|
|
|
if (sbp) {
|
|
|
- sbp[0]->s_state = cpu_to_le16(sbi->s_nilfs->ns_mount_state);
|
|
|
- nilfs_set_log_cursor(sbp[0], sbi->s_nilfs);
|
|
|
+ sbp[0]->s_state = cpu_to_le16(nilfs->ns_mount_state);
|
|
|
+ nilfs_set_log_cursor(sbp[0], nilfs);
|
|
|
if (sbp[1] && sbp[0]->s_last_cno == sbp[1]->s_last_cno) {
|
|
|
/*
|
|
|
* make the "clean" flag also to the opposite
|
|
@@ -341,7 +342,7 @@ int nilfs_cleanup_super(struct nilfs_sb_info *sbi)
|
|
|
sbp[1]->s_state = sbp[0]->s_state;
|
|
|
flag = NILFS_SB_COMMIT_ALL;
|
|
|
}
|
|
|
- ret = nilfs_commit_super(sbi, flag);
|
|
|
+ ret = nilfs_commit_super(sb, flag);
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
@@ -351,11 +352,11 @@ static void nilfs_put_super(struct super_block *sb)
|
|
|
struct nilfs_sb_info *sbi = NILFS_SB(sb);
|
|
|
struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
|
|
|
- nilfs_detach_segment_constructor(sbi);
|
|
|
+ nilfs_detach_log_writer(sb);
|
|
|
|
|
|
if (!(sb->s_flags & MS_RDONLY)) {
|
|
|
down_write(&nilfs->ns_sem);
|
|
|
- nilfs_cleanup_super(sbi);
|
|
|
+ nilfs_cleanup_super(sb);
|
|
|
up_write(&nilfs->ns_sem);
|
|
|
}
|
|
|
|
|
@@ -371,8 +372,7 @@ static void nilfs_put_super(struct super_block *sb)
|
|
|
|
|
|
static int nilfs_sync_fs(struct super_block *sb, int wait)
|
|
|
{
|
|
|
- struct nilfs_sb_info *sbi = NILFS_SB(sb);
|
|
|
- struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
struct nilfs_super_block **sbp;
|
|
|
int err = 0;
|
|
|
|
|
@@ -382,10 +382,10 @@ static int nilfs_sync_fs(struct super_block *sb, int wait)
|
|
|
|
|
|
down_write(&nilfs->ns_sem);
|
|
|
if (nilfs_sb_dirty(nilfs)) {
|
|
|
- sbp = nilfs_prepare_super(sbi, nilfs_sb_will_flip(nilfs));
|
|
|
+ sbp = nilfs_prepare_super(sb, nilfs_sb_will_flip(nilfs));
|
|
|
if (likely(sbp)) {
|
|
|
nilfs_set_log_cursor(sbp[0], nilfs);
|
|
|
- nilfs_commit_super(sbi, NILFS_SB_COMMIT);
|
|
|
+ nilfs_commit_super(sb, NILFS_SB_COMMIT);
|
|
|
}
|
|
|
}
|
|
|
up_write(&nilfs->ns_sem);
|
|
@@ -393,10 +393,10 @@ static int nilfs_sync_fs(struct super_block *sb, int wait)
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-int nilfs_attach_checkpoint(struct nilfs_sb_info *sbi, __u64 cno, int curr_mnt,
|
|
|
+int nilfs_attach_checkpoint(struct super_block *sb, __u64 cno, int curr_mnt,
|
|
|
struct nilfs_root **rootp)
|
|
|
{
|
|
|
- struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
struct nilfs_root *root;
|
|
|
struct nilfs_checkpoint *raw_cp;
|
|
|
struct buffer_head *bh_cp;
|
|
@@ -425,7 +425,7 @@ int nilfs_attach_checkpoint(struct nilfs_sb_info *sbi, __u64 cno, int curr_mnt,
|
|
|
goto failed;
|
|
|
}
|
|
|
|
|
|
- err = nilfs_ifile_read(sbi->s_super, root, nilfs->ns_inode_size,
|
|
|
+ err = nilfs_ifile_read(sb, root, nilfs->ns_inode_size,
|
|
|
&raw_cp->cp_ifile_inode, &root->ifile);
|
|
|
if (err)
|
|
|
goto failed_bh;
|
|
@@ -449,8 +449,7 @@ int nilfs_attach_checkpoint(struct nilfs_sb_info *sbi, __u64 cno, int curr_mnt,
|
|
|
|
|
|
static int nilfs_freeze(struct super_block *sb)
|
|
|
{
|
|
|
- struct nilfs_sb_info *sbi = NILFS_SB(sb);
|
|
|
- struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
int err;
|
|
|
|
|
|
if (sb->s_flags & MS_RDONLY)
|
|
@@ -458,21 +457,20 @@ static int nilfs_freeze(struct super_block *sb)
|
|
|
|
|
|
/* Mark super block clean */
|
|
|
down_write(&nilfs->ns_sem);
|
|
|
- err = nilfs_cleanup_super(sbi);
|
|
|
+ err = nilfs_cleanup_super(sb);
|
|
|
up_write(&nilfs->ns_sem);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
static int nilfs_unfreeze(struct super_block *sb)
|
|
|
{
|
|
|
- struct nilfs_sb_info *sbi = NILFS_SB(sb);
|
|
|
- struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
|
|
|
if (sb->s_flags & MS_RDONLY)
|
|
|
return 0;
|
|
|
|
|
|
down_write(&nilfs->ns_sem);
|
|
|
- nilfs_setup_super(sbi, false);
|
|
|
+ nilfs_setup_super(sb, false);
|
|
|
up_write(&nilfs->ns_sem);
|
|
|
return 0;
|
|
|
}
|
|
@@ -668,15 +666,15 @@ nilfs_set_default_options(struct super_block *sb,
|
|
|
NILFS_MOUNT_ERRORS_RO | NILFS_MOUNT_BARRIER;
|
|
|
}
|
|
|
|
|
|
-static int nilfs_setup_super(struct nilfs_sb_info *sbi, int is_mount)
|
|
|
+static int nilfs_setup_super(struct super_block *sb, int is_mount)
|
|
|
{
|
|
|
- struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
struct nilfs_super_block **sbp;
|
|
|
int max_mnt_count;
|
|
|
int mnt_count;
|
|
|
|
|
|
/* nilfs->ns_sem must be locked by the caller. */
|
|
|
- sbp = nilfs_prepare_super(sbi, 0);
|
|
|
+ sbp = nilfs_prepare_super(sb, 0);
|
|
|
if (!sbp)
|
|
|
return -EIO;
|
|
|
|
|
@@ -707,7 +705,7 @@ skip_mount_setup:
|
|
|
/* synchronize sbp[1] with sbp[0] */
|
|
|
if (sbp[1])
|
|
|
memcpy(sbp[1], sbp[0], nilfs->ns_sbsize);
|
|
|
- return nilfs_commit_super(sbi, NILFS_SB_COMMIT_ALL);
|
|
|
+ return nilfs_commit_super(sb, NILFS_SB_COMMIT_ALL);
|
|
|
}
|
|
|
|
|
|
struct nilfs_super_block *nilfs_read_super_block(struct super_block *sb,
|
|
@@ -841,7 +839,7 @@ static int nilfs_attach_snapshot(struct super_block *s, __u64 cno,
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- ret = nilfs_attach_checkpoint(NILFS_SB(s), cno, false, &root);
|
|
|
+ ret = nilfs_attach_checkpoint(s, cno, false, &root);
|
|
|
if (ret) {
|
|
|
printk(KERN_ERR "NILFS: error loading snapshot "
|
|
|
"(checkpoint number=%llu).\n",
|
|
@@ -938,7 +936,7 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent)
|
|
|
}
|
|
|
sbi->s_nilfs = nilfs;
|
|
|
|
|
|
- err = init_nilfs(nilfs, sbi, (char *)data);
|
|
|
+ err = init_nilfs(nilfs, sb, (char *)data);
|
|
|
if (err)
|
|
|
goto failed_nilfs;
|
|
|
|
|
@@ -950,12 +948,12 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent)
|
|
|
bdi = sb->s_bdev->bd_inode->i_mapping->backing_dev_info;
|
|
|
sb->s_bdi = bdi ? : &default_backing_dev_info;
|
|
|
|
|
|
- err = load_nilfs(nilfs, sbi);
|
|
|
+ err = load_nilfs(nilfs, sb);
|
|
|
if (err)
|
|
|
goto failed_nilfs;
|
|
|
|
|
|
cno = nilfs_last_cno(nilfs);
|
|
|
- err = nilfs_attach_checkpoint(sbi, cno, true, &fsroot);
|
|
|
+ err = nilfs_attach_checkpoint(sb, cno, true, &fsroot);
|
|
|
if (err) {
|
|
|
printk(KERN_ERR "NILFS: error loading last checkpoint "
|
|
|
"(checkpoint number=%llu).\n", (unsigned long long)cno);
|
|
@@ -963,7 +961,7 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent)
|
|
|
}
|
|
|
|
|
|
if (!(sb->s_flags & MS_RDONLY)) {
|
|
|
- err = nilfs_attach_segment_constructor(sbi, fsroot);
|
|
|
+ err = nilfs_attach_log_writer(sb, fsroot);
|
|
|
if (err)
|
|
|
goto failed_checkpoint;
|
|
|
}
|
|
@@ -976,14 +974,14 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent)
|
|
|
|
|
|
if (!(sb->s_flags & MS_RDONLY)) {
|
|
|
down_write(&nilfs->ns_sem);
|
|
|
- nilfs_setup_super(sbi, true);
|
|
|
+ nilfs_setup_super(sb, true);
|
|
|
up_write(&nilfs->ns_sem);
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
failed_segctor:
|
|
|
- nilfs_detach_segment_constructor(sbi);
|
|
|
+ nilfs_detach_log_writer(sb);
|
|
|
|
|
|
failed_checkpoint:
|
|
|
nilfs_put_root(fsroot);
|
|
@@ -1004,8 +1002,7 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent)
|
|
|
|
|
|
static int nilfs_remount(struct super_block *sb, int *flags, char *data)
|
|
|
{
|
|
|
- struct nilfs_sb_info *sbi = NILFS_SB(sb);
|
|
|
- struct the_nilfs *nilfs = sbi->s_nilfs;
|
|
|
+ struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
|
|
|
unsigned long old_sb_flags;
|
|
|
unsigned long old_mount_opt;
|
|
|
int err;
|
|
@@ -1031,8 +1028,8 @@ static int nilfs_remount(struct super_block *sb, int *flags, char *data)
|
|
|
if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
|
|
|
goto out;
|
|
|
if (*flags & MS_RDONLY) {
|
|
|
- /* Shutting down the segment constructor */
|
|
|
- nilfs_detach_segment_constructor(sbi);
|
|
|
+ /* Shutting down log writer */
|
|
|
+ nilfs_detach_log_writer(sb);
|
|
|
sb->s_flags |= MS_RDONLY;
|
|
|
|
|
|
/*
|
|
@@ -1040,7 +1037,7 @@ static int nilfs_remount(struct super_block *sb, int *flags, char *data)
|
|
|
* the RDONLY flag and then mark the partition as valid again.
|
|
|
*/
|
|
|
down_write(&nilfs->ns_sem);
|
|
|
- nilfs_cleanup_super(sbi);
|
|
|
+ nilfs_cleanup_super(sb);
|
|
|
up_write(&nilfs->ns_sem);
|
|
|
} else {
|
|
|
__u64 features;
|
|
@@ -1067,12 +1064,12 @@ static int nilfs_remount(struct super_block *sb, int *flags, char *data)
|
|
|
sb->s_flags &= ~MS_RDONLY;
|
|
|
|
|
|
root = NILFS_I(sb->s_root->d_inode)->i_root;
|
|
|
- err = nilfs_attach_segment_constructor(sbi, root);
|
|
|
+ err = nilfs_attach_log_writer(sb, root);
|
|
|
if (err)
|
|
|
goto restore_opts;
|
|
|
|
|
|
down_write(&nilfs->ns_sem);
|
|
|
- nilfs_setup_super(sbi, true);
|
|
|
+ nilfs_setup_super(sb, true);
|
|
|
up_write(&nilfs->ns_sem);
|
|
|
}
|
|
|
out:
|