diff options
-rw-r--r-- | fs/xfs/scrub/inode.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/fs/xfs/scrub/inode.c b/fs/xfs/scrub/inode.c index 637b7a892313..f120fb20452f 100644 --- a/fs/xfs/scrub/inode.c +++ b/fs/xfs/scrub/inode.c | |||
@@ -318,8 +318,20 @@ xfs_scrub_dinode( | |||
318 | 318 | ||
319 | /* di_mode */ | 319 | /* di_mode */ |
320 | mode = be16_to_cpu(dip->di_mode); | 320 | mode = be16_to_cpu(dip->di_mode); |
321 | if (mode & ~(S_IALLUGO | S_IFMT)) | 321 | switch (mode & S_IFMT) { |
322 | case S_IFLNK: | ||
323 | case S_IFREG: | ||
324 | case S_IFDIR: | ||
325 | case S_IFCHR: | ||
326 | case S_IFBLK: | ||
327 | case S_IFIFO: | ||
328 | case S_IFSOCK: | ||
329 | /* mode is recognized */ | ||
330 | break; | ||
331 | default: | ||
322 | xfs_scrub_ino_set_corrupt(sc, ino, bp); | 332 | xfs_scrub_ino_set_corrupt(sc, ino, bp); |
333 | break; | ||
334 | } | ||
323 | 335 | ||
324 | /* v1/v2 fields */ | 336 | /* v1/v2 fields */ |
325 | switch (dip->di_version) { | 337 | switch (dip->di_version) { |