[LU-13322] touch symbol link through lustre/.fid/$FID would fail Created: 04/Mar/20  Updated: 04/Mar/20

Status: Open
Project: Lustre
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Major
Reporter: Li Xi Assignee: WC Triage
Resolution: Unresolved Votes: 0
Labels: None
Environment:

2.12


Attachments: Text File client.log     Text File mds.log     Text File strace.txt    
Severity: 3
Rank (Obsolete): 9223372036854775807

 Description   

The problem is 100% reproducable:

  1. # ls new_Inode -l
    lrwxrwxrwx 10 root root 7 Mar 4 01:48 new_Inode -> unknown
  2. lfs path2fid new_Inode
    [0x200000402:0x83f:0x0]
  3. touch /mnt/bgdzjiq1/.lustre/fid/[0x200000402:0x83f:0x0]
    touch: setting times of '/mnt/bgdzjiq1/.lustre/fid/[0x200000402:0x83f:0x0]': Invalid argument

On the client side, the error logs are:

00000002:00000001:1.0:1583284421.042097:0:19386:0:(mdc_locks.c:1001:mdc_finish_intent_lock()) Process entered
00000002:00000001:1.0:1583284421.042098:0:19386:0:(mdc_locks.c:1028:mdc_finish_intent_lock()) Process leaving via out (rc=18446744073709551594 : -22 : 0xffffffffffffffea)
00000002:00000001:1.0:1583284421.042099:0:19386:0:(mdc_locks.c:1250:mdc_intent_lock()) Process leaving (rc=18446744073709551594 : -22 : ffffffffffffffea)
00800000:00000001:1.0:1583284421.042100:0:19386:0:(lmv_intent.c:354:lmv_intent_open()) Process leaving (rc=18446744073709551594 : -22 : ffffffffffffffea)
00800000:00000001:1.0:1583284421.042102:0:19386:0:(lmv_intent.c:526:lmv_intent_lock()) Process leaving (rc=18446744073709551594 : -22 : ffffffffffffffea)
00000080:00000001:1.0:1583284421.042103:0:19386:0:(namei.c:796:ll_lookup_it()) Process leaving via out (rc=18446744073709551594 : -22 : 0xffffffffffffffea)
00000100:00000001:1.0:1583284421.042105:0:19386:0:(client.c:2519:__ptlrpc_req_finished()) Process entered

On the MDS, the logs are:

00000004:00000400:0.0:1583284633.757717:0:4400:0:(mdd_device.c:775:obf_lookup()) bgdzjiq1-MDD0000: Trying to lookup invalid FID [unknown] in .lustre/fid, FID format should be [0x200000400:0x1:0x0]
00000004:00000001:0.0:1583284633.757724:0:4400:0:(mdd_device.c:776:obf_lookup()) Process leaving via out (rc=18446744073709551594 : -22 : 0xffffffffffffffea)
00000004:00000001:0.0:1583284633.757729:0:4400:0:(mdt_open.c:1426:mdt_reint_open()) Process leaving via out_parent (rc=18446744073709551594 : -22 : 0xffffffffffffffea)
00000004:00000001:0.0:1583284633.757734:0:4400:0:(mdt_handler.c:3446:mdt_object_unlock()) Process entered

So, looks like the ll_follow_link() causes the problem. When doing the lookup, the client find the inode is a symbol link pointing to "unknown", so naturely, it replaces "/mnt/bgdzjiq1/.lustre/fid/[0x200000402:0x83f:0x0]" to "/mnt/bgdzjiq1/.lustre/fid/unknown". Thus the opening fails on MDT.

I am not sure we can consider this as a feature, because we can touch a symbol link itself even the symbol link points to a non-existing file.


Generated at Sat Feb 10 03:00:17 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.