On Sat, Jun 13, 2009 at 03:23:13PM +0200, Marco wrote: > From: Marco Stornelli <marco.stornelli@xxxxxxxxx> > > XIP operations. > > Signed-off-by: Marco Stornelli <marco.stornelli@xxxxxxxxx> > --- > > diff -uprN linux-2.6.30-orig/fs/pramfs/xip.c linux-2.6.30/fs/pramfs/xip.c > --- linux-2.6.30-orig/fs/pramfs/xip.c 1970-01-01 01:00:00.000000000 +0100 > +++ linux-2.6.30/fs/pramfs/xip.c 2009-06-13 12:54:26.000000000 +0200 > @@ -0,0 +1,90 @@ > +/* > + * FILE NAME fs/pramfs/xip.c > + * > + * BRIEF DESCRIPTION > + * > + * XIP operations. > + * > + * Copyright 2009 Marco Stornelli <marco.stornelli@xxxxxxxxx> > + * This file is licensed under the terms of the GNU General Public > + * License version 2. This program is licensed "as is" without any > + * warranty of any kind, whether express or implied. > + */ > + > +#include <linux/mm.h> > +#include <linux/fs.h> > +#include <linux/genhd.h> > +#include <linux/buffer_head.h> > +#include "pram_fs.h" > +#include "xip.h" > + > +static int pram_find_and_alloc_blocks(struct inode *inode, sector_t iblock, > + sector_t *data_block, int create) > +{ > + int err = -EIO; > + off_t block; > + > + lock_kernel(); Can we find other solutions than taking the BKL? We are trying to get rid of it. > + > + block = pram_find_data_block(inode, iblock); > + > + if (!block) { > + if (!create) { > + err = -ENODATA; > + goto err; > + } > + > + err = pram_alloc_blocks(inode, iblock, 1); > + if (err) > + goto err; > + > + block = pram_find_data_block(inode, iblock); > + if (!block) { > + err = -ENODATA; > + goto err; > + } > + } > + > + *data_block = block; > + err = 0; > + > + err: > + unlock_kernel(); > + return err; > +} > + -- To unsubscribe from this list: send the line "unsubscribe linux-embedded" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html