All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nikita Danilov <Nikita@Clusterfs.COM>
To: David Dabbs <david@dabbs.net>
Cc: reiserfs-list@namesys.com
Subject: Re: Fibration questions
Date: Fri, 16 Jul 2004 15:04:49 +0400	[thread overview]
Message-ID: <16631.46673.26333.276372@laputa.namesys.com> (raw)
In-Reply-To: <20040716103441.2BA8715C1D@mail03.powweb.com>

David Dabbs writes:
 > 
 > 
 > I'm curious why the fibration function prototypes take an inode* (that is
 > unused)? I looked at struct_inode and I can't see anything that looks
 > helpful to calculating a fibre.

This for more advanced fibration plugins that keep some per-directory
state (none at the moment).

 > 
 > /* fibration.c: sample fibration_plugin.fibre() function proto */ 
 > static __u64 fibre_dot_o(const struct inode *dir, const char *name, int
 > len);
 > 
 > 
 > 
 > Since fibre_dot_o is the default fibration plugin, could it be safely
 > shortened from:
 > 
 > 	if (len > 2 && name[len - 1] == 'o' && name[len - 2] == '.')
 > 		return FIBRE_NO(1);
 > 	else
 > 		return FIBRE_NO(0);
 > 
 > to
 > 
 > return FIBRE_NO((len > 2 && name[len - 1] == 'o' && name[len - 2] == '.'));
 > 
 > since the boolean expression will always return 1 or 0?
 > 

Well, what would this achieve (besides code obfuscation)? I highly
doubt that one can present a work-load where fibration calls will be
CPU bottlenecks. Premature optimization is a root of all evil, as they
say.

 > 
 > 
 > In Nikita's explanation of fibration [http://kerneltrap.org/node/view/2761]
 > (keeping .o files separate form all other files to speed compilation), would
 > there be any advantage to the following function?
 > 
 > 	unsigned char no=1;
 > 	if (len > 2 && name[len - 2] == '.') {
 > 		switch (name[len - 1]) {
 > 		case: 'c'
 > 		case: 'h'
 > 			no=0
 > 			break;
 > 
 > 		case: 'o'
 > 			no = 2;
 > 			break;
 > 
 > 		}
 > 	}
 > 	return FIBRE_NO(no);

The whole point of having plugin infrastructure is that one is able to
play with new file system policies easily. Just try it!

 > 
 > 
 > 
 > Using the fibre for fast extension testing
 > A common filesystem client query is for '*.xxx'. If there were (is?) an
 > alternate readdir[64]() interface that allowed the caller to pass an
 > 'extension mask/filter,' then the fibre could be leveraged to quickly test
 > whether a given file matches the mask without calling unpack_string(), etc.
 > Kind of like saying to the filesystem: 
 > 
 > 	SELECT filename WHERE dir = '/home' AND filename LIKE '%.xxx'

There is no such system call (there are user-level functions with the
similar functionality, fts(3), and scandir(3)).

sys_reiser4() system call is targeted to similar data-base like kind
of access paths.

 > 
 > A 'fibration map' would need to be specified in an array, say
 > 
 > 	const char * fibre_map[] = {"c", "h", "o"...};
 > 
 > or using a structure like
 > 
 > 	struct fibre_map_ent {
 > 		unsigned char fibrno;
 > 		unsigned char *exten;
 > 	};
 > 
 > 	#define FIBR_MAX 127
 > 	#define FIBR_DEFAULT FIBR_MAX-1
 > 	/* should be ordered by exten for searching */
 > 	const struct fibre_map_ent map[] = 
 > 	{
 > 		{.fibrno=6, 	exten="bar"},
 > 		{.fibrno=0, 	exten="c"},
 > 		{.fibrno=1, 	exten="h"},
 > 		{.fibrno=3, 	exten="htm"},
 > 		{.fibrno=3, 	exten="html"},
 > 		{.fibrno=2, 	exten="java"},
 > 		{.fibrno=FIBR_MAX, exten="o"},
 > 		{.fibrno=4, 	exten="pl"},
 > 		{.fibrno=5, 	exten="py"}
 > 		{.fibrno=7, 	exten="xml"}
 > 	};
 > 
 > 	/* 
 > 		failure to find a match returns 
 > 
 > 			FIBRE_NO(FIBR_DEFAULT);
 > 		else
 > 
 > 			FIBRE_NO(map[i].fibro);
 > 
 > 
 > The enhanced readdir would lookup the mask. If found, it would use the
 > fibrno to select appropriate directory entries for the readdir stream.
 > Otherwise, it would execute the default readdir code. Of course, this map
 > would need to be the global default for the filesystem and per-directory
 > fibration override would be prohibited

  reply	other threads:[~2004-07-16 11:04 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-16 10:35 Fibration questions David Dabbs
2004-07-16 11:04 ` Nikita Danilov [this message]
2004-07-16 17:45   ` David Dabbs
2004-07-18  7:11 ` Hans Reiser
2004-07-18  7:47   ` David Dabbs
2004-07-19  4:23   ` David Masover
2004-07-19  7:21     ` David Dabbs
2004-07-19 21:34       ` David Masover
2004-07-19 22:06         ` Valdis.Kletnieks
2004-07-19 22:32         ` David Dabbs
2004-07-20  6:03           ` Hans Reiser
2004-07-20  7:03           ` David Masover
2004-07-20  5:30         ` Hans Reiser
2004-07-20  7:07           ` David Masover
2004-07-20  8:31             ` David Dabbs
2004-07-21  5:13               ` David Masover
2004-07-21  5:44                 ` David Dabbs
2004-07-21  6:20                   ` David Masover
2004-07-21  6:36                     ` David Dabbs
2004-07-21  8:32                       ` mjt
2004-07-22  4:08                         ` David Masover
2004-07-22 10:06                           ` mjt
2004-07-22 18:14                             ` Hans Reiser
2004-07-23  2:45                             ` David Masover
2004-07-23  9:42                               ` mjt
2004-07-23 18:21                                 ` David Masover
2004-07-22 10:10                           ` Vitaly Fertman
2004-07-23  2:43                             ` David Masover
2004-07-23  9:09                               ` Vitaly Fertman
2004-07-26  6:28                                 ` Hans Reiser
2004-07-26 10:11                                   ` Vitaly Fertman
2004-07-23  9:59                             ` Christian Mayrhuber
2004-07-23  9:59                               ` mjt
2004-07-23 18:13                                 ` David Masover
2004-07-23 10:05                               ` mjt
2004-07-22  8:03                     ` Hans Reiser
2004-07-22 12:16                       ` Nikita Danilov
2004-07-22 14:39                         ` mjt
2004-07-22 18:17                           ` Hans Reiser
2004-07-22 18:26                             ` mjt
2004-07-22 19:57                           ` Valdis.Kletnieks
2004-07-22 21:05                             ` mjt
2004-07-22 21:36                               ` Valdis.Kletnieks
2004-07-23  9:28                                 ` mjt
2004-07-23 22:42                                   ` Valdis.Kletnieks
2004-07-23  2:40                         ` David Masover

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=16631.46673.26333.276372@laputa.namesys.com \
    --to=nikita@clusterfs.com \
    --cc=david@dabbs.net \
    --cc=reiserfs-list@namesys.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.