[LU-2881] ldiskfs getdents() returns invalid d_types Created: 26/Feb/13  Updated: 03/May/13  Resolved: 26/Feb/13

Status: Resolved
Project: Lustre
Component/s: None
Affects Version/s: Lustre 2.4.0
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: John Hammond Assignee: WC Triage
Resolution: Duplicate Votes: 0
Labels: None

Issue Links:
Duplicate
duplicates LU-2880 ldiskfs getdents() returns invalid d_... Resolved
Severity: 3
Rank (Obsolete): 6956

 Description   

Note this is not a bug in lustre but in ldisks as a top level filesystem. The d_types returned have an extra bit set (perhaps from putting FIDs in dirents). The most annoying symptom of this is that it breaks find.

# llmount.sh
...
# mkdir -p /mnt/lustre/D/D/D/D/D/D
# touch /mnt/lustre/D/D/D/D/D/D/XXX
# find /mnt/lustre
/mnt/lustre
/mnt/lustre/.lustre
/mnt/lustre/D
/mnt/lustre/D/D
/mnt/lustre/D/D/D
/mnt/lustre/D/D/D/D
/mnt/lustre/D/D/D/D/D
/mnt/lustre/D/D/D/D/D/D
/mnt/lustre/D/D/D/D/D/D/XXX
# umount /mnt/lustre /mnt/mds1
#
# mount /tmp/lustre-mdt1 /mnt/mds1 -t ldiskfs -o loop,ro
# find /mnt/mds1/ROOT -name XXX
# stat /mnt/mds1/ROOT/D/D/D/D/D/D/XXX
  File: `/mnt/mds1/ROOT/D/D/D/D/D/D/XXX'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 700h/1792d      Inode: 111         Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-02-26 21:37:51.000000000 -0600
Modify: 2013-02-26 21:37:51.000000000 -0600
Change: 2013-02-26 21:37:51.000000000 -0600
# find /mnt/mds1/ROOT
/mnt/mds1/ROOT
/mnt/mds1/ROOT/.lustre
/mnt/mds1/ROOT/D
# sys_getdents --verbose /mnt/mds1/ROOT
d_type =   4 (d), d_ino =                  2, d_off =  2085404527983360875, d_reclen =   24, d_name = '..'
d_type =   4 (d), d_ino =              50013, d_off =  3188331865672730665, d_reclen =   24, d_name = '.'
dirent '.lustre' has unknown d_type 20
d_type =  20 (!), d_ino =              50014, d_off =  8374721202256512604, d_reclen =   32, d_name = '.lustre'
dirent 'D' has unknown d_type 20
d_type =  20 (!), d_ino =              50015, d_off =  9223372036854775807, d_reclen =   24, d_name = 'D'
#
# sys_getdents --verbose /mnt/mds1/ROOT/D/D/D/D/D/D/
dirent '..' has unknown d_type 20
d_type =  20 (!), d_ino =              50019, d_off =  2085404527983360875, d_reclen =   24, d_name = '..'
d_type =   4 (d), d_ino =              50020, d_off =  6678178485617948048, d_reclen =   24, d_name = '.'
dirent 'XXX' has unknown d_type 24
d_type =  24 (!), d_ino =                111, d_off =  9223372036854775807, d_reclen =   24, d_name = 'XXX'


 Comments   
Comment by John Hammond [ 26/Feb/13 ]

Double submit of LU-2880.

Generated at Sat Feb 10 01:29:01 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.