lkml.org 
[lkml]   [2007]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: [RFD 1/4] Pass no useless nameidata to the create, lookup, and permission IOPs
    Date
    On Saturday 30 June 2007 11:13, Christoph Hellwig wrote:
    > We need something like this, but I don't quite like the way you've done
    > it. First the name is wrong, it's not a nameidata anymore but a lookup
    > intent, so it should be named that way, struct lookup_intent.

    Sure, that name was pretty random ... lookup_intent has gotten the majority of
    votes so far, and I'm perfectly fine with that.

    > Second the macro hackery is more than ugly, please keep the structures
    > separate. With modern gcc it might be possible to embed the lookup_intent
    > into the nameidata anonymously.

    http://gcc.gnu.org/onlinedocs/gcc-4.2.0/gcc/Unnamed-Fields.html

    If we can add the -fms-extensions gcc option we can get rid of the macro, and
    the code becomes pretty clean (as shown below). If we cannot add this option,
    then gcc would puke on ``struct lookup_intent;'' in the definition of struct
    nameidata. The macro is the cleanest way to work around this I could come up
    with, but maybe somebody knows another trick.

    --- a/include/linux/namei.h
    +++ b/include/linux/namei.h
    @@ -14,14 +14,10 @@ struct open_intent {

    enum { MAX_NESTED_LINKS = 8 };

    -struct nameidata {
    +struct lookup_intent {
    struct dentry *dentry;
    struct vfsmount *mnt;
    - struct qstr last;
    unsigned int flags;
    - int last_type;
    - unsigned depth;
    - char *saved_names[MAX_NESTED_LINKS + 1];

    /* Intent data */
    union {
    @@ -29,6 +25,19 @@ struct nameidata {
    } intent;
    };

    +struct nameidata {
    + struct lookup_intent;
    + struct qstr last;
    + int last_type;
    + unsigned depth;
    + char *saved_names[MAX_NESTED_LINKS + 1];
    +};

    > Also please either remove the dentry from struct lookup_entry or from the
    > direct argument list of the functions and methods - there is no need to pass
    > this one twice.

    The dentry in the lookup_intent of the create inode operation is the parent
    dentry right now, and the child dentry is passed as the separate parameter. I
    would prefer the cleaner interface in which the lookup_intent refers to the
    child dentry as well. (Getting from the child to the parent is trivial.) I
    guess this can go in an incremental patch with the next version of these
    patches.

    Thanks,
    Andreas
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-06-30 18:17    [W:0.023 / U:89.696 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site