On Thu, Sep 5, 2013 at 7:01 PM, Waiman Long wrote:
>
> I am sorry that I misunderstand what you said. I will do what you and Al
> advise me to do.
I'm sorry I shouted at you. I was getting a bit frustrated there..
Linus
--
To unsubscribe from this list: send the line "unsubscribe lin
On 09/05/2013 04:42 PM, Linus Torvalds wrote:
On Thu, Sep 5, 2013 at 1:29 PM, Waiman Long wrote:
It is not as simple as doing a strncpy().
Yes it damn well is.
Stop the f*cking stupid arguments, and instead listen to what I say.
Here. Let me bold-face the most important part for you, so that
On Thu, Sep 5, 2013 at 1:46 PM, Al Viro wrote:
>
> static int prepend_name(char **buffer, int *buflen, struct qstr *name)
> {
> const char *s = ACCESS_ONCE(name->name);
> unsigned len = ACCESS_ONCE(name->len);
> char *p;
>
> *buflen -= len;
> if (*buflen < 0
On Thu, Sep 05, 2013 at 04:29:06PM -0400, Waiman Long wrote:
> It is not as simple as doing a strncpy(). The pathname was built
> from the leaf up to the root, and from the end of buffer toward the
> beginning. As it goes through the while loop, the buffer will look
> like:
>
> "/c"
> " /b/c
On Thu, Sep 5, 2013 at 1:29 PM, Waiman Long wrote:
>
> It is not as simple as doing a strncpy().
Yes it damn well is.
Stop the f*cking stupid arguments, and instead listen to what I say.
Here. Let me bold-face the most important part for you, so that you
don't miss it in all the other crap:
On 09/05/2013 04:04 PM, Al Viro wrote:
On Thu, Sep 05, 2013 at 02:55:16PM -0400, Waiman Long wrote:
+ const char *dname = ACCESS_ONCE(dentry->d_name.name);
+ u32 dlen = dentry->d_name.len;
+ int error;
+
+ if (likely(dname == (const char *)dentry->d_iname)) {
+
On 09/05/2013 03:35 PM, Linus Torvalds wrote:
No. Stop all these stupid games.
No d_lock, no trying to make d_name/d_len consistent.
No "compare d_name against d_iname".
No EINVAL.
No idiotic racy "let's fetch each byte one-by one and test them
against NUL", which is just racy and stupid.
Ju
On Thu, Sep 05, 2013 at 02:55:16PM -0400, Waiman Long wrote:
> + const char *dname = ACCESS_ONCE(dentry->d_name.name);
> + u32 dlen = dentry->d_name.len;
> + int error;
> +
> + if (likely(dname == (const char *)dentry->d_iname)) {
> + /*
> + * Internal dname
On Thu, Sep 5, 2013 at 11:55 AM, Waiman Long wrote:
> +static int prepend_name(char **buffer, int *buflen, struct dentry *dentry)
> {
> - return prepend(buffer, buflen, name->name, name->len);
> + /*
> +* With RCU path tracing, it may race with rename. Use
> +* ACCESS_
When running the AIM7's short workload, Linus' lockref patch eliminated
most of the spinlock contention. However, there were still some left:
8.46% reaim [kernel.kallsyms] [k] _raw_spin_lock
|--42.21%-- d_path
| proc_pid_readlink
10 matches
Mail list logo