Re: mkstemp fails on cifs linux-2.6.31-rc1 / samba-3.3.6
Shirish Pargaonkar <[email protected]>
| Newsgroups | gmane.linux.file-systems.cifs |
|---|---|
| Message-ID | <[email protected]> |
On Wed, Jul 1, 2009 at 8:44 AM, Wilhelm Meier<[email protected]> wrote: > Am Mittwoch, 1. Juli 2009 15:17:20 schrieb Shirish Pargaonkar: >> On Wed, Jul 1, 2009 at 7:13 AM, Jeff Layton<[email protected]> wrote: >> > On Wed, 2009-07-01 at 06:59 -0500, Shirish Pargaonkar wrote: >> >> On Wed, Jul 1, 2009 at 6:21 AM, Jeff Layton<[email protected]> wrote: >> >> > On Wed, 2009-07-01 at 06:01 -0500, Shirish Pargaonkar wrote: >> >> >> I think the problem is, why EEXIST since file does not exist. The >> >> >> looping is I guess >> >> >> because mktemp then attempts to create another file and receives >> >> >> EEXIST and it goes on forever. >> >> >> So the basic issues is why EEXIST since mktemp is attempting a file >> >> >> which does not >> >> >> exist on the server. >> >> > >> >> > The problem is that the lookup is returning a positive dentry since it >> >> > just created the file. This makes the VFS turn around and return >> >> > -EEXIST (see the second O_EXCL check in do_filp_open). So we do have >> >> > to skip the create on lookup for O_EXCL or it won't work. >> >> > >> >> > I think what's needed is something like this patch. It seems to fix >> >> > the testcase for me. That said, this is not adequately regression >> >> > tested and should not be committed until it is. >> >> > >> >> > On that note, I'd like to reiterate my earlier sentiment that all of >> >> > this create-on-lookup code was committed prematurely and should be >> >> > backed out until it's more fully baked. >> >> > >> >> > Just my USD$.02... >> >> > >> >> > -- >> >> > Jeff Layton <[email protected]> >> >> >> >> meant to send this to everybody but ended up sending only to Jeff, >> >> so here it is again... >> >> >> >> I think that is why it is not possible to exclusive create within >> >> lookup intent code. >> >> So, IMHO, we should put the check back in the cifs_lookup. >> >> That is what NFS does, and cifs should do the same >> > >> > Right, but do we really need to do the lookup in that case? It seems >> > like the old check didn't optimize it away (but maybe I'm remembering >> > incorrectly). >> > >> > -- >> > Jeff Layton <[email protected]> >> >> With the check, we are back to what was before lookup intent for >> exclusive create. I think for exclusive create, a lookup can result in >> not create if the file exists, so for a command like mktemp, it >> probably does not help, there will be a lookup and there will be a create. > > Well, I don't know nothing about the internals of cifs, but in this case > lookup and create must be atomic together ... > >> _______________________________________________ >> linux-cifs-client mailing list >> [email protected] >> https://lists.samba.org/mailman/listinfo/linux-cifs-client > > -- > Wilhelm > Wilhelm, I do not know how to maintain atomicity in an operation like exclusive creates for network file systems, I mean, between a lookup and create from client, there is a chance that file gets created on the server. With cifs_posix_open in lookup, we can gurantee that atomicity but with the current vfs implementation, that is not possible (calling cifs_posix_open within cifs_lookup for atomic operations like exclusive create) on a Samba server but not on a Windows server.