Details
-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
None
-
3
-
9223372036854775807
Description
[8:56:48 AM] John Hammond: On RHEL 6, assume that the file f0 is does not exist. If we do stat(f0) followed by creat(f0) then the create sends a MDS_REINT/REINT_CREATE from ll_create_nd() followed by a LDLM_ENQUEUE/REINT_OPEN from ll_file_open(). I don't think it was always this way. Am I wrong? If not then do you know when it changed?
[9:54:50 AM] Oleg Drokin: hm, it should not work like that. is this master? EE of some sort? Related patches were in the opencache, first the improper fix in LU-4367 and then proper in LU-8019
[9:55:45 AM] John Hammond: This is in master on 2.6.32-573.12.1.el6_lustre.g74ae81d.x86_64. (HAVE_IOP_ATOMIC_OPEN is not defined.)
[9:57:46 AM] Oleg Drokin: So in ll_revalidate_dentry we should get this code run:
[9:57:46 AM] Oleg Drokin: + /*
+ * if open&create is set, talk to MDS to make sure file is created if
+ * necessary, because we can't do this in ->open() later since that's
+ * called on an inode. return 0 here to let lookup to handle this.
+ */
+ if ((lookup_flags & (LOOKUP_OPEN | LOOKUP_CREATE)) ==
+ (LOOKUP_OPEN | LOOKUP_CREATE))
[9:58:07 AM] Oleg Drokin: this would return 0 meaning revaliate fails
[9:58:49 AM] Oleg Drokin: then we should not get into create(), but should get into ->lookup() in our code first
[10:00:13 AM] Oleg Drokin: ah, LU-8371 removed that
[10:00:56 AM] Oleg Drokin: I guess that did fail to take into account older kernels
[10:01:42 AM] Oleg Drokin: though rhel6.x is not really supposed to be supported on master anymore, but we probabl can reinstate some of that logic just in rhel6 specific path when IOP_ATOMIC_OPEN is not defined
[10:04:06 AM] John Hammond: Well we don't have HAVE_IOP_ATOMIC_OPEN until 3.6.