diff options
| author | Joel Becker <joel.becker@oracle.com> | 2009-10-29 01:28:24 -0400 |
|---|---|---|
| committer | Joel Becker <joel.becker@oracle.com> | 2009-10-29 01:28:24 -0400 |
| commit | fb5cbe9efd741b16e72133613747f76490bbecd3 (patch) | |
| tree | 014ef905e4c4ff708ad7dbceef445a2e0e567757 /fs | |
| parent | 964fe080d94db82a3268443e9b9ece4c60246414 (diff) | |
ocfs2: Return -EINVAL when a device is not ocfs2.
In case of non-modular kernels the root filesystem is mounted by trying
several filesystems. If ocfs2 was tried before the actual filesystem
type, the mount would fail because ocfs2_sb_probe() returns -EAGAIN
instead of -EINVAL. ocfs2 will now return -EINVAL properly.
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Reported-by: Laszlo Attila Toth <panther@balabit.hu>
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/ocfs2/super.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index c0e48aeebb1c..960673004df1 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c | |||
| @@ -773,18 +773,20 @@ static int ocfs2_sb_probe(struct super_block *sb, | |||
| 773 | if (tmpstat < 0) { | 773 | if (tmpstat < 0) { |
| 774 | status = tmpstat; | 774 | status = tmpstat; |
| 775 | mlog_errno(status); | 775 | mlog_errno(status); |
| 776 | goto bail; | 776 | break; |
| 777 | } | 777 | } |
| 778 | di = (struct ocfs2_dinode *) (*bh)->b_data; | 778 | di = (struct ocfs2_dinode *) (*bh)->b_data; |
| 779 | memset(stats, 0, sizeof(struct ocfs2_blockcheck_stats)); | 779 | memset(stats, 0, sizeof(struct ocfs2_blockcheck_stats)); |
| 780 | spin_lock_init(&stats->b_lock); | 780 | spin_lock_init(&stats->b_lock); |
| 781 | status = ocfs2_verify_volume(di, *bh, blksize, stats); | 781 | tmpstat = ocfs2_verify_volume(di, *bh, blksize, stats); |
| 782 | if (status >= 0) | 782 | if (tmpstat < 0) { |
| 783 | goto bail; | 783 | brelse(*bh); |
| 784 | brelse(*bh); | 784 | *bh = NULL; |
| 785 | *bh = NULL; | 785 | } |
| 786 | if (status != -EAGAIN) | 786 | if (tmpstat != -EAGAIN) { |
| 787 | status = tmpstat; | ||
| 787 | break; | 788 | break; |
| 789 | } | ||
| 788 | } | 790 | } |
| 789 | 791 | ||
| 790 | bail: | 792 | bail: |
