lkml.org 
[lkml]   [2012]   [Mar]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 04/25] vfs: add i_op->atomic_open()
    Date
    On Tue, 2012-03-13 at 16:11 +0100, Miklos Szeredi wrote:
    > "Myklebust, Trond" <Trond.Myklebust@netapp.com> writes:
    >
    > > On Wed, 2012-03-07 at 22:22 +0100, Miklos Szeredi wrote:
    > >> +
    > >> + if ((nd->flags & LOOKUP_OPEN) && dir_inode->i_op->atomic_open) {
    > >> + struct file *filp;
    > >> +
    > >> + filp = atomic_open(nd, dentry, op, want_write, &create_error);
    > >> + if (filp) {
    > >> + dput(dentry);
    > >> + return filp;
    > >> + }
    > >> + /* fall back to plain lookup */
    > >> + }
    > >
    > > Would it be possible to allow the filesystem to return a new dentry even
    > > if it can't complete the actual open? That way we can return the actual
    > > symlink that caused the open to fail instead of looking it up separately
    > > (which may be subject to races).
    >
    > This should be possible, but I'm reluctant to add more arguments to
    > ->atomic_open. Other possibilites that come to mind:
    >
    > return -ELOOKEDUP - caller should retry d_lookup and proceed with the result
    >
    > call opendata_set_dentry(od, dentry) and return NULL - caller checks
    > opendata for non-NULL dentry and proceeds with that

    Or convert the existing 'dentry' argument into a struct dentry **.

    Then again, it might just be easier to convert the existing arguments
    into a single "open" structure.

    --
    Trond Myklebust
    Linux NFS client maintainer

    NetApp
    Trond.Myklebust@netapp.com
    www.netapp.com

    \
     
     \ /
      Last update: 2012-03-13 16:35    [W:0.023 / U:0.072 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site