[Devel] Re: [patch 1/5][RFC - ipv4/udp checkpoint/restart] : add lookup for unhashed inode

Daniel Lezcano dlezcano at fr.ibm.com
Wed Jun 6 08:22:59 PDT 2007


Serge E. Hallyn wrote:
> Quoting dlezcano at fr.ibm.com (dlezcano at fr.ibm.com):
>   
>> The socket relies on the sockfs. In some cases, the socket are orphans and
>> it is not possible to access them via a file descriptor, this is the case for
>> example for timewait sockets. Hopefully, an inode is still usable to specify
>> a socket. This one can be retrieved from /proc/net/tcp for orphan sockets or
>> from a fstat.
>>
>> When a socket is created the socket inode is added to the sockfs.
>> Unfortunatly, this one is not stored into the hashed inode list, so
>> I need a helper to browse the inode list contained in the superblock 
>> of the sockfs.
>>
>> This is one solution, another solution is to stored the inode into
>> the hashed list when socket is created.
>>     
>
> I assume that would be unacceptable overhead on a very busy server.
> Walking all the inodes NUM_INODES(task_set) for a checkpoint could
> be a real bottleneck, but at least it's only at checkpoint time.
>
> Have you checked net-dev archives for discussions about not hashing
> these inodes?  I suppose at some point you'll want to ask there what the
> preference is.
>   
I didn't looked at the netdev archive, but, sure, I will dig and ask to 
netdev@
Thanks.

> But certainly for now this seems the right approach.
>
>   
>> Signed-off-by: Daniel Lezcano <dlezcano at fr.ibm.com>
>>     
> Acked-by: Serge E. Hallyn <serue at us.ibm.com>
>
> (Or whatever tag they decide over on lkml that I should be using  :)
>
> thanks,
> -serge
>
> PS - I won't be acking other patches bc I just haven't looked at
> netlink enough - so don't read anything more into that :)
>
>   
>> ---
>>  fs/inode.c         |   29 +++++++++++++++++++++++++++++
>>  include/linux/fs.h |    1 +
>>  2 files changed, 30 insertions(+)
>>
>> Index: 2.6.20-cr/fs/inode.c
>> ===================================================================
>> --- 2.6.20-cr.orig/fs/inode.c
>> +++ 2.6.20-cr/fs/inode.c
>> @@ -877,6 +877,35 @@
>>
>>  EXPORT_SYMBOL(ilookup);
>>
>> +
>> +/**
>> + * ilookup_unhased - search for an inode in the superblock
>> + * @sb:		super block of file system to search
>> + * @ino:	inode number to search for
>> + *
>> + * The ilookup_unhashed browse the superblock inode list to find the inode.
>> + *
>> + * If the inode is found in the inode list stored in the superblock, the inode is
>> + * with an incremented reference count.
>> + *
>> + * Otherwise NULL is returned.
>> + */
>> +struct inode *ilookup_unhashed(struct super_block *sb, unsigned long ino)
>> +{
>> +	struct inode *inode = NULL;
>> +
>> +	spin_lock(&inode_lock);
>> +	list_for_each_entry(inode, &sb->s_inodes, i_sb_list)
>> +		if (inode->i_ino == ino) {
>> +			__iget(inode);
>> +			break;
>> +		}
>> +	spin_unlock(&inode_lock);
>> +	return inode;
>> +
>> +}
>> +EXPORT_SYMBOL(ilookup_unhashed);
>> +
>>  /**
>>   * iget5_locked - obtain an inode from a mounted file system
>>   * @sb:		super block of file system
>> Index: 2.6.20-cr/include/linux/fs.h
>> ===================================================================
>> --- 2.6.20-cr.orig/include/linux/fs.h
>> +++ 2.6.20-cr/include/linux/fs.h
>> @@ -1657,6 +1657,7 @@
>>  extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval,
>>  		int (*test)(struct inode *, void *), void *data);
>>  extern struct inode *ilookup(struct super_block *sb, unsigned long ino);
>> +extern struct inode *ilookup_unhashed(struct super_block *sb, unsigned long ino);
>>
>>  extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *);
>>  extern struct inode * iget_locked(struct super_block *, unsigned long);
>>
>> -- 
>> _______________________________________________
>> Containers mailing list
>> Containers at lists.linux-foundation.org
>> https://lists.linux-foundation.org/mailman/listinfo/containers
>>     
>
>   

_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers




More information about the Devel mailing list