On 10/24/2012 01:50 PM, Rohan Puri wrote:
Look inline for comments.

On Tue, Oct 23, 2012 at 7:30 PM, Abhijit Chandrakant Pawar <abhi.c.pa...@gmail.com <mailto:abhi.c.pa...@gmail.com>> wrote:

    Hi Rohan,


    On Tue, 2012-10-23 at 18:47 +0530, Rohan Puri wrote:


    On Tue, Oct 23, 2012 at 6:33 PM, Abhijit Chandrakant Pawar
    <abhi.c.pa...@gmail.com <mailto:abhi.c.pa...@gmail.com>> wrote:

        I am working on the layered file systems. I came across a
        function called set_super_anon.
        This is a callback to the sget function to compare the
        superblock . This function accepts two parameters. first is
        superblock * and second is void *.  If you look at the
        definition of this function, the void* is never used.
        Many filesystem uses this function when they are mounting the
        superblock. Some pass NULL and some pass actual data.I have
        looked till 2.6.31 but there isnt any trace of the usage of
        second parameter.

        If it is never used then why its added to the function param
        list?  Is there any historical reason during the older kernel
        days?

        Regards,
        Abhijit Pawar

        _______________________________________________
        Kernelnewbies mailing list
        Kernelnewbies@kernelnewbies.org
        <mailto:Kernelnewbies@kernelnewbies.org>
        http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


    Hi Abhijit,

    See the issue is this function is passed as an argument to
    sget(), now their are many other file-systems that defined their
    own set_super function & for that they need data argument where
    they usually pass mount-related data

    For eg. see the definition and usage of function nfs_set_super().

    So, the prototype of the sget() should contain function ptr
    (set_super()) and this function ptr should have data argument
    also. Now one usage can imply NO USE of the data parameter, which
    is set_super_anon, but other file-systems may require, so the
    sget() prototype should be generic to support, both the cases.

    Yes... thats what I thought.   many are passing data
    un-necessarily to this function wherein they already have captured
    the required information for their purpose in their own defined
    function.

Do you mean to say, each fs's own set_super function makes a call to set_anon_super() with data parameter as their specific data, but set_anon_super makes no use of it?


    Wouldnt that cause stack to store the value un-necessarily? It
    would be good if everybody passes NULL as second param.

Yes, each fs's set_super, if makes a call to anon_super() should pass NULL as the second parameter(void *data) since anon_super doesnt make use of this parameter, need for this parameter just arises to match the prototype of sget()'s function ptr agrument. Also do remember the pointer to this data is passed, so only a word-size of extra stack is utilized when a call to this function is made.
I have made a patch for those filesystems and submitted to the kernel list.

- Rohan


- Rohan

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to