[linux-cifs-client] [PATCH 2/3] cifs: add new
cifs_iget_unix_basic function
Christoph Hellwig
hch at infradead.org
Wed Apr 8 17:05:31 GMT 2009
On Sun, Apr 05, 2009 at 09:09:20AM -0400, Jeff Layton wrote:
> Add a new cifs_iget_unix function that uses iget5_locked to identify
> inodes. This will compare inodes based on the UniqueId value that
> the server provides when unix extensions are enabled. We also have
> mounts with unix extensions use that value in the i_ino field (after
> hashing it down to 32-bits on a 32-bit arches).
Note that i_ino and ino_t aren't actually all that important. You
already do the iget comparisms based on the internal uniqueid, so the
only thing i_ino is used for is filling out the inode value in
generic_fattr. I would suggest to fill it out explicitly in
cifs_getattr so that you can actually return a 64bit ino there which
is supported by stat64, possibly under and inode64 mount option.
> diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
> index d958044..be639ee 100644
> --- a/fs/cifs/dir.c
> +++ b/fs/cifs/dir.c
> @@ -187,18 +187,16 @@ int cifs_posix_open(char *full_path, struct inode **pinode,
> if (!pinode)
> goto posix_open_ret; /* caller does not need info */
>
> - if (*pinode == NULL) {
> - __u64 unique_id = le64_to_cpu(presp_data->UniqueId);
> - *pinode = cifs_new_inode(sb, &unique_id);
> - }
> + if (*pinode == NULL)
> + *pinode = cifs_iget_unix_basic(sb, presp_data);
> /* else an inode was passed in. Update its info, don't create one */
Not directly related to this patch, but cifs_posix_open really needs
some restructuring. The code up to the !pinode check should be the
basic underlying helper, and the call to cifs_iget_unix_basic and
posix_fill_in_inode should be moved to those callers that acutally need
it.
More information about the linux-cifs-client
mailing list