hc
2024-02-19 151fecfb72a0d602dfe79790602ef64b4e241574
kernel/fs/statfs.c
....@@ -29,6 +29,8 @@
2929 flags |= ST_NODIRATIME;
3030 if (mnt_flags & MNT_RELATIME)
3131 flags |= ST_RELATIME;
32
+ if (mnt_flags & MNT_NOSYMFOLLOW)
33
+ flags |= ST_NOSYMFOLLOW;
3234 return flags;
3335 }
3436
....@@ -66,6 +68,20 @@
6668 buf->f_frsize = buf->f_bsize;
6769 return retval;
6870 }
71
+
72
+int vfs_get_fsid(struct dentry *dentry, __kernel_fsid_t *fsid)
73
+{
74
+ struct kstatfs st;
75
+ int error;
76
+
77
+ error = statfs_by_dentry(dentry, &st);
78
+ if (error)
79
+ return error;
80
+
81
+ *fsid = st.f_fsid;
82
+ return 0;
83
+}
84
+EXPORT_SYMBOL(vfs_get_fsid);
6985
7086 int vfs_statfs(const struct path *path, struct kstatfs *buf)
7187 {
....@@ -114,6 +130,7 @@
114130 if (sizeof(buf) == sizeof(*st))
115131 memcpy(&buf, st, sizeof(*st));
116132 else {
133
+ memset(&buf, 0, sizeof(buf));
117134 if (sizeof buf.f_blocks == 4) {
118135 if ((st->f_blocks | st->f_bfree | st->f_bavail |
119136 st->f_bsize | st->f_frsize) &
....@@ -142,7 +159,6 @@
142159 buf.f_namelen = st->f_namelen;
143160 buf.f_frsize = st->f_frsize;
144161 buf.f_flags = st->f_flags;
145
- memset(buf.f_spare, 0, sizeof(buf.f_spare));
146162 }
147163 if (copy_to_user(p, &buf, sizeof(buf)))
148164 return -EFAULT;
....@@ -155,6 +171,7 @@
155171 if (sizeof(buf) == sizeof(*st))
156172 memcpy(&buf, st, sizeof(*st));
157173 else {
174
+ memset(&buf, 0, sizeof(buf));
158175 buf.f_type = st->f_type;
159176 buf.f_bsize = st->f_bsize;
160177 buf.f_blocks = st->f_blocks;
....@@ -166,7 +183,6 @@
166183 buf.f_namelen = st->f_namelen;
167184 buf.f_frsize = st->f_frsize;
168185 buf.f_flags = st->f_flags;
169
- memset(buf.f_spare, 0, sizeof(buf.f_spare));
170186 }
171187 if (copy_to_user(p, &buf, sizeof(buf)))
172188 return -EFAULT;