[reiserfs-list] Re: [OpenAFS-devel] more on the 2.2.18pre17 SMP cpu hog/etc.

Nathan Neulinger nneul@umr.edu
Sat, 02 Dec 2000 18:23:23 -0600

Yes, the attached patch seemed to solve the immediate issue, although it
may not work as well with the 35,000 file caches.

-- Nathan

Derek Atkins wrote:
> I don't know anything about reiserfs, but I can explain what AFS is
> doing.  Basically, the afsd user-space process does an opendir() on
> the cache directory.  Then it iterates through the files looking for
> the cache files (they are all numbered, and the cachefile number is
> stored in the filename).  For each cache file, it stores the inode
> number (obtained from dirp->d_ino from readdir()) associated that that
> cache file number (obtained from dirp->d_name).
> Later, the afsd user-space calls into the kernel, iterating through
> the cachefiles.  For each cachefile, it calls into the kernel with the
> inode number which is obtained as described in the previous paragraph.
> The current interface does not have room for any other information to
> be passed along to the kernel.  Granted, we could change that.
> However, we would need to find the packing locality from user-space in
> order to pass it down into kernel space.  Is the packing locality
> available through the dirent structure?  If so, what structure member
> do I use?
> Alternatively, I suppose we could perform an 'open' or a 'stat' of the
> cache file from user-space (using the filename) in order to pull the
> file into the kernel inode cache before passing the information along
> to the kernel.  That might be a more portable way of doing it,
> assuming a 'stat()' is sufficient to bring the inode into kernel cache
> so that iget() can easily grab it.
> Chris, would a stat() be sufficient to bring inode into the cache and
> bypass the slow lookup?  (I'm going to assume that there is enough
> kernel memory to cache all the cacheinodes).
> Nathan, can you add this code to afsd and see if it fixes your problem
> on your home machine?  Add this in afsd/afsd.c (around line 587):
>         if (vFileNum >= 0) {
>             /*
>              * Found a valid data cache filename.  Remember this file's
>              *  inode and bump the number of files found.
>              */
>             /* Stat the file, to bring the inode into the kernel cache */
>             struct stat sb;
>             sprintf (fileToDelete, "%s", currp->d_name);
>             stat (fullpn_FileToDelete, &sb);
>             inode_for_V[vFileNum] = currp->d_ino;
>             (*vFilesFound)++;
>         }
> -derek
> Chris Mason <mason@suse.com> writes:
> > Ok, the problem is that AFS is calling iget, so it probably needs special
> > code to deal with reiserfs.
> >
> > For reiserfs to find an inode on disk, it needs the inode number of the
> > file, and the packing locality.  This is usually (but not always) the inode
> > number of the parent directory.  Calling iget is fine when the inode is
> > already in memory, otherwise the reiserfs code goes into a very slow, very
> > ugly search (the search_by_objectid call) to fill in the other 32 bits of
> > information needed to find the file.
> >
> > So, can AFS store more information about the file in a filehandle of some
> > kind?  If so, we can give you code to fill in the packing locality for iget.
> >
> > -chris
> >
> >
> > _______________________________________________
> > OpenAFS-devel mailing list
> > OpenAFS-devel@openafs.org
> > https://lists.openafs.org/mailman/listinfo.cgi/openafs-devel
> --
>        Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
>        Member, MIT Student Information Processing Board  (SIPB)
>        URL: http://web.mit.edu/warlord/      PP-ASEL      N1NWH
>        warlord@MIT.EDU                        PGP key available


Nathan Neulinger                       EMail:  nneul@umr.edu
University of Missouri - Rolla         Phone: (573) 341-4841
CIS - Systems Programming                Fax: (573) 341-4216