~ubuntu-branches/debian/jessie/ufsutils/jessie

« back to all changes in this revision

Viewing changes to .pc/02_fsck.ufs.patch/sbin/fsck_ffs/fsck.h

  • Committer: Bazaar Package Importer
  • Author(s): Guillem Jover, Robert Millan, Guillem Jover, Peter Pentchev
  • Date: 2011-05-31 03:50:05 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20110531035005-wyiyk25p99ivd0k0
Tags: 8.2-1
[ Robert Millan ]
* Set ufsutils-udeb to kfreebsd-any.

[ Guillem Jover ]
* New upstream version (based on FreeBSD 8.2)
* Now using Standards-Version 3.9.2 (no changes needed).
* Switch to source format “3.0 (quilt)”.
  - Remove quilt from Build-Depends.
  - Remove patch target in debian/rules.
  - Remove now unneeded README.source.
  - Refresh all patches.
* Reorganize source code:
  - Switch from debian/upstream.sh to debian/rules get-orig-source target.
  - Switch from CVS to Subversion to retrieve the source code.
  - Use the same source layout as upstream (no more relocations),
    i.e. lib/, sbin/, sys/sys, sys/ufs.
  - Move libport/ to port/.
  - Merge libdisklabel/ into port/.
* Remove unneeded linking against libtermcap, thus removing the need for
  ncurses.
* Add an empty debian/watch file explaining that there's no packaged
  upstream releases. Suggested by Peter Pentchev.
* Update CVS to Subversion reference to upstream source code in
  debian/copyright.
* Remove unused lib variable from debian/rules.
* Use dpkg-buildflags to set CPPFLAGS, CFLAGS and LDFLAGS.
  Based on a patch by Peter Pentchev.
* Remove bogus reference to BSD license in /usr/share/common-licenses.
* Always set -I../../sys, even on GNU/kFreeBSD systems.

[ Peter Pentchev ]
* Remove duplicate section “utils” from ufsutils binary package.
* Remove XC- prefix from Package-Type.
* Honour CPPFLAGS and LDFLAGS and do not link with CFLAGS.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2002 Networks Associates Technology, Inc.
 
3
 * All rights reserved.
 
4
 *
 
5
 * This software was developed for the FreeBSD Project by Marshall
 
6
 * Kirk McKusick and Network Associates Laboratories, the Security
 
7
 * Research Division of Network Associates, Inc. under DARPA/SPAWAR
 
8
 * contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA CHATS
 
9
 * research program.
 
10
 *
 
11
 * Redistribution and use in source and binary forms, with or without
 
12
 * modification, are permitted provided that the following conditions
 
13
 * are met:
 
14
 * 1. Redistributions of source code must retain the above copyright
 
15
 *    notice, this list of conditions and the following disclaimer.
 
16
 * 2. Redistributions in binary form must reproduce the above copyright
 
17
 *    notice, this list of conditions and the following disclaimer in the
 
18
 *    documentation and/or other materials provided with the distribution.
 
19
 *
 
20
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 
21
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
22
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
23
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 
24
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
25
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
26
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
27
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
28
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
29
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
30
 * SUCH DAMAGE.
 
31
 *
 
32
 * Copyright (c) 1980, 1986, 1993
 
33
 *      The Regents of the University of California.  All rights reserved.
 
34
 *
 
35
 * Redistribution and use in source and binary forms, with or without
 
36
 * modification, are permitted provided that the following conditions
 
37
 * are met:
 
38
 * 1. Redistributions of source code must retain the above copyright
 
39
 *    notice, this list of conditions and the following disclaimer.
 
40
 * 2. Redistributions in binary form must reproduce the above copyright
 
41
 *    notice, this list of conditions and the following disclaimer in the
 
42
 *    documentation and/or other materials provided with the distribution.
 
43
 * 4. Neither the name of the University nor the names of its contributors
 
44
 *    may be used to endorse or promote products derived from this software
 
45
 *    without specific prior written permission.
 
46
 *
 
47
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 
48
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
49
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
50
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 
51
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
52
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
53
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
54
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
55
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
56
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
57
 * SUCH DAMAGE.
 
58
 *
 
59
 *      @(#)fsck.h      8.4 (Berkeley) 5/9/95
 
60
 * $FreeBSD$
 
61
 */
 
62
 
 
63
#include <unistd.h>
 
64
#include <stdlib.h>
 
65
#include <stdio.h>
 
66
 
 
67
#define MAXDUP          10      /* limit on dup blks (per inode) */
 
68
#define MAXBAD          10      /* limit on bad blks (per inode) */
 
69
#define MAXBUFSPACE     40*1024 /* maximum space to allocate to buffers */
 
70
#define INOBUFSIZE      56*1024 /* size of buffer to read inodes in pass1 */
 
71
 
 
72
union dinode {
 
73
        struct ufs1_dinode dp1;
 
74
        struct ufs2_dinode dp2;
 
75
};
 
76
#define DIP(dp, field) \
 
77
        ((sblock.fs_magic == FS_UFS1_MAGIC) ? \
 
78
        (dp)->dp1.field : (dp)->dp2.field)
 
79
 
 
80
#define DIP_SET(dp, field, val) do { \
 
81
        if (sblock.fs_magic == FS_UFS1_MAGIC) \
 
82
                (dp)->dp1.field = (val); \
 
83
        else \
 
84
                (dp)->dp2.field = (val); \
 
85
        } while (0)
 
86
 
 
87
/*
 
88
 * Each inode on the file system is described by the following structure.
 
89
 * The linkcnt is initially set to the value in the inode. Each time it
 
90
 * is found during the descent in passes 2, 3, and 4 the count is
 
91
 * decremented. Any inodes whose count is non-zero after pass 4 needs to
 
92
 * have its link count adjusted by the value remaining in ino_linkcnt.
 
93
 */
 
94
struct inostat {
 
95
        char    ino_state;      /* state of inode, see below */
 
96
        char    ino_type;       /* type of inode */
 
97
        short   ino_linkcnt;    /* number of links not found */
 
98
};
 
99
/*
 
100
 * Inode states.
 
101
 */
 
102
#define USTATE  0x1             /* inode not allocated */
 
103
#define FSTATE  0x2             /* inode is file */
 
104
#define FZLINK  0x3             /* inode is file with a link count of zero */
 
105
#define DSTATE  0x4             /* inode is directory */
 
106
#define DZLINK  0x5             /* inode is directory with a zero link count  */
 
107
#define DFOUND  0x6             /* directory found during descent */
 
108
/*              0x7                UNUSED - see S_IS_DVALID() definition */
 
109
#define DCLEAR  0x8             /* directory is to be cleared */
 
110
#define FCLEAR  0x9             /* file is to be cleared */
 
111
/*      DUNFOUND === (state == DSTATE || state == DZLINK) */
 
112
#define S_IS_DUNFOUND(state)    (((state) & ~0x1) == DSTATE)
 
113
/*      DVALID   === (state == DSTATE || state == DZLINK || state == DFOUND) */
 
114
#define S_IS_DVALID(state)      (((state) & ~0x3) == DSTATE)
 
115
#define INO_IS_DUNFOUND(ino)    S_IS_DUNFOUND(inoinfo(ino)->ino_state)
 
116
#define INO_IS_DVALID(ino)      S_IS_DVALID(inoinfo(ino)->ino_state)
 
117
/*
 
118
 * Inode state information is contained on per cylinder group lists
 
119
 * which are described by the following structure.
 
120
 */
 
121
struct inostatlist {
 
122
        long    il_numalloced;  /* number of inodes allocated in this cg */
 
123
        struct inostat *il_stat;/* inostat info for this cylinder group */
 
124
} *inostathead;
 
125
 
 
126
/*
 
127
 * buffer cache structure.
 
128
 */
 
129
struct bufarea {
 
130
        struct bufarea *b_next;         /* free list queue */
 
131
        struct bufarea *b_prev;         /* free list queue */
 
132
        ufs2_daddr_t b_bno;
 
133
        int b_size;
 
134
        int b_errs;
 
135
        int b_flags;
 
136
        union {
 
137
                char *b_buf;                    /* buffer space */
 
138
                ufs1_daddr_t *b_indir1;         /* UFS1 indirect block */
 
139
                ufs2_daddr_t *b_indir2;         /* UFS2 indirect block */
 
140
                struct fs *b_fs;                /* super block */
 
141
                struct cg *b_cg;                /* cylinder group */
 
142
                struct ufs1_dinode *b_dinode1;  /* UFS1 inode block */
 
143
                struct ufs2_dinode *b_dinode2;  /* UFS2 inode block */
 
144
        } b_un;
 
145
        char b_dirty;
 
146
};
 
147
 
 
148
#define IBLK(bp, i) \
 
149
        ((sblock.fs_magic == FS_UFS1_MAGIC) ? \
 
150
        (bp)->b_un.b_indir1[i] : (bp)->b_un.b_indir2[i])
 
151
 
 
152
#define IBLK_SET(bp, i, val) do { \
 
153
        if (sblock.fs_magic == FS_UFS1_MAGIC) \
 
154
                (bp)->b_un.b_indir1[i] = (val); \
 
155
        else \
 
156
                (bp)->b_un.b_indir2[i] = (val); \
 
157
        } while (0)
 
158
 
 
159
#define B_INUSE 1
 
160
 
 
161
#define MINBUFS         5       /* minimum number of buffers required */
 
162
struct bufarea bufhead;         /* head of list of other blks in filesys */
 
163
struct bufarea sblk;            /* file system superblock */
 
164
struct bufarea cgblk;           /* cylinder group blocks */
 
165
struct bufarea *pdirbp;         /* current directory contents */
 
166
struct bufarea *pbp;            /* current inode block */
 
167
 
 
168
#define dirty(bp) do { \
 
169
        if (fswritefd < 0) \
 
170
                pfatal("SETTING DIRTY FLAG IN READ_ONLY MODE\n"); \
 
171
        else \
 
172
                (bp)->b_dirty = 1; \
 
173
} while (0)
 
174
#define initbarea(bp) do { \
 
175
        (bp)->b_dirty = 0; \
 
176
        (bp)->b_bno = (ufs2_daddr_t)-1; \
 
177
        (bp)->b_flags = 0; \
 
178
} while (0)
 
179
 
 
180
#define sbdirty()       dirty(&sblk)
 
181
#define cgdirty()       dirty(&cgblk)
 
182
#define sblock          (*sblk.b_un.b_fs)
 
183
#define cgrp            (*cgblk.b_un.b_cg)
 
184
 
 
185
enum fixstate {DONTKNOW, NOFIX, FIX, IGNORE};
 
186
ino_t cursnapshot;
 
187
 
 
188
struct inodesc {
 
189
        enum fixstate id_fix;   /* policy on fixing errors */
 
190
        int (*id_func)(struct inodesc *);
 
191
                                /* function to be applied to blocks of inode */
 
192
        ino_t id_number;        /* inode number described */
 
193
        ino_t id_parent;        /* for DATA nodes, their parent */
 
194
        ufs_lbn_t id_lbn;       /* logical block number of current block */
 
195
        ufs2_daddr_t id_blkno;  /* current block number being examined */
 
196
        int id_numfrags;        /* number of frags contained in block */
 
197
        off_t id_filesize;      /* for DATA nodes, the size of the directory */
 
198
        ufs2_daddr_t id_entryno;/* for DATA nodes, current entry number */
 
199
        int id_loc;             /* for DATA nodes, current location in dir */
 
200
        struct direct *id_dirp; /* for DATA nodes, ptr to current entry */
 
201
        char *id_name;          /* for DATA nodes, name to find or enter */
 
202
        char id_type;           /* type of descriptor, DATA or ADDR */
 
203
};
 
204
/* file types */
 
205
#define DATA    1       /* a directory */
 
206
#define SNAP    2       /* a snapshot */
 
207
#define ADDR    3       /* anything but a directory or a snapshot */
 
208
 
 
209
/*
 
210
 * Linked list of duplicate blocks.
 
211
 *
 
212
 * The list is composed of two parts. The first part of the
 
213
 * list (from duplist through the node pointed to by muldup)
 
214
 * contains a single copy of each duplicate block that has been
 
215
 * found. The second part of the list (from muldup to the end)
 
216
 * contains duplicate blocks that have been found more than once.
 
217
 * To check if a block has been found as a duplicate it is only
 
218
 * necessary to search from duplist through muldup. To find the
 
219
 * total number of times that a block has been found as a duplicate
 
220
 * the entire list must be searched for occurences of the block
 
221
 * in question. The following diagram shows a sample list where
 
222
 * w (found twice), x (found once), y (found three times), and z
 
223
 * (found once) are duplicate block numbers:
 
224
 *
 
225
 *    w -> y -> x -> z -> y -> w -> y
 
226
 *    ^              ^
 
227
 *    |              |
 
228
 * duplist        muldup
 
229
 */
 
230
struct dups {
 
231
        struct dups *next;
 
232
        ufs2_daddr_t dup;
 
233
};
 
234
struct dups *duplist;           /* head of dup list */
 
235
struct dups *muldup;            /* end of unique duplicate dup block numbers */
 
236
 
 
237
/*
 
238
 * Inode cache data structures.
 
239
 */
 
240
struct inoinfo {
 
241
        struct  inoinfo *i_nexthash;    /* next entry in hash chain */
 
242
        ino_t   i_number;               /* inode number of this entry */
 
243
        ino_t   i_parent;               /* inode number of parent */
 
244
        ino_t   i_dotdot;               /* inode number of `..' */
 
245
        size_t  i_isize;                /* size of inode */
 
246
        u_int   i_numblks;              /* size of block array in bytes */
 
247
        ufs2_daddr_t i_blks[1];         /* actually longer */
 
248
} **inphead, **inpsort;
 
249
long numdirs, dirhash, listmax, inplast;
 
250
long countdirs;                 /* number of directories we actually found */
 
251
 
 
252
#define MIBSIZE 3               /* size of fsck sysctl MIBs */
 
253
int     adjrefcnt[MIBSIZE];     /* MIB command to adjust inode reference cnt */
 
254
int     adjblkcnt[MIBSIZE];     /* MIB command to adjust inode block count */
 
255
int     adjndir[MIBSIZE];       /* MIB command to adjust number of directories */
 
256
int     adjnbfree[MIBSIZE];     /* MIB command to adjust number of free blocks */
 
257
int     adjnifree[MIBSIZE];     /* MIB command to adjust number of free inodes */
 
258
int     adjnffree[MIBSIZE];     /* MIB command to adjust number of free frags */
 
259
int     adjnumclusters[MIBSIZE];        /* MIB command to adjust number of free clusters */
 
260
int     freefiles[MIBSIZE];     /* MIB command to free a set of files */
 
261
int     freedirs[MIBSIZE];      /* MIB command to free a set of directories */
 
262
int     freeblks[MIBSIZE];      /* MIB command to free a set of data blocks */
 
263
struct  fsck_cmd cmd;           /* sysctl file system update commands */
 
264
char    snapname[BUFSIZ];       /* when doing snapshots, the name of the file */
 
265
char    *cdevname;              /* name of device being checked */
 
266
long    dev_bsize;              /* computed value of DEV_BSIZE */
 
267
long    secsize;                /* actual disk sector size */
 
268
char    nflag;                  /* assume a no response */
 
269
char    yflag;                  /* assume a yes response */
 
270
int     bkgrdflag;              /* use a snapshot to run on an active system */
 
271
int     bflag;                  /* location of alternate super block */
 
272
int     debug;                  /* output debugging info */
 
273
int     inoopt;                 /* trim out unused inodes */
 
274
char    ckclean;                /* only do work if not cleanly unmounted */
 
275
int     cvtlevel;               /* convert to newer file system format */
 
276
int     bkgrdcheck;             /* determine if background check is possible */
 
277
int     bkgrdsumadj;            /* whether the kernel have ability to adjust superblock summary */
 
278
char    usedsoftdep;            /* just fix soft dependency inconsistencies */
 
279
char    preen;                  /* just fix normal inconsistencies */
 
280
char    rerun;                  /* rerun fsck. Only used in non-preen mode */
 
281
int     returntosingle;         /* 1 => return to single user mode on exit */
 
282
char    resolved;               /* cleared if unresolved changes => not clean */
 
283
char    havesb;                 /* superblock has been read */
 
284
char    skipclean;              /* skip clean file systems if preening */
 
285
int     fsmodified;             /* 1 => write done to file system */
 
286
int     fsreadfd;               /* file descriptor for reading file system */
 
287
int     fswritefd;              /* file descriptor for writing file system */
 
288
 
 
289
ufs2_daddr_t maxfsblock;        /* number of blocks in the file system */
 
290
char    *blockmap;              /* ptr to primary blk allocation map */
 
291
ino_t   maxino;                 /* number of inodes in file system */
 
292
 
 
293
ino_t   lfdir;                  /* lost & found directory inode number */
 
294
const char *lfname;             /* lost & found directory name */
 
295
int     lfmode;                 /* lost & found directory creation mode */
 
296
 
 
297
ufs2_daddr_t n_blks;            /* number of blocks in use */
 
298
ino_t n_files;                  /* number of files in use */
 
299
 
 
300
volatile sig_atomic_t   got_siginfo;    /* received a SIGINFO */
 
301
volatile sig_atomic_t   got_sigalarm;   /* received a SIGALRM */
 
302
 
 
303
#define clearinode(dp) \
 
304
        if (sblock.fs_magic == FS_UFS1_MAGIC) { \
 
305
                (dp)->dp1 = ufs1_zino; \
 
306
        } else { \
 
307
                (dp)->dp2 = ufs2_zino; \
 
308
        }
 
309
struct  ufs1_dinode ufs1_zino;
 
310
struct  ufs2_dinode ufs2_zino;
 
311
 
 
312
#define setbmap(blkno)  setbit(blockmap, blkno)
 
313
#define testbmap(blkno) isset(blockmap, blkno)
 
314
#define clrbmap(blkno)  clrbit(blockmap, blkno)
 
315
 
 
316
#define STOP    0x01
 
317
#define SKIP    0x02
 
318
#define KEEPON  0x04
 
319
#define ALTERED 0x08
 
320
#define FOUND   0x10
 
321
 
 
322
#define EEXIT   8               /* Standard error exit. */
 
323
 
 
324
struct fstab;
 
325
 
 
326
 
 
327
void            adjust(struct inodesc *, int lcnt);
 
328
ufs2_daddr_t    allocblk(long frags);
 
329
ino_t           allocdir(ino_t parent, ino_t request, int mode);
 
330
ino_t           allocino(ino_t request, int type);
 
331
void            blkerror(ino_t ino, const char *type, ufs2_daddr_t blk);
 
332
char           *blockcheck(char *name);
 
333
int             blread(int fd, char *buf, ufs2_daddr_t blk, long size);
 
334
void            bufinit(void);
 
335
void            blwrite(int fd, char *buf, ufs2_daddr_t blk, long size);
 
336
void            cacheino(union dinode *dp, ino_t inumber);
 
337
void            catch(int);
 
338
void            catchquit(int);
 
339
int             changeino(ino_t dir, const char *name, ino_t newnum);
 
340
int             check_cgmagic(int cg, struct cg *cgp);
 
341
int             chkrange(ufs2_daddr_t blk, int cnt);
 
342
void            ckfini(int markclean);
 
343
int             ckinode(union dinode *dp, struct inodesc *);
 
344
void            clri(struct inodesc *, const char *type, int flag);
 
345
int             clearentry(struct inodesc *);
 
346
void            direrror(ino_t ino, const char *errmesg);
 
347
int             dirscan(struct inodesc *);
 
348
int             dofix(struct inodesc *, const char *msg);
 
349
int             eascan(struct inodesc *, struct ufs2_dinode *dp);
 
350
void            ffs_clrblock(struct fs *, u_char *, ufs1_daddr_t);
 
351
void            ffs_fragacct(struct fs *, int, int32_t [], int);
 
352
int             ffs_isblock(struct fs *, u_char *, ufs1_daddr_t);
 
353
void            ffs_setblock(struct fs *, u_char *, ufs1_daddr_t);
 
354
void            fileerror(ino_t cwd, ino_t ino, const char *errmesg);
 
355
int             findino(struct inodesc *);
 
356
int             findname(struct inodesc *);
 
357
void            flush(int fd, struct bufarea *bp);
 
358
void            freeblk(ufs2_daddr_t blkno, long frags);
 
359
void            freeino(ino_t ino);
 
360
void            freeinodebuf(void);
 
361
int             ftypeok(union dinode *dp);
 
362
void            getblk(struct bufarea *bp, ufs2_daddr_t blk, long size);
 
363
struct bufarea *getdatablk(ufs2_daddr_t blkno, long size);
 
364
struct inoinfo *getinoinfo(ino_t inumber);
 
365
union dinode   *getnextinode(ino_t inumber, int rebuildcg);
 
366
void            getpathname(char *namebuf, ino_t curdir, ino_t ino);
 
367
union dinode   *ginode(ino_t inumber);
 
368
void            infohandler(int sig);
 
369
void            alarmhandler(int sig);
 
370
void            inocleanup(void);
 
371
void            inodirty(void);
 
372
struct inostat *inoinfo(ino_t inum);
 
373
int             linkup(ino_t orphan, ino_t parentdir, char *name);
 
374
int             makeentry(ino_t parent, ino_t ino, const char *name);
 
375
void            panic(const char *fmt, ...) __printflike(1, 2);
 
376
void            pass1(void);
 
377
void            pass1b(void);
 
378
int             pass1check(struct inodesc *);
 
379
void            pass2(void);
 
380
void            pass3(void);
 
381
void            pass4(void);
 
382
int             pass4check(struct inodesc *);
 
383
void            pass5(void);
 
384
void            pfatal(const char *fmt, ...) __printflike(1, 2);
 
385
void            pinode(ino_t ino);
 
386
void            propagate(void);
 
387
void            pwarn(const char *fmt, ...) __printflike(1, 2);
 
388
int             readsb(int listerr);
 
389
int             reply(const char *question);
 
390
void            rwerror(const char *mesg, ufs2_daddr_t blk);
 
391
void            sblock_init(void);
 
392
void            setinodebuf(ino_t);
 
393
int             setup(char *dev);
 
394
void            gjournal_check(const char *filesys);