Messages in this thread | | | Subject | Re: [PATCH 5/5] union: hybrid union filesystem prototype | From | Miklos Szeredi <> | Date | Thu, 02 Sep 2010 11:19:41 +0200 |
| |
On Wed, 1 Sep 2010, Valerie Aurora wrote: > > + > > + err = vfs_create(upperdir, newdentry, attr->ia_mode, NULL); > > Passing a NULL namiedata pointer to vfs_create() is a convenient > temporary hack, but unfortunately NFS, ceph, etc. still use the > nameidata passed to vfs_create() and other ops. > > The way union mounts gets a valid nameidata is by doing the create in > the VFS before calling file system ops that may trigger a copyup, > while we still have the original nameidata. This is one of the major > reasons union mounts lives in the VFS.
Not a big deal, just set up nd as if this was a single component lookup. The previous version did it like this:
+ struct nameidata nd = { + .last_type = LAST_NORM, + .last = *name, + }; + + nd.path = pue->upperpath; + path_get(&nd.path); + + newdentry = lookup_create(&nd, S_ISDIR(attr->ia_mode));
But that's not a solution to the NFS suckage, it's just a workaround.
"Fortunately" NFS isn't good for a writable layer of a union for other reasons, so this isn't a big concern at the moment.
Thanks, Miklos
| |