lkml.org 
[lkml]   [2012]   [May]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH] open(2): document O_PATH
    Aneesh,

    [...]

    >> --- a/man2/open.2
    >> +++ b/man2/open.2
    >> @@ -428,6 +427,66 @@ For a discussion of the effect of
    >>  in conjunction with mandatory file locks and with file leases, see
    >>  .BR fcntl (2).
    >>  .TP
    >> +.BR O_PATH " (since Linux 2.6.39)"
    >> +.\" commit 1abf0c718f15a56a0a435588d1b104c7a37dc9bd
    >> +Obtain a file descriptor that is used only for fetching file attributes.
    >> +The file itself is not opened, and most file operations (e.g.,
    >> +.BR read (2),
    >> +.BR write (2))
    >> +fail with the error
    >> +.BR EBADF .
    >> +The following operations
    >> +.I can
    >> +be performed on the resulting file descriptor:
    >> +.RS
    >> +.IP * 3
    >> +Closing the file descriptor
    >> +.RB ( close (2)).
    >> +.\" FIXME Commit 1abf0c718f15a56a0a435588d1b104c7a37dc9bdcw
    >> +.\" message says that closing the file descriptor does not affect
    >> +.\" POSIX locks or dnotify.
    >> +.\" However, my testing shows that it DOES affect dnotify (and inotify).
    >> +.\" Does close() affect POSIX locks?
    >> +.IP *
    >
    >
    > IIUC what an O_PATH descritor doesn't do is to flush dnotify markers
    >
    >        if (likely(!(filp->f_mode & FMODE_PATH))) {
    >                dnotify_flush(filp, id);
    >                locks_remove_posix(filp, id);
    >        }
    >
    > I don't know much about markers, but as per fsnotify_backend.h
    >
    > /*
    >  * a mark is simply an object attached to an in core inode which allows an
    >  * fsnotify listener to indicate they are either no longer interested in events
    >  * of a type matching mask or only interested in those events.
    >  *
    >  * these are flushed when an inode is evicted from core and may be flushed
    >  * when the inode is modified (as seen by fsnotify_access).  Some fsnotify users
    >  * (such as dnotify) will flush these when the open fd is closed and not at
    >  * inode eviction or modification.
    >  */
    > struct fsnotify_mark {

    Unfortunately, I'm still none the wiser about what this means for
    O_PATH file descriptors...

    > It also doesn't remove posix locks. I tested this with a test prg
    >
    >    struct flock flock;
    >    flock.l_type = F_WRLCK;
    >    flock.l_whence = SEEK_SET;
    >    flock.l_start = 0;
    >    flock.l_len = 0;
    >    fd = open(argv[1], O_RDWR);
    >    fcntl(fd, F_SETLKW, &flock);
    >    fd = open(argv[1], O_PATH);
    >    close(fd);
    >
    > The close doesn't result in lock release.

    Okay -- I'll add mention of this to the O_PATH description.

    Thanks,

    Michael


    --
    Michael Kerrisk
    Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
    Author of "The Linux Programming Interface"; http://man7.org/tlpi/
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2012-05-03 09:21    [W:0.027 / U:31.344 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site