[lkml]   [2010]   [May]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    SubjectRe: [PATCH v4] mtd: Do not corrupt backing device of device node inode
    On Wed, 2010-05-05 at 18:40 +0300, Kirill A. Shutemov wrote:
    > We cannot modify file->f_mapping->backing_dev_info, because it will corrupt
    > backing device of device node inode, since file->f_mapping is equal to
    > inode->i_mapping (see __dentry_open() in fs/open.c).
    > Let's introduce separate inode for MTD device with appropriate backing
    > device.

    I hate the fact that we have to do this -- is it really the only option?

    Is it _just_ for the backing_device_info? Can't that be done

    > @@ -85,11 +88,27 @@ static int mtd_open(struct inode *inode, struct file *file)
    > goto out;
    > }
    > - if (mtd->backing_dev_info)
    > - file->f_mapping->backing_dev_info = mtd->backing_dev_info;
    > + if (!mtd->inode) {
    > + mtd->inode = new_inode(mtd_inode_mnt->mnt_sb);

    I believe that would be a race condition, if it wasn't for the BKL.

    And what happens when you close the chardevice and call iput() on the
    inode so it's destroyed, and then you re-open the device? You never set
    mtd->inode = NULL, so won't it now try to igrab a stale pointer?

    You won't have seen this in your testing unless you made it prune the
    icache between the close and open calls.

    David Woodhouse Open Source Technology Centre Intel Corporation

     \ /
      Last update: 2010-05-14 03:07    [W:0.021 / U:1.480 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site