14 Jul, 2012
40 commits
-
all callers want the same thing, actually - a kinda-sorta analog of
kern_path_create(). I.e. they want parent vfsmount/dentry (with
->i_mutex held, to make sure the child dentry is still their child)
+ the child dentry.Signed-off-by Al Viro
-
Since commit 197e37d9, the banner comment on lookup_open() no longer matches
what the function returns. It used to return a struct file pointer or NULL and
now it returns an integer and is passed the struct file pointer it is to use
amongst its arguments. Update the comment to reflect this.Also add a banner comment to atomic_open().
Signed-off-by: David Howells
Signed-off-by: Al Viro -
all we want is a boolean flag, same as the method gets now
Signed-off-by: Al Viro
-
boolean "does it have to be exclusive?" flag is passed instead;
Local filesystem should just ignore it - the object is guaranteed
not to be there yet.Signed-off-by: Al Viro
-
Signed-off-by: Al Viro
-
Just the flags; only NFS cares even about that, but there are
legitimate uses for such argument. And getting rid of that
completely would require splitting ->lookup() into a couple
of methods (at least), so let's leave that alone for now...Signed-off-by: Al Viro
-
just the flags...
Signed-off-by: Al Viro
-
since the method wrapped by it doesn't need that anymore...
Signed-off-by: Al Viro
-
Just the lookup flags. Die, bastard, die...
Signed-off-by: Al Viro
-
Signed-off-by: Al Viro
-
Signed-off-by: Al Viro
-
just pass the flags
Signed-off-by: Al Viro
-
... and get rid of a couple of arguments and a pointless reassignment
in finish_open() case.Signed-off-by: Al Viro
-
Signed-off-by: Al Viro
-
Signed-off-by: Al Viro
-
namely, 1 ;-) That's what we want to return from ->atomic_open()
instances after finish_no_open().Signed-off-by: Al Viro
-
Same conventions as for ->atomic_open(). Trimmed the
forest of labels a bit, while we are at it...Signed-off-by: Al Viro
-
Just pass struct file *. Methods are happier that way...
There's no need to return struct file * from finish_open() now,
so let it return int. Next: saner prototypes for parts in
namei.cSigned-off-by: Al Viro
-
->filp->f_path is there for purpose...
Signed-off-by: Al Viro
-
Change of calling conventions:
old new
NULL 1
file 0
ERR_PTR(-ve) -veCaller *knows* that struct file *; no need to return it.
Signed-off-by: Al Viro
-
make put_filp() conditional on flag set by finish_open()
Signed-off-by: Al Viro
-
... and let finish_open() report having opened the file via that sucker.
Next step: don't modify od->filp at all.[AV: FILE_CREATE was already used by cifs; Miklos' fix folded]
Signed-off-by: Al Viro
-
Perform open_check_o_direct() in a common place in do_last after opening the
file.Signed-off-by: Miklos Szeredi
Signed-off-by: Al Viro -
Move the lookup retry logic to the bottom of the function to make the normal
case simpler to read.Reported-by: David Howells
Signed-off-by: Miklos Szeredi
Signed-off-by: Al Viro -
Consistently use bool for boolean values in do_last().
Reported-by: David Howells
Signed-off-by: Miklos Szeredi
Signed-off-by: Al Viro -
Reported-by: David Howells
Signed-off-by: Miklos Szeredi
Signed-off-by: Al Viro -
Signed-off-by: Miklos Szeredi
Signed-off-by: Al Viro -
All users of open intents have been converted to use ->atomic_{open,create}.
This patch gets rid of nd->intent.open and related infrastructure.
Signed-off-by: Miklos Szeredi
Signed-off-by: Al Viro -
Add an ->atomic_open implementation which replaces the atomic open+create
operation implemented via ->create. No functionality is changed.Signed-off-by: Miklos Szeredi
CC: Eric Van Hensbergen
Signed-off-by: Al Viro -
Add an ->atomic_open implementation which replaces the atomic lookup+open+create
operation implemented via ->lookup and ->create operations.Signed-off-by: Miklos Szeredi
CC: Sage Weil
Signed-off-by: Al Viro -
What was the purpose of this?
Signed-off-by: Miklos Szeredi
CC: Sage Weil
Signed-off-by: Al Viro -
Add an ->atomic_open implementation which replaces the atomic lookup+open+create
operation implemented via ->lookup and ->create operations.Signed-off-by: Miklos Szeredi
CC: Steve French
Signed-off-by: Al Viro -
Add an ->atomic_open implementation which replaces the atomic open+create
operation implemented via ->create. No functionality is changed.Signed-off-by: Miklos Szeredi
Signed-off-by: Al Viro -
is_atomic_open() is now only used by nfs4_lookup_revalidate() to check whether
it's okay to skip normal revalidation.It does a racy check for mount read-onlyness and falls back to normal
revalidation if the open would fail. This makes little sense now that this
function isn't used for determining whether to actually open the file or not.The d_mountpoint() check still makes sense since it is an indication that we
might be following a mount and so open may not revalidate the dentry.Signed-off-by: Miklos Szeredi
CC: Trond Myklebust
Signed-off-by: Al Viro -
Instead check LOOKUP_EXCL in nd->flags, which is basically what the open intent
flags were used for.Signed-off-by: Miklos Szeredi
CC: Trond Myklebust
Signed-off-by: Al Viro -
Don't pass nfs_open_context() to ->create(). Only the NFS4 implementation
needed that and only because it wanted to return an open file using open
intents. That task has been replaced by ->atomic_open so it is not necessary
anymore to pass the context to the create rpc operation.Despite nfs4_proc_create apparently being okay with a NULL context it Oopses
somewhere down the call chain. So allocate a context here.Signed-off-by: Miklos Szeredi
CC: Trond Myklebust
Signed-off-by: Al Viro -
Replace NFS4 specific ->lookup implementation with ->atomic_open impelementation
and use the generic nfs_lookup for other lookups.Signed-off-by: Miklos Szeredi
CC: Trond Myklebust
Signed-off-by: Al Viro -
Add a new inode operation which is called on the last component of an open.
Using this the filesystem can look up, possibly create and open the file in one
atomic operation. If it cannot perform this (e.g. the file type turned out to
be wrong) it may signal this by returning NULL instead of an open struct file
pointer.i_op->atomic_open() is only called if the last component is negative or needs
lookup. Handling cached positive dentries here doesn't add much value: these
can be opened using f_op->open(). If the cached file turns out to be invalid,
the open can be retried, this time using ->atomic_open() with a fresh dentry.For now leave the old way of using open intents in lookup and revalidate in
place. This will be removed once all the users are converted.David Howells noticed that if ->atomic_open() opens the file but does not create
it, handle_truncate() will be called on it even if it is not a regular file.
Fix this by checking the file type in this case too.Signed-off-by: Miklos Szeredi
Signed-off-by: Al Viro -
Copy __lookup_hash() into lookup_open(). The next patch will insert the atomic
open call just before the real lookup.Signed-off-by: Miklos Szeredi
Signed-off-by: Al Viro -
Split out lookup + maybe create from do_last(). This is the part under i_mutex
protection.The function is called lookup_open() and returns a filp even though the open
part is not used yet.Signed-off-by: Miklos Szeredi
Signed-off-by: Al Viro