Commit Graph

2325 Commits

Author SHA1 Message Date
dholland
4b344787e1 Make the inode fields in the 64-bit superblock 64 bits wide.
Reasoning as before.

Note that I am not going through and checking for 64->32 truncations
in inode numbers; I'm sure there are quite a few, but that's a project
for later.
2015-09-01 06:11:06 +00:00
dholland
4d398b859d Add byteswapping to the dinode accessors.
This prevents regressions in the ulfs code when switching to the new
accessors. Note that while adding byteswapping to the other accessors
is straightforward, I haven't done it yet; and that also is not enough
to make LFS_EI work, because there are places lying around that bypass
the accessors for one reason and another and all of them need to be
updated. That is going to have to wait for a later day as LFS_EI is
not on the critical path right now.
2015-09-01 06:10:16 +00:00
dholland
d7cf929e20 Propagate fix from lfs:
For non-devices, have getattr (and thus stat) produce NODEV in the
rdev field, instead of leaking the address of the first direct block.
2015-09-01 06:09:23 +00:00
dholland
da32f22c2a Use the lfs dinode accessors in place of the ufs-derived ones.
(Mostly.)

The ufs-derived ones are fake structure member macros, which are gross
and not very safe. Also, it seems that a lot of places in the lfs code
were using the ffsv1 branch of them unconditionally, and this way it's
guaranteed all those places have been updated.

Found while doing this: for non-devices, have getattr produce NODEV
in the rdev field instead of leaking the address of the first direct
block.
2015-09-01 06:08:37 +00:00
mlelstv
a78588c68c Fix IFILE pointer calculation when scanning freelist. 2015-08-29 21:04:22 +00:00
hannken
ff601864ae lfs_writevnodes: replace mnt_vnodelist traversal with vfs_vnode_iterator. 2015-08-21 07:35:56 +00:00
dholland
c9cfc4bd98 Part two of dinodes; use the same union everywhere.
(previously the ufs-derived code had things set up slightly different)

Remove a bunch of associated mess.
2015-08-19 20:33:29 +00:00
dholland
b1828e0ba3 Hack up dinode usage to be 64 vs. 32 as needed. Part 1.
(This part changes the native lfs code; the ufs-derived code already
has 64 vs. 32 logic, but as aspects of it are unsafe, and don't
entirely interoperate cleanly with the lfs 64/32 stuff, pass 2 will be
rehashing that.)
2015-08-12 18:28:00 +00:00
dholland
1c8e2a4061 Make the inode number in the 64-bit dinode 64 bits wide, like the
other lfs64 on-disk inode numbers; I've been doing that since this is
a new format and we may as well take the opportunity. This does assume
that more than 4 billion files on a single volume becomes desirable;
but for an average file size of 10K all that takes is a 40 TB volume,
and it's not that hard to make one of those these days if you want to
badly enough.
2015-08-12 18:27:18 +00:00
dholland
e54b457c15 Provide 32-bit and 64-bit versions of FINFO.
This also entailed sorting out part of struct segment, as that
contains a pointer into the current FINFO data.
2015-08-12 18:27:01 +00:00
dholland
2e090556c4 Make 32-bit and 64-bit versions of SEGSUM.
Also fix some of the FINFO handling as it's closely entangled.
2015-08-12 18:26:26 +00:00
dholland
32577c4f1c Add IFILE32 and IFILE64 structures for the on-disk ifile entries.
Add and use accessors. There are also a bunch of places that cast and
I hope I've found them all...
2015-08-12 18:25:51 +00:00
dholland
f11e4edeba Make 32-bit and 64-bit versions of CLEANERINFO.
XXX: while this is written to disk, it seems like much of it would
XXX: be better set up as a commpage shared with the cleaner.
2015-08-12 18:25:03 +00:00
dholland
aaf6e0acef Widen several of the fields of BLOCK_INFO to 64 bits.
Keep the old BLOCK_INFO as BLOCK_INFO_70, and version the fcntls that
use it.

Note that BLOCK_INFO_70 has 64-bit padding issues so that it's
different on 32-bit and 64-bit machines. This has been fixed. However,
BLOCK_INFO also contains a pointer, so compat32 stuff for 32-on-64 is
still needed and doesn't currently exist.
2015-08-12 18:24:14 +00:00
dholland
e1e4bfc43e Fix botched syscall_package. HI CHRISTOS 2015-08-12 18:23:59 +00:00
dholland
104ce729d4 Move the security checks for lfs_bmapv/lfs_markv into those functions.
(instead of the system call entry points)

Avoids duplication.

While touching these, pass the lwp around instead of the proc -- the
latter was there for no other reason than because once upon a time
struct proc was the first argument of all syscalls.

(For that matter, why not just use curlwp instead of passing it around
all over the place? The cost of passing it to every syscall probably
exceeds the cost of loading it from curcpu, even on machines where
it's not just kept in a register all the time.)
2015-08-12 18:23:47 +00:00
dholland
17964a9f43 Fix assorted 64->32 truncations related to BLOCK_INFO.
Also make note of a cleaner limitation: it seems that when it goes to
coalesce discontiguous files, it mallocs an array with one BLOCK_INFO
for every block in the file. Therefore, with 64-bit LFS, on a 32-bit
platform it will be possible to have files large enough to overflow
the cleaner's address space. Currently these will be skipped and cause
warnings via syslog.

At some point someone should rewrite the logic to coalesce files to
use chunks of some reasonable size, as discontinuity between such
chunks is immaterial and mallocing this much space is silly and
fragile. Also, the kernel only accepts up to 65536 blocks at a time
for bmapv and markv, so processing more than this at once probably
isn't useful and may not even work currently. I don't want to change
this around just now as it's not entirely trivial.
2015-08-12 18:23:16 +00:00
riastradh
6625d44d90 Need wapbl transaction around ffs_blkfree_cg. Fixes wapbl+discard. 2015-08-12 14:52:35 +00:00
mlelstv
7454f7165e don't crash when printing error messages when there are no credentials.
don't abuse the printed uid to log the inode number.

The printing/logging of error messages should be simplified.
2015-08-08 08:18:52 +00:00
dholland
6ad7a6672a Simplify some leftover code and remove some old assertions.
Last year when I killed off some evil dirop-related macros, I added
these assertions because if the things they asserted weren't true we'd
be leaking vnodes. Well, it seems that the code at the time did leak
vnodes, so certain failure cases (e.g. mkdir with disk full) would
assert. Nobody apparently tripped on this in the past fourteen months,
until I broke balloc so it always failed (unrelatedly) while working
on some LFS64 changes.

However, the vnode leak has since been removed by hannken@ as part of
the vnode cache changes, so the assertions are now superfluous;
instead, just make sure *vpp gets nulled on failure, and don't worry
about whether or not VU_DIROP is set as it shouldn't matter any more.

XXX: there's still a lot of gratuitous pointer aliasing in here that
should be tidied away.
2015-08-03 17:33:54 +00:00
dholland
d36f790b9a whoops, fix 32-bit build 2015-08-02 20:23:21 +00:00
dholland
a296d73dae Pass the fs object to LFS_MAX_DADDR so it can check lfs_is64.
Remove some hackish intentional 64->32 truncations next to the checks
using LFS_MAX_DADDR, and tackle the problem they handled in bmap
instead.

The problem: the magic block pointer value UNWRITTEN has magic value
-2, and if it's not handled specifically, uint32 -> uint64 promotion
turns it into 4294967294, which then causes consternation and
monkeyhouse downstream.

What's here is still kind of a hack, but it's a step forward.
2015-08-02 18:18:46 +00:00
dholland
9e5184b86b Add a (draft) 64-bit superblock. Make things build again.
Add pieces of support for using both superblock types where
convenient, and specifically to the superblock accessors, but don't
actually enable it anywhere.

First substantive step on PR 50000.
2015-08-02 18:18:09 +00:00
dholland
992b9a23af Use accessor functions for the version field of the lfs superblock.
I thought at first maybe the cases that test the version should be
rolled into the accessors, but on the whole I think the conclusion on
that is no.
2015-08-02 18:14:16 +00:00
dholland
1d22bb8bfe lfs_cleanint[] in the in-memory superblock needs to have 64-bit entries. 2015-08-02 18:12:59 +00:00
dholland
f5b8b21a8e Make i_eff_nblks in the in-memory inode 64 bits wide. 2015-08-02 18:12:41 +00:00
dholland
baa6681581 Fix catastrophic bug in lfs_rewind() that changed segment numbers
(lfs_curseg/lfs_nextseg in the superblock) using the wrong units.
These fields are for whatever reason the start addresses of segments
(measured in frags) rather than the segment numbers 0..n.

This only apparently affects dumping from a mounted fs; however, it
trashes the fs.

I would really, really like to have a static analysis tool that can
keep track of the units things are measured in, since fs code is full
of conversion macros and the macros are named inscrutable things like
"sntod" whose letters don't necessarily even correspond to the units
they convert. It is surprising that more of these are not wrong.
2015-08-02 18:10:55 +00:00
dholland
078ffcb8d8 Second batch of 64 -> 32 truncations in lfs, along with more minor
tidyups and corrections in passing.
2015-08-02 18:10:07 +00:00
dholland
95a8d28c27 Fix assorted 64 -> 32 truncations in lfs. Also, some minor tidyups and
corrections in passing.
2015-08-02 18:08:12 +00:00
dholland
e12e41530f Allow superblock accessors that widen 32-bit disk fields to 64-bit
memory values.
2015-08-02 17:57:27 +00:00
dholland
e6aad7b613 Use lfs_accessors.h in conjunction with the cleaner's struct clfs.
Remove previous hacks.
2015-07-28 05:14:23 +00:00
dholland
62d11b422e Move struct salfs back inside libsa now that lfs_accessors.h is separate. 2015-07-28 05:13:14 +00:00
dholland
34f0d74c9e Add a new lfs header file: lfs_accessors.h.
This contains all the accessor functions and macros out of lfs.h.
Add an include of lfs_accessors.h after all uses of lfs.h... except
for code that wants to define its own struct lfs-alike that the
accessors are supposed to play along with. For these, set STRUCT_LFS
and include lfs_accessors.h after the necessary structure has been
defined, so that lfs_accessors.h can emit functions in terms of it.
2015-07-28 05:09:34 +00:00
hannken
cc0ff39f8b Remove bogus "mutex_enter(&mntvnode_lock)". 2015-07-26 08:33:53 +00:00
hannken
0d4b7ea93d lfs_flush_pchain: replace vget() with vcache_get(). 2015-07-26 08:13:23 +00:00
hannken
0df0ac5339 Another lfs superblock accessor (inside #ifdef 0). 2015-07-25 13:01:06 +00:00
martin
7f29db77f4 Use accessors in DEBUG and DIAGNOSTIC code as well 2015-07-25 10:40:35 +00:00
maxv
6647020bbc Unused inits (harmless).
Found by Brainy.
2015-07-24 13:02:52 +00:00
dholland
adca8af59e More lfs superblock accessors.
(This changes the rest of the code over; all the accessors were
already added.)

The difference between this commit and the previous one is arbitrary,
but the previous one passed the regression tests on its own so I'm
keeping it separate to help with any bisections that might be needed
in the future.
2015-07-24 06:59:31 +00:00
dholland
f59b8f4b3a Switch to accessor functions for elements of the LFS on-disk
superblock. This will allow switching between 32/64 bit forms on the
fly; it will also allow handling LFS_EI reasonably tidily. (That
currently doesn't work on the superblock.)

It also gets rid of cpp abuse in the form of fake structure member
macros.

Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg
inside the on-disk superblock, add extra elements to the in-memory
struct lfs for this. (XXX: these should be changed to condvars, but
not right now)

XXX: this migrates a structure needed by the lfs code in libsa (struct
salfs) into lfs.h, where it doesn't belong, but for the time being
this is necessary in order to allow the accessors (and the various
lfs macros and other goop that relies on them) to compile.
2015-07-24 06:56:41 +00:00
dholland
c63e51c9e7 ulfs2_dinode, having never actually been used with lfs, doesn't have a
di_inumber field. Fix that. First preliminary step on PR 50000.
2015-07-24 06:51:46 +00:00
dholland
61051b208c Don't cast the return value of malloc. 2015-07-16 08:31:45 +00:00
mlelstv
bb6bbfe83f mp->mnt_stat.f_flag is never set. Use the mnt_flag directly.
This will now actually prevent the 'bad dir' panic if the filesystem
is read-only.
2015-07-11 11:04:48 +00:00
maxv
9aa6c10155 Small fixes.
ok hannken@
2015-06-28 10:04:32 +00:00
hannken
1c70c47140 ufs_inactive: stop overwriting error status and return the last error seen.
Should resolve CID 1306276 (UNUSED_VALUE)
2015-06-13 14:56:45 +00:00
hannken
180a9009d6 ufs_inactive: take UFS_WAPBL_BEGIN() before calling chkiq().
Should fix PR kern/49948 (quota panic)
2015-06-10 15:28:27 +00:00
hannken
fc48ac80f9 Fix copy and paste errors from last commits.
- Kernel i386/ALL and amd64/ALL compile again.
- Resolves CID 1304138 (DEADCODE) and 1304139 (IDENTICAL_BRANCHES).
2015-06-07 13:39:48 +00:00
hannken
d8868b1ee7 Change lfs from hash table to vcache.
- Change lfs_valloc() to return an inode number and version instead of
  a vnode and move lfs_ialloc() and lfs_vcreate() to new lfs_init_vnode().

- Add lfs_valloc_fixed() to allocate a known inode, used by kernel
  roll forward.

- Remove lfs_*ref(), these functions cannot coexist with vcache and
  their commented behaviour is far away from their implementation.

- Add the cleaner lwp and blockinfo to struct ulfsmount so lfs_loadvnode()
  may use hints from the cleaner.

- Remove vnode locks from ulfs_lookup() like we did with ufs_lookup().
2015-05-31 15:48:02 +00:00
hannken
cf850531be Make lfs_fastvget() private to lfs_syscalls.c, change it to take the
BLOCK_INFO and vnode lock type instead of the inode disk address and
return the vnode locked.

Change lfs_markv() and lfs_bmapv() to work on locked vnodes.
2015-05-31 15:45:18 +00:00
hannken
c063d4ccd5 Use VFS_PROTOS() for lfs.
Rename conflicting struct lfs field "lfs_start" to "lfs_s0addr".

No functional change.
2015-05-31 15:44:30 +00:00
maxv
9b2abda5c6 Add a missing goto.
(was here before my changes)

ok christos@
2015-05-23 16:59:13 +00:00
riastradh
6d6f14f9de memcpy di_extb/db/ib separately. Noted by Coverity, CID 974636. 2015-05-20 18:21:17 +00:00
riastradh
9a70a528ec Don't (harmlessly) overrun di_db array; copy di_ib separately.
Noted by Coverity, CID 974635.

While here, simplify size calculation for memcpy.
2015-05-20 18:19:09 +00:00
martin
445ccb6af2 Cosmetics: fix netbsd.org spelling 2015-05-19 06:44:42 +00:00
martin
7ae75c3e08 Print all sizes as size_t 2015-05-18 08:33:29 +00:00
martin
fa64e6ed3d Make the recently added fs_cgsize test less strict, as it prevents existing
installs from booting.
Catch the common case and warn about it, pointing to a web page describing
the issue - but allow mounting. In all other cases, print more details about
the inconsistency and fail the mount.
2015-05-18 08:07:29 +00:00
maxv
0b096b3626 ffs_superblock_validate(): check the size of cylinder groups. 2015-04-26 06:19:36 +00:00
maxv
459997491f Instead of duplicating code, create ffs_is_appleufs(): returns 1 if the
device is an AppleUFS FS, 0 otherwise.

This changes the behavior a bit: if the kernel cannot determine whether the
disk is an AppleUFS one or not, it now considers it as a normal UFS rather
than returning an error and not mounting/reloading it.

No particular comment on tech-kern@
2015-04-22 07:27:09 +00:00
riastradh
46e71c7d57 Make VOP_LINK return directory still locked and referenced.
Ride 7.99.10 bump.
2015-04-20 22:59:19 +00:00
riastradh
9368a7f9c7 Fix more dvp->v_mount after vput(dvp). 2015-04-20 21:02:49 +00:00
riastradh
f6139440c5 Make vget always return vnode unlocked.
Convert callers who want locks to use vn_lock afterward.

Add extra argument so the compiler will report stragglers.
2015-04-20 13:44:16 +00:00
riastradh
8f010f576c Release the glock on VOP_GETPAGES failure.
Tripped over by nick@'s failing disk, missing unlock in error branch
discovered by jmcneill@.
2015-04-15 14:39:24 +00:00
riastradh
adada8d6d4 Strip IO_JOURNALLOCKED, PGO_JOURNALLOCKED out of ulfs_readwrite.c.
These are vestigial from ufs_readwrite.c with wapbl -- lfs does not
have a journal but only the explicit wapbl calls, not these flags,
got ripped out in the transition to ulfs_readwrite.c.
2015-04-12 22:51:23 +00:00
riastradh
edcd087bc1 Same putpages->kassert in ulfs_readwrite.c 2015-04-12 22:49:55 +00:00
riastradh
0e4f519ef4 Omit now-unused variable. rump build didn't catch this... 2015-04-12 22:48:38 +00:00
riastradh
3124f8f989 Don't putpages in ufs buffercached writes: kassert there are none. 2015-04-12 22:41:28 +00:00
maxv
795334fc6b ffs_superblock_validate(): ensure fs_ncg!=0 and fs_maxbpg!=0 to prevent
several divisions by zero.
2015-04-04 06:00:12 +00:00
riastradh
7153b8dc81 Don't use dvp after vput(dvp).
Still don't understand why the fstrans_done must happen after the
vput, and that will cause trouble once we move responsibility for the
vrele and unlock outside the vop as it seems obvious we ought to do
-- it's the caller's reference, not the vop's.
2015-04-01 20:03:11 +00:00
riastradh
24895d95c1 Amplify that even if we fixed it now the tentacles are still stuck. 2015-03-31 11:43:05 +00:00
riastradh
e9f7453834 Write an essay explaining why ffs_write is one huge WAPBL transaction. 2015-03-31 00:22:50 +00:00
riastradh
cec9a597e4 WAPBL tx is always locked by ufs_bufrd caller, so never unlock it. 2015-03-29 14:39:41 +00:00
maxv
6e39240181 Remove the 'cred' argument from bread(). Remove a now unused var in
ffs_snapshot.c. Update the man page accordingly.

ok hannken@
2015-03-28 19:24:04 +00:00
riastradh
a9b674d150 Let I/O errors override inode update errors in UFS.
Fixes tests/fs/vfs/t_io:read_fault for UFS.
2015-03-28 17:45:47 +00:00
maxv
bb338d5f26 Remove the 'cred' argument from breadn(), and update the man page
accordingly.

ok hannken@
2015-03-28 17:23:42 +00:00
riastradh
ec4019718c Make some comments match better in ulfs_readwrite. 2015-03-28 17:08:53 +00:00
riastradh
dd74d7b4d4 Factor out post-read/write inode updates in UFS. 2015-03-28 17:06:15 +00:00
riastradh
2cd2eda401 VOP_WRITE never has IO_JOURNALLOCKED. 2015-03-28 04:13:25 +00:00
riastradh
bc2fbd02f8 Turn some `#if DIAGNOSTIC' into KASSERT. 2015-03-28 03:53:36 +00:00
riastradh
3b1b197e15 Missed another spot, in ext2fs_write. 2015-03-28 03:49:41 +00:00
riastradh
7acf502e35 Missed a spot in ext2fs_read 2015-03-28 03:46:51 +00:00
riastradh
8e1eba1ebe Tighten some kasserts in ufs_bufio code paths. 2015-03-27 19:47:14 +00:00
riastradh
5a2d83e099 Disentangle buffer-cached I/O from page-cached I/O in UFS.
Page-cached I/O is used for regular files, and is initiated by VFS
users such as userland and NFS.

Buffer-cached I/O is used for directories and symlinks, and is issued
only internally by UFS.

New UFS routine ufs_bufio replaces vn_rdwr for internal use.
ufs_bufio is implemented by new UFS operations uo_bufrd/uo_bufwr,
which sit in ufs_readwrite.c alongside the VOP_READ/VOP_WRITE
implementations.

I preserved the code as much as possible and will leave further
simplification for future commits.  I kept the ulfs_readwrite.c
copypasta close to ufs_readwrite.c in case we ever want to merge them
back; likewise ext2fs_readwrite.c.

No externally visible semantic change.  All atf fs tests still pass.
2015-03-27 17:27:55 +00:00
hannken
54fa474e3e Change ffs to use vcache_new:
- Change ffs_valloc to return an inode number.
- Remove now obsolete UFS operations UFS_VALLOC and UFS_VFREE.
- Make ufs_makeinode private to ufs_vnops.c and pass vattr instead of mode.
2015-03-17 09:39:29 +00:00
maxv
9eec611462 ffs_reload(): fix a bug that prevents Big Endian FSes from being reloaded.
'newfs' should be tagged as FS_SWAPPED, not 'fs'.

Was here before my changes.

While here, also KNF a bit.
2015-03-15 09:21:01 +00:00
maxv
a578b5382f ffs_superblock_validate(): ensure fs_ipg and fs_fpg are != 0. Otherwise
division by zero in several places.
2015-03-14 19:52:54 +00:00
maxv
18abcb4757 ffs_superblock_validate(): check the number of inodes per block. Otherwise
a malformed value could panic the system.
2015-03-10 12:59:32 +00:00
maxv
c84267386a ffs_reload(): release 'bp' earlier 2015-03-03 17:56:51 +00:00
maxv
e6e56ce208 ffs_reload(): the current implementation blindly guesses critical fields
of the superblock didn't change. Add checks to ensure they didn't change
for real. This prevents several memory corruptions.
2015-03-03 17:46:39 +00:00
maxv
5c7e714fca Hum. Perhaps I missed a bit of the specification. Let's not be that
severe when checking the superblock.

Should fix ATF.
2015-02-23 17:05:58 +00:00
maxv
5f9c472c31 Small changes:
- instead of always calling DPRINTF with __func__, put __func__ directly
   in the macro
 - ffs_mountfs(): rename fsblockloc -> fs_sblockloc, initialize fs_sbsize
   to zero
No real functional change
2015-02-23 13:38:54 +00:00
maxv
3e35936473 Merge _sbcompute() and _sbcheck() into _sbfill().
In ext2fs_sbfill(), check more fields of the superblock, to prevent
several kernel panics when mounting/unmounting a disk.
2015-02-22 14:55:23 +00:00
maxv
81c691b934 ffs_superblock_validate(): sanitize fs_fragshift, fs_bmask and fs_fmask. 2015-02-22 14:22:34 +00:00
maxv
8cadf998b5 KNF, and simplify a bit.
No functional change
2015-02-22 14:12:48 +00:00
maxv
ea17f38b73 Several fixes:
- rename ext2fs_checksb() -> ext2fs_sbcheck(): more consistent
 - in ext2fs_sbcheck(), add a check to ensure e2fs_inode_size!=0,
   otherwise division by zero
 - add ext2fs_sbcompute(), to compute dynamic values of the superblock.
   It is done twice in _reload() and _mountfs(), so put it in a function.
 - reorder the code in charge of loading the superblock: now, read the
   superblock, swap it directly, and *then* pass it to ext2fs_sbcheck().
   It is similar to what ffs now does. It is better since the fields don't
   need to be swapped on the fly in ext2fs_sbcheck().
Tested on amd64.
2015-02-20 17:44:54 +00:00
maxv
afc7ff8c74 Style, and fix a DPRINTF
No functional change
2015-02-20 17:10:17 +00:00
maxv
18daf27dfc e2fs_sbcheck(): add a check to ensure e2fs_bpg!=0. Otherwise the kernel
panics with a division by zero.

While here, remove the #ifdef's.
2015-02-19 21:31:44 +00:00
maxv
12c9fae830 Revert a change in my previous commit that broke the checksum calculation.
Noted by dholland@
2015-02-15 11:04:43 +00:00
maxv
f2f615bb86 ffs_superblock_validate(): when checking the number of frag blocks, also
make sure it matches fs->fs_frag. This also prevents an infinite loop if
fs->fs_frag=0.
2015-02-14 13:43:28 +00:00
maxv
cba38714c3 ffs_superblock_validate(): compute fs_bshift and fs_fshift, and ensure
they are consistent with what is indicated in the superblock. This allows
us to safely use some ffs_ macros.
2015-02-14 10:21:29 +00:00
maxv
7fcc4ddf11 In fact, we need to sanitize the superblock *after* swapping it. Therefore,
move the swap code inside the loop.

'fs->fs_sbsize' is swapped twice: the first time in order to get the
correct superblock size, and later when swapping the whole superblock
structure. As a result, we need to check 'fs->fs_sbsize' twice.

This:
 - fixes my previous changes for swapped FSes
 - allows the kernel to look for other superblock locations if the
   current superblock is not validated

And now:
 - ffs_superblock_validate() takes only one argument: the fs structure
 - 'fs_bsize' is unused, so delete it

Add some comments to explain a bit what we are doing.
2015-02-14 09:55:53 +00:00