1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
diff --git a/fsr/xfs_fsr.c b/fsr/xfs_fsr.c
index 6f00b41..5b4af53 100644
--- a/fsr/xfs_fsr.c
+++ b/fsr/xfs_fsr.c
@@ -44,6 +44,10 @@
#define _PATH_FSRLAST "/var/tmp/.fsrlast_xfs"
#define _PATH_PROC_MOUNTS "/proc/mounts"
+#ifndef _PATH_MOUNTED
+#define _PATH_MOUNTED MOUNTED
+#endif
+
char *progname;
diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in
index ac260bc..0e7fccf 100644
--- a/include/platform_defs.h.in
+++ b/include/platform_defs.h.in
@@ -68,6 +68,32 @@ typedef __u64 __bitwise __be64;
typedef struct filldir filldir_t;
+#ifndef __uint8_t
+#define __uint8_t uint8_t
+#endif
+#ifndef __uint16_t
+#define __uint16_t uint16_t
+#endif
+#ifndef __uint32_t
+#define __uint32_t uint32_t
+#endif
+#ifndef __uint64_t
+#define __uint64_t uint64_t
+#endif
+
+#ifndef __int8_t
+#define __int8_t int8_t
+#endif
+#ifndef __int16_t
+#define __int16_t int16_t
+#endif
+#ifndef __int32_t
+#define __int32_t int32_t
+#endif
+#ifndef __int64_t
+#define __int64_t int64_t
+#endif
+
#if defined(__linux__)
#include <xfs/linux.h>
#elif defined(__FreeBSD__)
diff --git a/libhandle/handle.c b/libhandle/handle.c
index 9a232fa..1db7772 100644
--- a/libhandle/handle.c
+++ b/libhandle/handle.c
@@ -20,6 +20,9 @@
#include <xfs/xfs.h>
#include <xfs/handle.h>
#include <xfs/parent.h>
+#if defined(__linux__)
+#include <linux/limits.h>
+#endif
/* just pick a value we know is more than big enough */
#define MAXHANSIZ 64
diff --git a/libhandle/jdm.c b/libhandle/jdm.c
index 070407b..8dd6322 100644
--- a/libhandle/jdm.c
+++ b/libhandle/jdm.c
@@ -20,6 +20,9 @@
#include <xfs/handle.h>
#include <xfs/jdm.h>
#include <xfs/parent.h>
+#if defined(__linux__)
+#include <linux/limits.h>
+#endif
/* internal fshandle - typecast to a void for external use */
#define FSHANDLE_SZ 8
diff --git a/libxfs/linux.c b/libxfs/linux.c
index 2e07d54..4075786 100644
--- a/libxfs/linux.c
+++ b/libxfs/linux.c
@@ -16,12 +16,9 @@
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define ustat __kernel_ustat
#include <xfs/libxfs.h>
#include <mntent.h>
#include <sys/stat.h>
-#undef ustat
-#include <sys/ustat.h>
#include <sys/mount.h>
#include <sys/ioctl.h>
#include <sys/sysinfo.h>
@@ -49,9 +46,12 @@ static int max_block_alignment;
int
platform_check_ismounted(char *name, char *block, struct stat64 *s, int verbose)
{
- /* Pad ust; pre-2.6.28 linux copies out too much in 32bit compat mode */
- struct ustat ust[2];
struct stat64 st;
+ FILE *f;
+ struct stat64 mst;
+ struct mntent *mnt;
+ char mounts[MAXPATHLEN];
+ int ismounted = 0;
if (!s) {
if (stat64(block, &st) < 0)
@@ -61,14 +61,25 @@ platform_check_ismounted(char *name, char *block, struct stat64 *s, int verbose)
s = &st;
}
- if (ustat(s->st_rdev, ust) >= 0) {
+ strcpy(mounts, (!access(PROC_MOUNTED, R_OK)) ? PROC_MOUNTED : MOUNTED);
+ if ((f = setmntent(mounts, "r")) == NULL)
+ return 0;
+
+ while ((mnt = getmntent(f)) != NULL) {
+ if (stat64(mnt->mnt_dir, &mst) < 0)
+ continue;
+ if (mst.st_dev != s->st_rdev)
+ continue;
+
if (verbose)
fprintf(stderr,
_("%s: %s contains a mounted filesystem\n"),
progname, name);
- return 1;
+ ismounted = 1;
+ break;
}
- return 0;
+ endmntent(f);
+ return ismounted;
}
int
--- ./repair/attr_repair.c.orig
+++ ./repair/attr_repair.c
@@ -24,6 +24,10 @@
#include "bmap.h"
#include "protos.h"
#include "dir2.h"
+#if defined(__linux__)
+#include <linux/limits.h>
+#endif
+
static int xfs_acl_valid(struct xfs_mount *mp, struct xfs_acl *daclp);
static int xfs_mac_valid(xfs_mac_label_t *lp);
|