On Fri, 11 Feb 2011 12:48:56 -0600 shirishpargaonkar@xxxxxxxxx wrote: > From: Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx> > > > Define (global) data structures to store ids, uids and gids, to which a > SID maps. There are two separate trees, one for SID/uid and another one > for SID/gid. > > A new type of key, cifs_idmap_key_type, is used. > > Keys are instantiated and searched using credential of the root by > overriding and restoring the credentials of the caller requesting the key. > Once a SID is mapped, it is stored along with the mapped id, in one > of the rb trees and key is released. > > Register a pruning function with the shrinker that prunes the rb trees > when memory pressure warrants freeing up cache. Just for now, it is > more like cleaning entire cache than pruning. The subsequent patch has > this function defined. > > > Signed-off-by: Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx> > --- > fs/cifs/cifsacl.c | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++ > fs/cifs/cifsfs.c | 7 +++ > fs/cifs/cifsglob.h | 5 ++ > fs/cifs/cifsproto.h | 3 + > 4 files changed, 153 insertions(+), 0 deletions(-) > > diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c > index beeebf1..388b34c 100644 > --- a/fs/cifs/cifsacl.c > +++ b/fs/cifs/cifsacl.c > @@ -23,6 +23,10 @@ > > #include <linux/fs.h> > #include <linux/slab.h> > +#include <linux/string.h> > +#include <linux/keyctl.h> > +#include <linux/key-type.h> > +#include <keys/user-type.h> > #include "cifspdu.h" > #include "cifsglob.h" > #include "cifsacl.h" > @@ -50,6 +54,140 @@ static const struct cifs_sid sid_authusers = { > /* group users */ > static const struct cifs_sid sid_user = {1, 2 , {0, 0, 0, 0, 0, 5}, {} }; > > +static const struct cred *root_cred; > + > +/* > + * Run idmap cache shrinker. > + */ > +static int > +cifs_idmap_shrinker(struct shrinker *shrink, int nr_to_scan, gfp_t gfp_mask) > +{ > + /* Use a pruning scheme in a subsequent patch instead */ ^^^^ maybe add the standard "FIXME:" prefix? to the comment above? > + cifs_destroy_idmaptrees(); > + return 0; > +} > + Aside from the trivial comment fix, this looks OK, I guess. Eventually it would be good to have a more selective pruning scheme than just dropping the entire idmap cache. Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html