Deleted Added
full compact
sblock.c (107294) sblock.c (109462)
1/*
2 * Copyright (c) 2002 Juli Mallett. All rights reserved.
3 *
4 * This software was written by Juli Mallett <jmallett@FreeBSD.org> for the
5 * FreeBSD project. Redistribution and use in source and binary forms, with
6 * or without modification, are permitted provided that the following
7 * conditions are met:
8 *

--- 12 unchanged lines hidden (view full) ---

21 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
23 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include <sys/cdefs.h>
1/*
2 * Copyright (c) 2002 Juli Mallett. All rights reserved.
3 *
4 * This software was written by Juli Mallett <jmallett@FreeBSD.org> for the
5 * FreeBSD project. Redistribution and use in source and binary forms, with
6 * or without modification, are permitted provided that the following
7 * conditions are met:
8 *

--- 12 unchanged lines hidden (view full) ---

21 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
23 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include <sys/cdefs.h>
29__FBSDID("$FreeBSD: head/lib/libufs/sblock.c 107294 2002-11-27 02:18:58Z mckusick $");
29__FBSDID("$FreeBSD: head/lib/libufs/sblock.c 109462 2003-01-18 04:22:14Z jmallett $");
30
31#include <sys/param.h>
32#include <sys/mount.h>
33#include <sys/disklabel.h>
34#include <sys/stat.h>
35
36#include <ufs/ufs/ufsmount.h>
37#include <ufs/ufs/dinode.h>

--- 10 unchanged lines hidden (view full) ---

48static int superblocks[] = SBLOCKSEARCH;
49
50int
51sbread(struct uufsd *disk)
52{
53 struct fs *fs;
54 int sb, superblock;
55
30
31#include <sys/param.h>
32#include <sys/mount.h>
33#include <sys/disklabel.h>
34#include <sys/stat.h>
35
36#include <ufs/ufs/ufsmount.h>
37#include <ufs/ufs/dinode.h>

--- 10 unchanged lines hidden (view full) ---

48static int superblocks[] = SBLOCKSEARCH;
49
50int
51sbread(struct uufsd *disk)
52{
53 struct fs *fs;
54 int sb, superblock;
55
56 DEBUG(NULL);
56 ERROR(disk, NULL);
57
58 fs = &disk->d_fs;
59 superblock = superblocks[0];
60
61 for (sb = 0; (superblock = superblocks[sb]) != -1; sb++) {
62 if (bread(disk, superblock, disk->d_sb, SBLOCKSIZE) == -1) {
57
58 fs = &disk->d_fs;
59 superblock = superblocks[0];
60
61 for (sb = 0; (superblock = superblocks[sb]) != -1; sb++) {
62 if (bread(disk, superblock, disk->d_sb, SBLOCKSIZE) == -1) {
63 disk->d_error = "non-existent or truncated superblock";
64 DEBUG(NULL);
63 ERROR(disk, "non-existent or truncated superblock");
65 return -1;
66 }
67 if (fs->fs_magic == FS_UFS1_MAGIC)
68 disk->d_ufs = 1;
69 if ((fs->fs_magic == FS_UFS2_MAGIC) &&
70 (fs->fs_sblockloc == superblock))
71 disk->d_ufs = 2;
72 if ((fs->fs_bsize <= MAXBSIZE) &&

--- 4 unchanged lines hidden (view full) ---

77 disk->d_ufs = 0;
78 }
79 if (superblock == -1 || disk->d_ufs == 0) {
80 /*
81 * Other error cases will result in errno being set, here we
82 * must set it to indicate no superblock could be found with
83 * which to associate this disk/filesystem.
84 */
64 return -1;
65 }
66 if (fs->fs_magic == FS_UFS1_MAGIC)
67 disk->d_ufs = 1;
68 if ((fs->fs_magic == FS_UFS2_MAGIC) &&
69 (fs->fs_sblockloc == superblock))
70 disk->d_ufs = 2;
71 if ((fs->fs_bsize <= MAXBSIZE) &&

--- 4 unchanged lines hidden (view full) ---

76 disk->d_ufs = 0;
77 }
78 if (superblock == -1 || disk->d_ufs == 0) {
79 /*
80 * Other error cases will result in errno being set, here we
81 * must set it to indicate no superblock could be found with
82 * which to associate this disk/filesystem.
83 */
85 DEBUG("no superblock found");
86 disk->d_error = "no superblock found";
84 ERROR(disk, "no usable known superblock found");
87 errno = ENOENT;
88 return -1;
89 }
90 disk->d_bsize = fs->fs_fsize / fsbtodb(fs, 1);
91 disk->d_sblock = superblock / disk->d_bsize;
92 return 0;
93}
94
95int
96sbwrite(struct uufsd *disk, int all)
97{
98 struct fs *fs;
99 int i, rofd;
100
85 errno = ENOENT;
86 return -1;
87 }
88 disk->d_bsize = fs->fs_fsize / fsbtodb(fs, 1);
89 disk->d_sblock = superblock / disk->d_bsize;
90 return 0;
91}
92
93int
94sbwrite(struct uufsd *disk, int all)
95{
96 struct fs *fs;
97 int i, rofd;
98
101 DEBUG(NULL);
99 ERROR(disk, NULL);
102
103 fs = &disk->d_fs;
104
105 rofd = disk->d_fd;
106 disk->d_fd = open(disk->d_name, O_WRONLY);
107 if (disk->d_fd < 0) {
100
101 fs = &disk->d_fs;
102
103 rofd = disk->d_fd;
104 disk->d_fd = open(disk->d_name, O_WRONLY);
105 if (disk->d_fd < 0) {
108 DEBUG("open");
109 disk->d_error = "failed to open disk";
106 ERROR(disk, "failed to open disk");
110 return -1;
111 }
112 if (bwrite(disk, disk->d_sblock, fs, SBLOCKSIZE) == -1) {
107 return -1;
108 }
109 if (bwrite(disk, disk->d_sblock, fs, SBLOCKSIZE) == -1) {
113 DEBUG(NULL);
114 disk->d_error = "failed to write superblock";
110 ERROR(disk, "failed to write superblock");
115 return -1;
116 }
117 if (all) {
118 for (i = 0; i < fs->fs_ncg; i++)
119 if (bwrite(disk, fsbtodb(fs, cgsblock(fs, i)),
120 fs, SBLOCKSIZE) == -1) {
111 return -1;
112 }
113 if (all) {
114 for (i = 0; i < fs->fs_ncg; i++)
115 if (bwrite(disk, fsbtodb(fs, cgsblock(fs, i)),
116 fs, SBLOCKSIZE) == -1) {
121 DEBUG(NULL);
122 disk->d_error = "failed to update a superblock";
117 ERROR(disk, "failed to update a superblock");
123 return -1;
124 }
125 }
126 close(disk->d_fd);
127 disk->d_fd = rofd;
128 return 0;
129}
118 return -1;
119 }
120 }
121 close(disk->d_fd);
122 disk->d_fd = rofd;
123 return 0;
124}