lkml.org 
[lkml]   [2011]   [Oct]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Broken link in /sys/class/net/ [was: [GIT] Networking]
    On 10/30/2011 05:49 AM, Eric W. Biederman wrote:
    > Jiri Slaby <jslaby@suse.cz> writes:
    >
    >> On 10/25/2011 03:13 PM, Greg KH wrote:
    >>> On Tue, Oct 25, 2011 at 01:46:11PM +0200, Linus Torvalds wrote:
    >>>> Anyway, after that rant about really bad practices, let me say that I
    >>>> did fix up the conflict and I think it's right. But I won't guarantee
    >>>> it, so please check the changes to fs/sysfs/dir.c.
    >>>
    >>> I think it looks ok, I've booted the merge result, and am typing and
    >>> sending this from the new kernel, and it hasn't crashed yet :)
    >>
    >> Hi, maybe this was not caused by the merge, but the patch[1] causes this
    >> mess in /sys/class/net/ for me:
    >> l????????? ? ? ? ? ? eth1
    >>
    >> This happens after one renames a net device -- the new name is eth1 here.
    >>
    >> [1] 4f72c0cab40 (sysfs: use rb-tree for name lookups)
    >
    > This looks pretty fixable but today sysfs_rename does not do anything
    > with the to move a renamed entry to a different position in the rbtree.
    >
    > If the directory itself changes sysfs_rename should be fine, and it
    > looks like a trivial patch to always apply the directory rename logic
    > in sysfs_rename.
    >
    > I think all we need is something like the untested patch below to fix
    > the network device rename problem.

    Looks like it works. Thanks.

    > diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
    > index 48ffbdf..a294068 100644
    > --- a/fs/sysfs/dir.c
    > +++ b/fs/sysfs/dir.c
    > @@ -865,14 +865,13 @@ int sysfs_rename(struct sysfs_dirent *sd,
    > sd->s_name = new_name;
    > }
    >
    > - /* Remove from old parent's list and insert into new parent's list. */
    > - if (sd->s_parent != new_parent_sd) {
    > - sysfs_unlink_sibling(sd);
    > - sysfs_get(new_parent_sd);
    > - sysfs_put(sd->s_parent);
    > - sd->s_parent = new_parent_sd;
    > - sysfs_link_sibling(sd);
    > - }
    > + /* Move to the appropriate place in the appropriate directories rbtree. */
    > + sysfs_unlink_sibling(sd);
    > + sysfs_get(new_parent_sd);
    > + sysfs_put(sd->s_parent);
    > + sd->s_parent = new_parent_sd;
    > + sysfs_link_sibling(sd);
    > +
    > sd->s_ns = new_ns;
    >
    > error = 0;
    >


    --
    js
    suse labs


    \
     
     \ /
      Last update: 2011-10-30 21:53    [W:0.025 / U:0.220 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site