diff options
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 6e2a2cd82321..38793fb84a35 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1082,6 +1082,7 @@ static int dev_get_valid_name(struct net *net, | |||
1082 | */ | 1082 | */ |
1083 | int dev_change_name(struct net_device *dev, const char *newname) | 1083 | int dev_change_name(struct net_device *dev, const char *newname) |
1084 | { | 1084 | { |
1085 | unsigned char old_assign_type; | ||
1085 | char oldname[IFNAMSIZ]; | 1086 | char oldname[IFNAMSIZ]; |
1086 | int err = 0; | 1087 | int err = 0; |
1087 | int ret; | 1088 | int ret; |
@@ -1109,10 +1110,14 @@ int dev_change_name(struct net_device *dev, const char *newname) | |||
1109 | return err; | 1110 | return err; |
1110 | } | 1111 | } |
1111 | 1112 | ||
1113 | old_assign_type = dev->name_assign_type; | ||
1114 | dev->name_assign_type = NET_NAME_RENAMED; | ||
1115 | |||
1112 | rollback: | 1116 | rollback: |
1113 | ret = device_rename(&dev->dev, dev->name); | 1117 | ret = device_rename(&dev->dev, dev->name); |
1114 | if (ret) { | 1118 | if (ret) { |
1115 | memcpy(dev->name, oldname, IFNAMSIZ); | 1119 | memcpy(dev->name, oldname, IFNAMSIZ); |
1120 | dev->name_assign_type = old_assign_type; | ||
1116 | write_seqcount_end(&devnet_rename_seq); | 1121 | write_seqcount_end(&devnet_rename_seq); |
1117 | return ret; | 1122 | return ret; |
1118 | } | 1123 | } |
@@ -1141,6 +1146,8 @@ rollback: | |||
1141 | write_seqcount_begin(&devnet_rename_seq); | 1146 | write_seqcount_begin(&devnet_rename_seq); |
1142 | memcpy(dev->name, oldname, IFNAMSIZ); | 1147 | memcpy(dev->name, oldname, IFNAMSIZ); |
1143 | memcpy(oldname, newname, IFNAMSIZ); | 1148 | memcpy(oldname, newname, IFNAMSIZ); |
1149 | dev->name_assign_type = old_assign_type; | ||
1150 | old_assign_type = NET_NAME_RENAMED; | ||
1144 | goto rollback; | 1151 | goto rollback; |
1145 | } else { | 1152 | } else { |
1146 | pr_err("%s: name change rollback failed: %d\n", | 1153 | pr_err("%s: name change rollback failed: %d\n", |