[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <200708041341.16231.ioe-lkml@rameria.de>
Date: Sat, 4 Aug 2007 13:41:15 +0200
From: Ingo Oeser <ioe-lkml@...eria.de>
To: Miklos Szeredi <miklos@...redi.hu>
Cc: akpm@...ux-foundation.org, linux-kernel@...r.kernel.org
Subject: Re: [patch 03/11] fuse: add reference counting to fuse_file
Hi Miklos,
On Friday 03 August 2007, Miklos Szeredi wrote:
> From: Miklos Szeredi <mszeredi@...e.cz>
>
> Make lifetime of 'struct fuse_file' independent from 'struct file' by
> adding a reference counter and destructor.
What about using krefs to implement that?
see include/linux/kref.h
and lib/kref.c
Just embed that "struct kref" inside your struct fuse_file
struct fuse_file {
...
struct kref ref;
...
}
init in struct fuse_file *fuse_file_alloc(void) where you added the counter.
...
kref_init(&ff->ref);
...
and implement the release function like:
static void fuse_file_release(struct kref *ff_ref)
{
struct fuse_file *ff = container_of(ff_ref, struct fuse_file, ref);
struct fuse_req *req = ff->reserved_req;
struct fuse_conn *fc = get_fuse_conn(req->dentry->d_inode);
request_send_background(fc, req);
kfree(ff);
}
This will also fix the missing smp_barriers, is very simple, saves code,
makes your life easier and is a well known known kernel infrastructure :-)
BTW: FUSE rocks! :-)
You can add my "Signed-off-by: Ingo Oeser <ioe-lkml@...eria.de>",
if you want to use that suggestion.
Best Regards
Ingo Oeser
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists