Skip to content

Commit

Permalink
[S390] tape: duplicate sysfs filename when setting tape device online
Browse files Browse the repository at this point in the history
When a tape device is set online, offline and online again, the following
error message is printed on the console: "sysfs: duplicate filename
'non-rewinding' can not be created". The reason is that when setting a
device online, the tape driver creates a sysfs symlink from the tape device
to the tape class device. Unfortunately the symlink is not removed
correctly, when the device is set offline. Instead of passing the
tape device object to sysfs_remove_link, the class device object is used.
This patch fixes this problem and uses the correct tape device object now.

Signed-off-by: Michael Holzheu <holzheu@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
  • Loading branch information
Michael Holzheu authored and Heiko Carstens committed Apr 17, 2008
1 parent 00966c0 commit 92bf435
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 6 deletions.
4 changes: 2 additions & 2 deletions drivers/s390/char/tape_char.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,9 @@ tapechar_setup_device(struct tape_device * device)
void
tapechar_cleanup_device(struct tape_device *device)
{
unregister_tape_dev(device->rt);
unregister_tape_dev(&device->cdev->dev, device->rt);
device->rt = NULL;
unregister_tape_dev(device->nt);
unregister_tape_dev(&device->cdev->dev, device->nt);
device->nt = NULL;
}

Expand Down
5 changes: 2 additions & 3 deletions drivers/s390/char/tape_class.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,10 @@ struct tape_class_device *register_tape_dev(
}
EXPORT_SYMBOL(register_tape_dev);

void unregister_tape_dev(struct tape_class_device *tcd)
void unregister_tape_dev(struct device *device, struct tape_class_device *tcd)
{
if (tcd != NULL && !IS_ERR(tcd)) {
sysfs_remove_link(&tcd->class_device->kobj,
tcd->mode_name);
sysfs_remove_link(&device->kobj, tcd->mode_name);
device_destroy(tape_class, tcd->char_device->dev);
cdev_del(tcd->char_device);
kfree(tcd);
Expand Down
2 changes: 1 addition & 1 deletion drivers/s390/char/tape_class.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,6 @@ struct tape_class_device *register_tape_dev(
char * device_name,
char * node_name
);
void unregister_tape_dev(struct tape_class_device *tcd);
void unregister_tape_dev(struct device *device, struct tape_class_device *tcd);

#endif /* __TAPE_CLASS_H__ */

0 comments on commit 92bf435

Please sign in to comment.