рд╣рдордиреЗ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рджреЛ рд╕рдкреНрддрд╛рд╣ рдПрдирдПрдлрдПрд╕ рдмрдЧ рдХрд╛ рд╢рд┐рдХрд╛рд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛

рдмрдЧ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг GitLab рдХрд╛рд░реНрдп рд╕реЗ рдЦреЛрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдкреИрдЪ рд╣реЛрддрд╛ рд╣реИ


14 рд╕рд┐рддрдВрдмрд░ рдХреЛ, GitLab рд╕рдорд░реНрдерди рдиреЗ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реВрдЪрдирд╛ рджреА: рдкрд╣рд▓реЗ, GitLab рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ Git рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдЫ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдЕрдЪрд╛рдирдХ рдПрдХ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛: Stale file error ред рддреНрд░реБрдЯрд┐ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрдиреА рд░рд╣реА рдФрд░ рддрдм рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрдм рддрдХ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрдЯрд░ рдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реА рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рджрд┐рдпрд╛ред


рдореБрдЭреЗ Git рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдФрд░ NFS рдиреЗрдЯрд╡рд░реНрдХ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдерд╛ред рдирддреАрдЬрддрди, рд╣рдордиреЗ рд▓рд┐рдирдХреНрд╕ v4.0 рдПрдирдПрдлрдПрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдПрдХ рдмрдЧ рдкрд╛рдпрд╛, рдЯреНрд░реЛрдирдб рдорд╛рдЗрдХреНрд▓реЗрдмрд╕реНрдЯ рдиреЗ рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЪ рд▓рд┐рдЦрд╛ рдерд╛ , рдФрд░ 26 рдЕрдХреНрдЯреВрдмрд░ рд╕реЗ, рдЗрд╕ рдкреИрдЪ рдХреЛ рдореБрдЦреНрдп рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред


рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХреИрд╕реЗ рдХрд┐рдпрд╛, рд╣рдордиреЗ рдХрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╕реЛрдЪрд╛ рдФрд░ рдмрдЧ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдХреМрди рд╕реЗ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╣рдо рдУрд▓реЗрдЧ рджреЗрд╢реЗрд╡рд╕реНрдХреА рдХреЗ рдЙрддреНрдХреГрд╖реНрдЯ рдЬрд╛рд╕реВрд╕реА рдХрд╛рд░реНрдп рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдереЗ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди "рд░реВрдмреА рдореЗрдВ рдПрдХ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рд╢рд┐рдХрд╛рд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ " ред



рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдбрд┐рдмрдЧрд┐рдВрдЧ рдПрдХ рдЯреАрдо рдХрд╛ рдЦреЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд▓реЛрдЧ, рдХрдВрдкрдирд┐рдпрд╛рдВ рдФрд░ рджреЗрд╢ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред GitLab рдХрд╛ рдЖрджрд░реНрд╢ рд╡рд╛рдХреНрдп, " рд╣рд░ рдХреЛрдИ рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ " , рдХреЗрд╡рд▓ GitLab рдХреЗ рд▓рд┐рдП рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рднреА рд╕рд╣реА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ред


рдмрдЧ рдкреНрд░рдЬрдирди


рд╣рдордиреЗ рдХрдИ рд╡рд░реНрд╖реЛрдВ рддрдХ GFSLab.com рдкрд░ NFS рдХреЛ рд░рдЦрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдорд╢реАрдиреЛрдВ рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рд╣рдордиреЗ рд╕рднреА Git рдХреЙрд▓ рдХреЛ Gitaly рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ ред рд╣рдо рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП NFS рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ GitLab рдкрд░ рдЕрдкрдиреЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдХрднреА рднреА рдЙрдХреНрдд рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред


рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╕рдВрдХреЗрдд рджрд┐рдП :


  1. рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рдкрд╛рда: fatal: Couldn't read ./packed-refs: Stale file handle ред
  2. рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рд╕рдорд╕реНрдпрд╛ рддрдм рдЙрддреНрдкрдиреНрди рд╣реБрдИ рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗ рдЧрд┐рдЯ рдореЗрдВ git gc рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╢реБрд░реВ рдХрд┐рдпрд╛ред
  3. рд╕рд┐рд╕реНрдЯрдо рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ ls рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИред
  4. git gc рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ git gc рддреНрд░реБрдЯрд┐ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рджреЛ рдмрд┐рдВрджреБ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдЬрдм рдЖрдк Git рд╢рд╛рдЦрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдмрдорд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Git рдПрдХ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдмрдирд╛рддрд╛ рд╣реИ - рдПрдХ рд▓рдВрдмреА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдЬреЛ рдХрдорд┐рдЯ рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, master рдХреЛ рднреЗрдЬрддреЗ рд╕рдордп, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ refs/heads/master рдирд╛рдордХ рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА:


 $ cat refs/heads/master 2e33a554576d06d9e71bfd6814ee9ba3a7838963 

git gc рдХрдорд╛рдВрдб рдХрдИ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрди рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ (refs) рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ packed-refs рдирд╛рдордХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ packed-refs ред рдпрд╣ рдХрд╛рдо рдХреЛ рдереЛрдбрд╝рд╛ рддреЗрдЬ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдирд╛ рдХрдИ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, git gc рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, packed-refs рдлрд╝рд╛рдЗрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:


 # pack-refs with: peeled fully-peeled sorted 564c3424d6f9175cf5f2d522e10d20d781511bf1 refs/heads/10-8-stable edb037cbc85225261e8ede5455be4aad771ba3bb refs/heads/11-0-stable 94b9323033693af247128c8648023fe5b53e80f9 refs/heads/11-1-stable 2e33a554576d06d9e71bfd6814ee9ba3a7838963 refs/heads/master 

packed-refs рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ? рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ strace git gc рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдпрд╛, рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдерд╛ред рдпрд╣рд╛рдВ рд╡реЗ рдкрдВрдХреНрддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ:


 28705 open("/tmp/libgit2/.git/packed-refs.lock", O_RDWR|O_CREAT|O_EXCL|O_CLOEXEC, 0666) = 3 28705 open(".git/packed-refs", O_RDONLY) = 3 28705 open("/tmp/libgit2/.git/packed-refs.new", O_RDWR|O_CREAT|O_EXCL|O_CLOEXEC, 0666) = 4 28705 rename("/tmp/libgit2/.git/packed-refs.new", "/tmp/libgit2/.git/packed-refs") = 0 28705 unlink("/tmp/libgit2/.git/packed-refs.lock") = 0 

рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ git gc рдХрдорд╛рдВрдб:


  1. packed-refs.lock ред рдпрд╣ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ packed-refs рдлрд╝рд╛рдЗрд▓ рд▓реЙрдХ рд╣реИ рдФрд░ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреА рд╣реИред
  2. рдЦреЛрд▓рд╛ packed-refs.new ред
  3. рдореИрдВрдиреЗ packed-refs.new рдореЗрдВ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ packed-refs.new ред
  4. packed-refs.new packed-refs . packed-refs рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП packed-refs.new рдирд╛рдо packed-refs.new ред
  5. рд╣рдЯрд╛рдП рдЧрдП packed-refs.lock ред
  6. рдХрдордЬреЛрд░ рдХрдбрд╝рд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред

рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдЪреМрдерд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ, рдирд╛рдордХрд░рдг, рдЬрд╣рд╛рдВ рдЧрд┐рдЯ packed-refs рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред git gc рди рдХреЗрд╡рд▓ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдХрд╛рд░реНрдп рднреА рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреЛрдЬрддрд╛ рд╣реИ рдФрд░ рд╣рдЯрд╛рддрд╛ рд╣реИред рдмрдбрд╝реЗ рднрдВрдбрд╛рд░ рдореЗрдВ, рдпрд╣ рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рд░рд╣ рд╕рдХрддрд╛ рд╣реИред


рдФрд░ рд╣рдордиреЗ рдЦреБрдж рд╕реЗ рдкреВрдЫрд╛: рдмрдбрд╝реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ git gc рд╕рдлрд╛рдИ рдХреЗ рджреМрд░рд╛рди рдлрд╛рдЗрд▓ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦрддрд╛ рд╣реИ? рд╣рдордиреЗ strace рд▓реЙрдЧ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛, lsof рдпреВрдЯрд┐рд▓рд┐рдЯреА рд▓реЙрдиреНрдЪ рдХреА, рдФрд░ рдпрд╣рд╛рдБ рд╣рдордиреЗ git gc рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ рд╣реИ:


рдЫрд╡рд┐


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, Garbage collect objects рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рд▓рдВрдмреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж packed-refs рдлрд╝рд╛рдЗрд▓ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред


рддреЛ рдирд┐рдореНрди рдкреНрд░рд╢реНрди рдЙрддреНрдкрдиреНрди рд╣реБрдЖ: NFS рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрдм packed-refs рдлрд╝рд╛рдЗрд▓ рдПрдХ рдиреЛрдб рдкрд░ рдЦреБрд▓реА рд╣реЛрддреА рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдЙрд╕ рд╕рдордп рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓ рджреЗрддрд╛ рд╣реИ?


"рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП," рд╣рдордиреЗ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╢реАрдиреЛрдВ (рдПрд▓рд┐рд╕ рдФрд░ рдмреЙрдм) рдкрд░ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛:
1) рдПрдирдПрдлрдПрд╕ рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдорд╛рддреНрд░рд╛ рдореЗрдВ, рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдВ: test1.txt рдФрд░ test2.txt рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рддрд╛рдХрд┐ рдЙрдирдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ:


 alice $ echo "1 - Old file" > /path/to/nfs/test1.txt alice $ echo "2 - New file" > /path/to/nfs/test2.txt 

2) рдРрд▓рд┐рд╕ рдХреА рдорд╢реАрди рдкрд░, рдлрд╝рд╛рдЗрд▓ test1.txt рдЦреБрд▓реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:


 alice $ irb irb(main):001:0> File.open('/path/to/nfs/test1.txt') 

3) рдРрд▓рд┐рд╕ рдХреА рдорд╢реАрди рдкрд░, рд▓рдЧрд╛рддрд╛рд░ test1.txt рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ:


 alice $ while true; do cat test1.txt; done 

4) рдлрд┐рд░, рдмреЙрдм рдХреА рдорд╢реАрди рдкрд░, рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:


 bob $ mv -f test2.txt test1.txt 

рдЖрдЦрд┐рд░реА рдЪрд░рдг рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдиреЗ рдкрд░ packed-refs рдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде git gc рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред
рдЧреНрд░рд╛рд╣рдХ рдХреА рдорд╢реАрди рдкрд░, рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛:


 1 - Old file 1 - Old file 1 - Old file cat: test1.txt: Stale file handle 

рд╡рд╣рд╛рдБ рд╣реИ! рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓рд┐рдирдХреНрд╕ рдПрдирдПрдлрдПрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд╣реА рдкреНрд░рдпреЛрдЧ рдореЗрдВ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдИред рдкрд░рд┐рдгрд╛рдо рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ - рдирдпрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:


 1 - Old file 1 - Old file 1 - Old file 2 - New file <--- RENAME HAPPENED 2 - New file 2 - New file 

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рдЕрдВрддрд░ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ? рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗ рдИрд╕рд┐рд▓рди рдПрдирдПрдлрдПрд╕ рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдЬреЛ рдХреЗрд╡рд▓ рдПрдирдПрдлрдПрд╕ v4.0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рдерд╛ред рдЬрдм рд╣рдордиреЗ рдкреНрд░реЙрдХреНрд╕реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдХрд░ v4.0 рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛, рддреЛ /etc/fstab рдореЗрдВ vers=4.0 рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкрд░реАрдХреНрд╖рдг рдиреЗ рд▓рд┐рдирдХреНрд╕ NFS рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдпрд╛:


 1 - Old file 1 - Old file 1 - Old file 1 - Old file <--- RENAME HAPPENED 1 - Old file 1 - Old file 

рдЕрдкреНрд░рдЪрд▓рд┐рдд Stale file handle рдмрдЬрд╛рдп Stale file handle рд▓рд┐рдирдХреНрд╕ рдПрдирдПрдлрдПрд╕ v4.0 рд╕рд░реНрд╡рд░ рдиреЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЕрдВрддрд░ рдХреЛ рдПрдирдПрдлрдПрд╕ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред RFC 3010 рд╕реЗ :


рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╡рд░рдгрдХ рдкреБрд░рд╛рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВред рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо рдЙрдард╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╡рд░рдгрдХ рд╕рдорд╛рдкреНрдд рди рд╣реЛрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕рдорд╛рдкреНрдд рди рд╣реЛрдВред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдирдПрдлрдПрд╕ рд╕рд░реНрд╡рд░ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдкрд░ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдПрдирдПрдлрдПрд╕ рд╕рд░реНрд╡рд░ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдлреА рд╣рдж рддрдХ Stale file error рджреЗрддрд╛ рд╣реИред рд╣рдордиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдПрдХ рд╣реА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд░рд┐рдгрд╛рдо рдЕрд▓рдЧ рдереЗред рд╣рдореЗрдВ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдпрд╣ рдХреИрд╢ рдЪреЗрдХ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ ls рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдиреЗ рддреНрд░реБрдЯрд┐ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рджреГрд╢реНрдп рдерд╛, рдФрд░ рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ - рд▓рд┐рдирдХреНрд╕ рдПрдирдПрдлрдПрд╕ рдореЗрдВрдЯреЗрдирд░реНрд╕ рдХрд╛ рд░реБрдЦ рдХрд┐рдпрд╛ред


рдЧрд▓рдд рдЯреНрд░реЗрд╕: тАЛтАЛрдПрдХ NFS рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐


рдЬрдм рд╣рдо рдЪрд░рдг рджрд░ рдЪрд░рдг рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рддреЛ рдореИрдВрдиреЗ рд▓рд┐рдирдХреНрд╕ рдПрдирдПрдлрдПрд╕ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдЬреЛ рд╣рдордиреЗ рд╕реАрдЦрд╛ред рдореИрдВрдиреЗ рдмреНрд░реВрд╕ рдлреАрд▓реНрдбреНрд╕ рдХреЗ рд╕рд╛рде рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд┐рдпрд╛, рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ рдПрдирдПрдлрдПрд╕ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░рдХреНрд╖рдХ, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдмрдЧ рдПрдирдПрдлрдПрд╕ рдореЗрдВ рдерд╛ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд┐рдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдПрдирдПрдлрдПрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реМрдВрдк рд░рд╣реА рдереАред


NFS рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХреНрдпрд╛ рд╣реИ?


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, NFS v4 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкрд╣реБрдВрдЪ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рд╕рдорд╛рд░реЛрд╣ рд╣реИред рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдкрдврд╝ рдпрд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдпрд╣ рдкреВрдЫрдиреЗ рдХреА рдЬрд░реВрд░рдд рди рдкрдбрд╝реЗ рдХрд┐ рдлрд╛рдЗрд▓ рджреВрд╕рд░реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдмрджрд▓ рджреА рдЧрдИ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╕реМрдВрдкрдирд╛ рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреА рдиреЛрдЯрдмреБрдХ рдЙрдзрд╛рд░ рджреЗрдиреЗ рдЬреИрд╕рд╛ рд╣реИ рдФрд░ рдХрд╣рд╛, "рдЖрдк рдпрд╣рд╛рдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдореИрдВ рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЗрд╕реЗ рдЙрдард╛рдКрдВрдЧрд╛ред" рдФрд░ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдкрдХреЛ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдиреЛрдЯрдмреБрдХ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ - рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдкреВрд░реА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдиреЛрдЯрдмреБрдХ рдХреЛ рджреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдирдПрдлрдПрд╕ рдореЗрдВ, рдиреЛрдЯрдмреБрдХ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдирд┐рд░рд╕рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


NFS рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд┐рд░рд╕рди рдореЗрдВ рдПрдХ рдмрдЧ Stale file handle рд╕рдорд╕реНрдпрд╛ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдРрд▓рд┐рд╕ рдХреЗ test1.txt рдореЗрдВ test1.txt рдХреЛ рдХреИрд╕реЗ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдлрд┐рд░ test2.txt рдиреЗ test2.txt рдмрджрд▓ test2.txt ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ test1.txt рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдерд╛, рдФрд░ рдЗрд╕рд╕реЗ рдЕрдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ test1.txt ред рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ tcpdump рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╕рд╛рде NFC рдЯреНрд░реИрдлрд╝рд┐рдХ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ рдФрд░ Wireshark рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ред


рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ NFS рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП Wireshark рдПрдХ рдмреЗрд╣рддрд░реАрди рдУрдкрди рд╕реЛрд░реНрд╕ рдЯреВрд▓ рд╣реИред рд╣рдордиреЗ рдПрдирдПрдлрдПрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░реЗрд╕ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛:


 tcpdump -s 0 -w /tmp/nfs.pcap port 2049 

рдпрд╣ рдХрдорд╛рдВрдб рдЙрди рд╕рднреА рдПрдирдПрдлрдПрд╕ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдЯреАрд╕реАрдкреА рдкреЛрд░реНрдЯ 2049 рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдкреНрд░рдпреЛрдЧ рдПрдирдПрдлрдПрд╕ v4.1 рдХреЗ рд╕рд╛рде рд╕рдлрд▓ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдирдПрдлрдПрд╕ v4.0 рдХреЗ рд╕рд╛рде рдирд╣реАрдВ, рд╣рдо рдХрд╛рдо рдФрд░ рдЧреИрд░-рдХрд╛рд░реНрдпрд╢реАрд▓ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдирдПрдлрдПрд╕ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Wireshark рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦрд╛:


NFS v4.0 (рдкрджрд╛рд╡рдирдд рдлрд╝рд╛рдЗрд▓)


рдЫрд╡рд┐


рдпрд╣ рдЖрд░реЗрдЦ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЪрд░рдг 1 рдореЗрдВ, рдРрд▓рд┐рд╕ test1.txt рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ stateid 0x3000 рдХреЗ рд╕рд╛рде рдПрдХ рдПрдирдПрдлрдПрд╕ рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╡рд░рдгрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЬрдм рдмреЙрдм рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдирдПрдлрдПрд╕ рд╕рд░реНрд╡рд░ NFS4ERR_DELAY рд╕рдВрджреЗрд╢ рднреЗрдЬрдХрд░ рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рд╕рдВрджреЗрд╢ CB_RECALL (рдЪрд░рдг 3) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд▓рд┐рд╕ рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИред рдРрд▓рд┐рд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ (рдЪрд░рдг 4 рдореЗрдВ DELEGRETURN) рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдмреЙрдм RENAME рд╕рдВрджреЗрд╢ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ (рдЪрд░рдг 5)ред RENAME рдХреЛ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд▓рд┐рд╕ рдЙрд╕реА рд╡рд┐рд╡рд░рдгрдХ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред


NFS v4.1 (рдХрд╛рдордХрд╛рдЬреА рдорд╛рдорд▓рд╛)


рдЫрд╡рд┐


рдпрд╣рд╛рдБ рдЪрд░рдг 6 рдореЗрдВ рдЕрдВрддрд░ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред NFS v4.0 (рдЕрдкреНрд░рдЪрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде) рдРрд▓рд┐рд╕ stateid рдЙрд╕реА stateid рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред NFS v4.1 (рдХрд╛рдордХрд╛рдЬреА рдорд╛рдорд▓рд╛) рдореЗрдВ, рдРрд▓рд┐рд╕ рдЕрддрд┐рд░рд┐рдХреНрдд LOOKUP рдФрд░ OPEN рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдПрдХ рдЕрд▓рдЧ stateid рджреЗрддрд╛ рд╣реИред V4.0 рдореЗрдВ, рдпрд╣ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдРрд▓рд┐рд╕ рдкреБрд░рд╛рдиреА рд╕рд╛рдордЧреНрд░реА рдХреНрдпреЛрдВ рджреЗрдЦрддреА рд╣реИ - рд╡рд╣ рдПрдХ рдкреБрд░рд╛рдиреЗ рд╡рд┐рд╡рд░рдгрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред


рдПрд▓рд┐рд╕ рдЕрдЪрд╛рдирдХ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд LOOKUP рдлреИрд╕рд▓рд╛ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ? рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХреА рдпрд╛рдж рд╕рдлрд▓ рд░рд╣реА, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рдорд╕реНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдиреА рд░рд╣реАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдХрд▓рд╛рдВрдЧрддрд╛ рдХрджрдо рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдирдПрдлрдПрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдирдПрдлрдПрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХреЛ рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╣реА рдмрд╛рд╣рд░ рдХрд░ рджрд┐рдпрд╛:


 echo 0 > /proc/sys/fs/leases-enable 

рд╣рдордиреЗ рдкреНрд░рдпреЛрдЧ рджреЛрд╣рд░рд╛рдпрд╛, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рджреВрд░ рдирд╣реАрдВ рд╣реБрдИред рд╣рдордиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ NFS рд╕рд░реНрд╡рд░ рдпрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдореЗрдВ рдирд╣реАрдВ рдереА, рдФрд░ рдХрд░реНрдиреЗрд▓ рдореЗрдВ NFS рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред


рдЧрд╣рд░реА рдЦреБрджрд╛рдИ: рд▓рд┐рдирдХреНрд╕ рдПрдирдПрдлрдПрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ


рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдЬрд┐рд╕рдХрд╛ рдЬрд╡рд╛рдм рд╣рдореЗрдВ рдПрдирдПрдлрдПрд╕ рдореЗрдВрдЯреЗрдирд░реНрд╕ рдХреЛ рджреЗрдирд╛ рдерд╛:


рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╡реАрдирддрдо рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрдиреА рд░рд╣рддреА рд╣реИ?


рдХреНрд░рдорд╢рдГ рд╕рдВрд╕реНрдХрд░рдг 3.10.0-862.11.6 рдФрд░ 4.4.0-130 рдХреЗ рд╕рд╛рде CentOS 7.2 рдФрд░ Ubuntu 16.04 рдЧреБрдард▓реА рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реБрдИред рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдХреЛрд░ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд┐рдЫрдбрд╝ рдЧрдП, рдЬреЛ рдЙрд╕ рд╕рдордп 4.19-рдЖрд░рд╕реА 2 рдерд╛ред


рд╣рдордиреЗ Google рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (GCP) рдкрд░ рдирдП рдЙрдмрдВрдЯреВ 16.04 рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛, рдирд╡реАрдирддрдо рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреЛ рдХреНрд▓реЛрди рдХрд┐рдпрд╛, рдФрд░ рдХрд░реНрдиреЗрд▓ рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рд╣рдордиреЗ menuconfig рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ .config рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдХрд┐:


  1. NFS рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ ( CONFIG_NFSD=m ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. рд╕рд╣реА GCP рдХрд░реНрдиреЗрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВред

рдЬреЗрдиреЗрдЯрд┐рдХреНрд╕ рдбреНрд░реЛрд╕реЛрдлрд┐рд▓рд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкрд╣рд▓реЗ рдЖрдЗрдЯрдо рдХреЗ рд╕рд╛рде рд╣рдо рдПрдирдПрдлрдПрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХрд░реНрдиреЗрд▓ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдП рдмрд┐рдирд╛ рдЬрд▓реНрджреА рд╕реЗ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рдмрд┐рдВрджреБ рдиреЗ рдЧрд╛рд░рдВрдЯреА рджреА рдХрд┐ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж рдХрд░реНрдиреЗрд▓ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд░реНрдиреЗрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдереЗред


рд╣рдордиреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд╡реАрдирддрдо рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рджреВрд░ рдирд╣реАрдВ рд╣реБрдИред рд╣рдордиреЗ рдЦреБрдж рд╕реЗ рдкреВрдЫрд╛:


  1. рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ?
  2. рдПрдирдПрдлрдПрд╕ v4.0 рдореЗрдВ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди v4.1 рдореЗрдВ рдирд╣реАрдВ?

рдЗрди рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ NFS рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рджреЗрд░реА рдХреАред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд░реНрдиреЗрд▓ рдбрд┐рдмрдЧрд░ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЙрд▓ рднреЗрдЬреЗ:


  1. pr_info() (рдпрд╣ pr_info() )ред
  2. dump_stack() : рдпрд╣ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЬреЛ рдкрд╣рд▓рд╛ рдХрд╛рдо рдХрд┐рдпрд╛, рд╡рд╣ nfs4_file_open() рдлрд╝рдВрдХреНрд╢рди рд╕реЗ fs/nfs/nfs4file.c :


 static int nfs4_file_open(struct inode *inode, struct file *filp) { ... pr_info("nfs4_file_open start\n"); dump_stack(); 

рдмреЗрд╢рдХ, рд╣рдо рд▓рд┐рдирдХреНрд╕ рдбрд╛рдпрдирд╛рдорд┐рдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде dprintk рдХреЛ dprintk рдХрд░ рд╕рдХрддреЗ dprintk рдпрд╛ rpcdebug рдЙрдкрдпреЛрдЧ рдХрд░ rpcdebug , рд▓реЗрдХрд┐рди рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред


рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдкреБрдирдГ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛:


 make modules sudo umount /mnt/nfs-test sudo rmmod nfsv4 sudo rmmod nfs sudo insmod fs/nfs/nfs.ko sudo mount -a 

рдПрдирдПрдлрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдирдПрдлрдПрд╕ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдФрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рддреБрд░рдВрдд рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрд╡реЗрджрди open() :


 Sep 24 20:20:38 test-kernel kernel: [ 1145.233460] Call Trace: Sep 24 20:20:38 test-kernel kernel: [ 1145.233462] dump_stack+0x8e/0xd5 Sep 24 20:20:38 test-kernel kernel: [ 1145.233480] nfs4_file_open+0x56/0x2a0 [nfsv4] Sep 24 20:20:38 test-kernel kernel: [ 1145.233488] ? nfs42_clone_file_range+0x1c0/0x1c0 [nfsv4] Sep 24 20:20:38 test-kernel kernel: [ 1145.233490] do_dentry_open+0x1f6/0x360 Sep 24 20:20:38 test-kernel kernel: [ 1145.233492] vfs_open+0x2f/0x40 Sep 24 20:20:38 test-kernel kernel: [ 1145.233493] path_openat+0x2e8/0x1690 Sep 24 20:20:38 test-kernel kernel: [ 1145.233496] ? mem_cgroup_try_charge+0x8b/0x190 Sep 24 20:20:38 test-kernel kernel: [ 1145.233497] do_filp_open+0x9b/0x110 Sep 24 20:20:38 test-kernel kernel: [ 1145.233499] ? __check_object_size+0xb8/0x1b0 Sep 24 20:20:38 test-kernel kernel: [ 1145.233501] ? __alloc_fd+0x46/0x170 Sep 24 20:20:38 test-kernel kernel: [ 1145.233503] do_sys_open+0x1ba/0x250 Sep 24 20:20:38 test-kernel kernel: [ 1145.233505] ? do_sys_open+0x1ba/0x250 Sep 24 20:20:38 test-kernel kernel: [ 1145.233507] __x64_sys_openat+0x20/0x30 Sep 24 20:20:38 test-kernel kernel: [ 1145.233508] do_syscall_64+0x65/0x130 

рдпреЗ do_dentry_open рдФрд░ vfs_open рдХреНрдпрд╛ рд╣реИрдВ? рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо ( VFS ), рдПрдХ рдЕрдореВрд░реНрдд рдкрд░рдд рд╣реИ рдЬреЛ рд╕рднреА рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред VFS рдкреНрд░рд▓реЗрдЦрди рдХрд╣рддрд╛ рд╣реИ:


VFS рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдЦреБрд▓реЗ (2), рд╕реНрдЯреЗрдЯ (2), chmod (2) рдФрд░ рдЕрдиреНрдп рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ред VFS рд╕рд┐рд╕реНрдЯрдо рдкрде рдирд╛рдо рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ (рдбреЗрдВрдЯреНрд░реА рдХреИрд╢, рдпрд╛ dcache) рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрд╣реБрдд рддреЗрдЬрд╝ рдЦреЛрдЬ рдЗрдВрдЬрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрде рдирд╛рдо (рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо) рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдВрдЯреНрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдбреЗрдВрдЯреНрд░реА рд░реИрдо рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдбрд┐рд╕реНрдХ рдкрд░ рдХрднреА рднреА рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ - рд╡реЗ рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИрдВред

рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рдКрдкрд░ рдЖрдпрд╛ - рдЕрдЧрд░ рдбреЗрдВрдЯреНрд░реА рдХреИрд╢ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдбреЗрдВрдЯреНрд░реА рдХреИрд╢ рдЖрдорддреМрд░ рдкрд░ fs/nfs/dir.c рдореЗрдВ рдЪреЗрдХ рдХрд┐рдпрд╛ fs/nfs/dir.c рд╣рдо nfs4_lookup_revalidate() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗ, рдФрд░ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдордиреЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛:


 diff --git a/fs/nfs/dir.cb/fs/nfs/dir.c index 8bfaa658b2c1..ad479bfeb669 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -1159,6 +1159,7 @@ static int nfs_lookup_revalidate(struct dentry *dentry, unsigned int flags) trace_nfs_lookup_revalidate_enter(dir, dentry, flags); error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, fhandle, fattr, label); trace_nfs_lookup_revalidate_exit(dir, dentry, flags, error); + goto out_bad; if (error == -ESTALE || error == -ENOENT) goto out_bad; if (error) 

рдФрд░ рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдореЗрдВ, рдПрдХ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдИ! рдЕрдВрдд рдореЗрдВ, рд╣рдордиреЗ рдирд┐рд╢рд╛рди рдкрд░ рд╣рдорд▓рд╛ рдХрд┐рдпрд╛ред


рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдирдПрдлрдПрд╕ v4.1 рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реБрдИ, рд╣рдордиреЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ pr_info() рдХреЙрд▓ рдЬреЛрдбрд╝реЗред рд╣рдордиреЗ NFS v4.0 рдФрд░ v4.1 рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг v4.1 рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдкрд╛рдИ:


 if (NFS_SB(dentry->d_sb)->caps & NFS_CAP_ATOMIC_OPEN_V1) { goto no_open; } 

NFS_CAP_ATOMIC_OPEN_V1 рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдХрд░реНрдиреЗрд▓ рдкреИрдЪ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ NFS v4.1 рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ fs/nfs/nfs4proc.c рдореЗрдВ рдХреЛрдб рдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ рдХрд┐ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ v4.1 рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди v4.0 рдореЗрдВ рдирд╣реАрдВ:


 static const struct nfs4_minor_version_ops nfs_v4_1_minor_ops = { .minor_version = 1, .init_caps = NFS_CAP_READDIRPLUS | NFS_CAP_ATOMIC_OPEN | NFS_CAP_POSIX_LOCK | NFS_CAP_STATEID_NFSV41 | NFS_CAP_ATOMIC_OPEN_V1 

рдЗрд╕рд▓рд┐рдП, рд╕рдВрд╕реНрдХрд░рдг рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ - v4.1 рдореЗрдВ, goto no_open nfs_lookup_revalidate() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдзрд┐рдХ рдЪреЗрдХ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ v4.0 рдореЗрдВ nfs4_lookup_revalidate() рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рд▓реМрдЯрддрд╛ рд╣реИред рдФрд░ рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рдХрд┐рдпрд╛?


рдирд┐рд░реНрдгрдп


рдореИрдВрдиреЗ рдПрдирдПрдлрдПрд╕ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдкрд░ рд╣рдорд╛рд░реЗ рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдФрд░ рдПрдХ рдЖрджрд┐рдо рдкреИрдЪ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рдПрдХ рд╕рдкреНрддрд╛рд╣ рдмрд╛рдж, рдЯреНрд░реЙрдирдб рдорд╛рдЗрдХреНрд▓реЗрдмрд╕реНрдЯ рдиреЗ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдмрдЧ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдкреИрдЪ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рднреЗрдЬреА рдФрд░ рдПрдирдПрдлрдПрд╕ v4.1 рдореЗрдВ рдПрдХ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рдкрд╛рдИ ред


рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ NFS v4.0 рдмрдЧ рдХрд╛ рдлрд┐рдХреНрд╕ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдЧрд╣рд░рд╛ рдерд╛ рдЬрд┐рддрдирд╛ рд╣рдордиреЗ рд╕реЛрдЪрд╛ рдерд╛ред Trond рдиреЗ рдЗрд╕реЗ рдкреИрдЪ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛:


рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреЛрд▓реА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рдиреЗ рдкрд░ рдЗрдиреЛрдб рдФрд░ рдбреЗрдВрдЯреНрд░реА рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдбрдмрд▓-рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдЕрднреА рд╣рдо NFSv4.0 рдпрд╛ рддреЛ рдбрдмрд▓-рдЪреЗрдХрд┐рдВрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓ рдХреИрд╢ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ рдФрд░ рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВ - рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╣рдордиреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕ рдлрд┐рдХреНрд╕ рдиреЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдФрд░ рдЙрдмрдВрдЯреВ рдФрд░ рд░реЗрдбрд╣реИрдЯ рдЯреАрдореЛрдВ рдХреЛ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬреАред


рд╣рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдЧрдП рдереЗ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдЕрднреА рддрдХ рд╕реНрдерд┐рд░ рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди Gitaly рдореЗрдВ рдЬреЛрдбрд╝рд╛ ред рд╣рдордиреЗ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ packed-refs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрд▓рд┐рдВрдЧ stat() рдХреЛ рдХрд░реНрдиреЗрд▓ рдбреЗрдВрдЯреНрд░реА рдХреИрд╢ рдореЗрдВ рдирд╛рдорд╛рдВрдХрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрдмрд▓-рдЪреЗрдХ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдирдПрдлрдПрд╕ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЧреАрддрд╛рд▓реА рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред Gitaly рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЦреЛрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рддреНрдпрд╛рдкрди рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреНрдп stat() рдХреЙрд▓ рд╣реИрдВред


рд╣рдордиреЗ рдХреНрдпрд╛ рд╕реАрдЦрд╛ рд╣реИ


рдПрдХ рдмрдЧ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕реНрдЯреИрдХ рдХреЗ рдХрд┐рд╕реА рднреА рдХреЛрдиреЗ рдореЗрдВ рдЫрд┐рдкрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рд╣рд░ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдХрдиреЗрдХреНрд╢рди рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдЖрдкрдХрд╛ рдХрд╛рдо рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред


рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╣рдорд╛рд░реЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдФрд░ рдПрдирдПрдлрдПрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░реВрд╕ рдлреАрд▓реНрдбреНрд╕ рдХреЛ рдЯреНрд░реЙрдирдб рдорд╛рдпреБрдХрдмрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдРрд╕реА рдЬрд╡рд╛рдмрджреЗрд╣реА рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рд╣рдо рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рдореБрджрд╛рдп рдХреЛ рдорд╣рддреНрд╡ рджреЗрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/hi432922/


All Articles