diff options
Diffstat (limited to 'fs/partitions/check.c')
| -rw-r--r-- | fs/partitions/check.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 5dcd4b0c5533..79fbf3f390f0 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c | |||
| @@ -164,10 +164,16 @@ check_partition(struct gendisk *hd, struct block_device *bdev) | |||
| 164 | state = kzalloc(sizeof(struct parsed_partitions), GFP_KERNEL); | 164 | state = kzalloc(sizeof(struct parsed_partitions), GFP_KERNEL); |
| 165 | if (!state) | 165 | if (!state) |
| 166 | return NULL; | 166 | return NULL; |
| 167 | state->pp_buf = (char *)__get_free_page(GFP_KERNEL); | ||
| 168 | if (!state->pp_buf) { | ||
| 169 | kfree(state); | ||
| 170 | return NULL; | ||
| 171 | } | ||
| 172 | state->pp_buf[0] = '\0'; | ||
| 167 | 173 | ||
| 168 | state->bdev = bdev; | 174 | state->bdev = bdev; |
| 169 | disk_name(hd, 0, state->name); | 175 | disk_name(hd, 0, state->name); |
| 170 | printk(KERN_INFO " %s:", state->name); | 176 | snprintf(state->pp_buf, PAGE_SIZE, " %s:", state->name); |
| 171 | if (isdigit(state->name[strlen(state->name)-1])) | 177 | if (isdigit(state->name[strlen(state->name)-1])) |
| 172 | sprintf(state->name, "p"); | 178 | sprintf(state->name, "p"); |
| 173 | 179 | ||
| @@ -185,17 +191,25 @@ check_partition(struct gendisk *hd, struct block_device *bdev) | |||
| 185 | } | 191 | } |
| 186 | 192 | ||
| 187 | } | 193 | } |
| 188 | if (res > 0) | 194 | if (res > 0) { |
| 195 | printk(KERN_INFO "%s", state->pp_buf); | ||
| 196 | |||
| 197 | free_page((unsigned long)state->pp_buf); | ||
| 189 | return state; | 198 | return state; |
| 199 | } | ||
| 190 | if (state->access_beyond_eod) | 200 | if (state->access_beyond_eod) |
| 191 | err = -ENOSPC; | 201 | err = -ENOSPC; |
| 192 | if (err) | 202 | if (err) |
| 193 | /* The partition is unrecognized. So report I/O errors if there were any */ | 203 | /* The partition is unrecognized. So report I/O errors if there were any */ |
| 194 | res = err; | 204 | res = err; |
| 195 | if (!res) | 205 | if (!res) |
| 196 | printk(" unknown partition table\n"); | 206 | strlcat(state->pp_buf, " unknown partition table\n", PAGE_SIZE); |
| 197 | else if (warn_no_part) | 207 | else if (warn_no_part) |
| 198 | printk(" unable to read partition table\n"); | 208 | strlcat(state->pp_buf, " unable to read partition table\n", PAGE_SIZE); |
| 209 | |||
| 210 | printk(KERN_INFO "%s", state->pp_buf); | ||
| 211 | |||
| 212 | free_page((unsigned long)state->pp_buf); | ||
| 199 | kfree(state); | 213 | kfree(state); |
| 200 | return ERR_PTR(res); | 214 | return ERR_PTR(res); |
| 201 | } | 215 | } |
| @@ -459,7 +473,6 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno, | |||
| 459 | } | 473 | } |
| 460 | 474 | ||
| 461 | /* everything is up and running, commence */ | 475 | /* everything is up and running, commence */ |
| 462 | INIT_RCU_HEAD(&p->rcu_head); | ||
| 463 | rcu_assign_pointer(ptbl->part[partno], p); | 476 | rcu_assign_pointer(ptbl->part[partno], p); |
| 464 | 477 | ||
| 465 | /* suppress uevent if the disk supresses it */ | 478 | /* suppress uevent if the disk supresses it */ |
