]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/ufs/super.c
Merge branch 'fixes-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville...
[karo-tx-linux.git] / fs / ufs / super.c
index 87f6b51a895d500b8606da7aadc7d9ec8e5a18ac..c78c04fd993fe5fe1b95186d8f4d33ecdcf7e8ad 100644 (file)
 #include <linux/buffer_head.h>
 #include <linux/vfs.h>
 #include <linux/log2.h>
+#include <linux/mount.h>
+#include <linux/seq_file.h>
 
+#include "ufs.h"
 #include "swab.h"
 #include "util.h"
 
@@ -286,10 +289,21 @@ void ufs_warning (struct super_block * sb, const char * function,
 }
 
 enum {
-       Opt_type_old, Opt_type_sunx86, Opt_type_sun, Opt_type_sunos, Opt_type_44bsd,
-       Opt_type_ufs2, Opt_type_hp, Opt_type_nextstepcd, Opt_type_nextstep,
-       Opt_type_openstep, Opt_onerror_panic, Opt_onerror_lock,
-       Opt_onerror_umount, Opt_onerror_repair, Opt_err
+       Opt_type_old = UFS_MOUNT_UFSTYPE_OLD,
+       Opt_type_sunx86 = UFS_MOUNT_UFSTYPE_SUNx86,
+       Opt_type_sun = UFS_MOUNT_UFSTYPE_SUN,
+       Opt_type_sunos = UFS_MOUNT_UFSTYPE_SUNOS,
+       Opt_type_44bsd = UFS_MOUNT_UFSTYPE_44BSD,
+       Opt_type_ufs2 = UFS_MOUNT_UFSTYPE_UFS2,
+       Opt_type_hp = UFS_MOUNT_UFSTYPE_HP,
+       Opt_type_nextstepcd = UFS_MOUNT_UFSTYPE_NEXTSTEP_CD,
+       Opt_type_nextstep = UFS_MOUNT_UFSTYPE_NEXTSTEP,
+       Opt_type_openstep = UFS_MOUNT_UFSTYPE_OPENSTEP,
+       Opt_onerror_panic = UFS_MOUNT_ONERROR_PANIC,
+       Opt_onerror_lock = UFS_MOUNT_ONERROR_LOCK,
+       Opt_onerror_umount = UFS_MOUNT_ONERROR_UMOUNT,
+       Opt_onerror_repair = UFS_MOUNT_ONERROR_REPAIR,
+       Opt_err
 };
 
 static match_table_t tokens = {
@@ -304,6 +318,7 @@ static match_table_t tokens = {
        {Opt_type_nextstepcd, "ufstype=nextstep-cd"},
        {Opt_type_nextstep, "ufstype=nextstep"},
        {Opt_type_openstep, "ufstype=openstep"},
+/*end of possible ufs types */
        {Opt_onerror_panic, "onerror=panic"},
        {Opt_onerror_lock, "onerror=lock"},
        {Opt_onerror_umount, "onerror=umount"},
@@ -927,9 +942,9 @@ magic_found:
         */
        if (((flags & UFS_ST_MASK) == UFS_ST_44BSD) ||
          ((flags & UFS_ST_MASK) == UFS_ST_OLD) ||
-         (((flags & UFS_ST_MASK) == UFS_ST_SUN || 
+         (((flags & UFS_ST_MASK) == UFS_ST_SUN ||
            (flags & UFS_ST_MASK) == UFS_ST_SUNOS ||
-         (flags & UFS_ST_MASK) == UFS_ST_SUNx86) && 
+         (flags & UFS_ST_MASK) == UFS_ST_SUNx86) &&
          (ufs_get_fs_state(sb, usb1, usb3) == (UFS_FSOK - fs32_to_cpu(sb, usb1->fs_time))))) {
                switch(usb1->fs_clean) {
                case UFS_FSCLEAN:
@@ -1206,6 +1221,26 @@ static int ufs_remount (struct super_block *sb, int *mount_flags, char *data)
        return 0;
 }
 
+static int ufs_show_options(struct seq_file *seq, struct vfsmount *vfs)
+{
+       struct ufs_sb_info *sbi = UFS_SB(vfs->mnt_sb);
+       unsigned mval = sbi->s_mount_opt & UFS_MOUNT_UFSTYPE;
+       struct match_token *tp = tokens;
+
+       while (tp->token != Opt_onerror_panic && tp->token != mval)
+               ++tp;
+       BUG_ON(tp->token == Opt_onerror_panic);
+       seq_printf(seq, ",%s", tp->pattern);
+
+       mval = sbi->s_mount_opt & UFS_MOUNT_ONERROR;
+       while (tp->token != Opt_err && tp->token != mval)
+               ++tp;
+       BUG_ON(tp->token == Opt_err);
+       seq_printf(seq, ",%s", tp->pattern);
+
+       return 0;
+}
+
 static int ufs_statfs(struct dentry *dentry, struct kstatfs *buf)
 {
        struct super_block *sb = dentry->d_sb;
@@ -1298,6 +1333,7 @@ static const struct super_operations ufs_super_ops = {
        .write_super    = ufs_write_super,
        .statfs         = ufs_statfs,
        .remount_fs     = ufs_remount,
+       .show_options   = ufs_show_options,
 #ifdef CONFIG_QUOTA
        .quota_read     = ufs_quota_read,
        .quota_write    = ufs_quota_write,