mark_buffer_dirty(sbi->s_root_bh);
}
- affs_brelse(sbi->s_bmap_bh);
if (sbi->s_prefix)
kfree(sbi->s_prefix);
- kfree(sbi->s_bitmap);
+ affs_free_bitmap(sb);
affs_brelse(sbi->s_root_bh);
kfree(sbi);
sb->s_fs_info = NULL;
gid_t gid;
int reserved;
unsigned long mount_flags;
+ int tmp_flags; /* fix remount prototype... */
pr_debug("AFFS: read_super(%s)\n",data ? (const char *)data : "no options");
printk(KERN_NOTICE "AFFS: Dircache FS - mounting %s read only\n",
sb->s_id);
sb->s_flags |= MS_RDONLY;
- sbi->s_flags |= SF_READONLY;
}
switch (chksum) {
case MUFS_FS:
sbi->s_root_bh = root_bh;
/* N.B. after this point s_root_bh must be released */
- if (affs_init_bitmap(sb))
+ tmp_flags = sb->s_flags;
+ if (affs_init_bitmap(sb, &tmp_flags))
goto out_error;
+ sb->s_flags = tmp_flags;
/* set up enough so that it can read an inode */
int reserved;
int root_block;
unsigned long mount_flags;
- unsigned long read_only = sbi->s_flags & SF_READONLY;
+ int res = 0;
pr_debug("AFFS: remount(flags=0x%x,opts=\"%s\")\n",*flags,data);
if (!parse_options(data,&uid,&gid,&mode,&reserved,&root_block,
&blocksize,&sbi->s_prefix,sbi->s_volume,&mount_flags))
return -EINVAL;
- sbi->s_flags = mount_flags | read_only;
+ sbi->s_flags = mount_flags;
sbi->s_mode = mode;
sbi->s_uid = uid;
sbi->s_gid = gid;
sb->s_dirt = 1;
while (sb->s_dirt)
affs_write_super(sb);
- sb->s_flags |= MS_RDONLY;
- } else if (!(sbi->s_flags & SF_READONLY)) {
- sb->s_flags &= ~MS_RDONLY;
- } else {
- affs_warning(sb,"remount","Cannot remount fs read/write because of errors");
- return -EINVAL;
- }
- return 0;
+ affs_free_bitmap(sb);
+ } else
+ res = affs_init_bitmap(sb, flags);
+
+ return res;
}
static int