[LU-4953] /proc/fs/lustre/lmv/*/target_obds missing on second mounts Created: 24/Apr/14  Updated: 23/May/14  Resolved: 23/May/14

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

Type: Bug Priority: Critical
Reporter: John Hammond Assignee: Bob Glossman (Inactive)
Resolution: Fixed Votes: 0
Labels: lmv, lprocfs, mq313, patch

Severity: 3
Rank (Obsolete): 13705

 Description   

If I double mount a client (for example with MOUNT_2=y llmount.sh) then the second mount point will have a missing /proc/fs/lustre/lmv/*/target_obds directory.

u:~# umount /mnt/lustre
u:~# umount /mnt/lustre2
#### 
u:~# mount -o user_xattr,flock u@tcp:/lustre /mnt/lustre -t lustre
u:~# ls /proc/fs/lustre/lmv/
lustre-clilmv-ffff8801f6d64e60
u:~# ls /proc/fs/lustre/lmv/lustre-clilmv-ffff8801f6d64e60/
activeobd  desc_uuid  md_stats  numobd  placement  target_obd  target_obds  uuid
u:~# ls -l /proc/fs/lustre/lmv/lustre-clilmv-ffff8801f6d64e60/target_obds/
total 0
lrwxrwxrwx 1 root root 48 Apr 24 12:49 lustre-MDT0000-mdc-ffff8801f6d64e60 -> ../../../mdc/lustre-MDT0000-mdc-ffff8801f6d64e60
u:~# 
u:~# mount -o user_xattr,flock u@tcp:/lustre /mnt/lustre2 -t lustre
u:~# ls /proc/fs/lustre/lmv/
lustre-clilmv-ffff8801f487f778  lustre-clilmv-ffff8801f6d64e60
u:~# ls /proc/fs/lustre/lmv/lustre-clilmv-ffff8801f487f778
activeobd  desc_uuid  md_stats  numobd  placement  target_obd  uuid
u:~# 

I see this when I unmount the second client mount:

[  263.149071] LustreError: 3790:0:(lmv_obd.c:761:lmv_disconnect()) /proc/fs/lustre/lmv/lustre-clilmv-ffff8802169bc688/target_obds missing


 Comments   
Comment by John Hammond [ 25/Apr/14 ]

James, can you comment here?

Comment by James A Simmons [ 25/Apr/14 ]

Yep I can duplicate this problem. Let me look into it.

Comment by James A Simmons [ 01/May/14 ]

Okay I figured it out. The problem is the use of procsym itself. I created procsym so you have top level symlinks to point to another top level proc entry. Examples are lod -> lov and osp -> osc. A procsym exist once per object type whereas in this case the target_obds directories exist for each object instance.So we can't use the procsym field in obd_type. The reason it showed up in lmv and not lov is because I was not checking in lov if proc_sym was already set. This means lov is leaking memory on each module unload. This bug also exist in the upstream Lustre client.

Please note this problem also exist in the 2.4 and 2.5 code base as well. In that case we have a single prod_dir_entry in each module even tho multiple instances need to be created. Thus we have memory leaks with module unloads as well.

Comment by James A Simmons [ 01/May/14 ]

Patch at http://review.whamcloud.com/#/c/10192.

I take it back about upstream. It does handle this correctly. We will need patches for b2_5 and possible b2_4 tho.

Comment by James A Simmons [ 13/May/14 ]

Patch landed for master. Need to make patch for b2_5 and possible b2_4 as well.

Comment by Jodi Levi (Inactive) [ 23/May/14 ]

Patch landed to Master. Flagged for backport to b2_5. Closing ticket for fix in Master. Please reopen if additional work (other than back porting) is needed.

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