Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (200 commits) [SCSI] usbstorage: use last_sector_bug flag universally [SCSI] libsas: abstract STP task status into a function [SCSI] ultrastor: clean up inline asm warnings [SCSI] aic7xxx: fix firmware build [SCSI] aacraid: fib context lock for management ioctls [SCSI] ch: remove forward declarations [SCSI] ch: fix device minor number management bug [SCSI] ch: handle class_device_create failure properly [SCSI] NCR5380: fix section mismatch [SCSI] sg: fix /proc/scsi/sg/devices when no SCSI devices [SCSI] IB/iSER: add logical unit reset support [SCSI] don't use __GFP_DMA for sense buffers if not required [SCSI] use dynamically allocated sense buffer [SCSI] scsi.h: add macro for enclosure bit of inquiry data [SCSI] sd: add fix for devices with last sector access problems [SCSI] fix pcmcia compile problem [SCSI] aacraid: add Voodoo Lite class of cards. [SCSI] aacraid: add new driver features flags [SCSI] qla2xxx: Update version number to 8.02.00-k7. [SCSI] qla2xxx: Issue correct MBC_INITIALIZE_FIRMWARE command. ...
This commit is contained in:
@@ -523,7 +523,11 @@ int sysfs_add_file_to_group(struct kobject *kobj,
|
||||
struct sysfs_dirent *dir_sd;
|
||||
int error;
|
||||
|
||||
dir_sd = sysfs_get_dirent(kobj->sd, group);
|
||||
if (group)
|
||||
dir_sd = sysfs_get_dirent(kobj->sd, group);
|
||||
else
|
||||
dir_sd = sysfs_get(kobj->sd);
|
||||
|
||||
if (!dir_sd)
|
||||
return -ENOENT;
|
||||
|
||||
@@ -611,7 +615,10 @@ void sysfs_remove_file_from_group(struct kobject *kobj,
|
||||
{
|
||||
struct sysfs_dirent *dir_sd;
|
||||
|
||||
dir_sd = sysfs_get_dirent(kobj->sd, group);
|
||||
if (group)
|
||||
dir_sd = sysfs_get_dirent(kobj->sd, group);
|
||||
else
|
||||
dir_sd = sysfs_get(kobj->sd);
|
||||
if (dir_sd) {
|
||||
sysfs_hash_and_remove(dir_sd, attr->name);
|
||||
sysfs_put(dir_sd);
|
||||
|
@@ -16,25 +16,31 @@
|
||||
#include "sysfs.h"
|
||||
|
||||
|
||||
static void remove_files(struct sysfs_dirent *dir_sd,
|
||||
static void remove_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
|
||||
const struct attribute_group *grp)
|
||||
{
|
||||
struct attribute *const* attr;
|
||||
int i;
|
||||
|
||||
for (attr = grp->attrs; *attr; attr++)
|
||||
sysfs_hash_and_remove(dir_sd, (*attr)->name);
|
||||
for (i = 0, attr = grp->attrs; *attr; i++, attr++)
|
||||
if (!grp->is_visible ||
|
||||
grp->is_visible(kobj, *attr, i))
|
||||
sysfs_hash_and_remove(dir_sd, (*attr)->name);
|
||||
}
|
||||
|
||||
static int create_files(struct sysfs_dirent *dir_sd,
|
||||
static int create_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
|
||||
const struct attribute_group *grp)
|
||||
{
|
||||
struct attribute *const* attr;
|
||||
int error = 0;
|
||||
int error = 0, i;
|
||||
|
||||
for (attr = grp->attrs; *attr && !error; attr++)
|
||||
error = sysfs_add_file(dir_sd, *attr, SYSFS_KOBJ_ATTR);
|
||||
for (i = 0, attr = grp->attrs; *attr && !error; i++, attr++)
|
||||
if (!grp->is_visible ||
|
||||
grp->is_visible(kobj, *attr, i))
|
||||
error |=
|
||||
sysfs_add_file(dir_sd, *attr, SYSFS_KOBJ_ATTR);
|
||||
if (error)
|
||||
remove_files(dir_sd, grp);
|
||||
remove_files(dir_sd, kobj, grp);
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -54,7 +60,7 @@ int sysfs_create_group(struct kobject * kobj,
|
||||
} else
|
||||
sd = kobj->sd;
|
||||
sysfs_get(sd);
|
||||
error = create_files(sd, grp);
|
||||
error = create_files(sd, kobj, grp);
|
||||
if (error) {
|
||||
if (grp->name)
|
||||
sysfs_remove_subdir(sd);
|
||||
@@ -75,7 +81,7 @@ void sysfs_remove_group(struct kobject * kobj,
|
||||
} else
|
||||
sd = sysfs_get(dir_sd);
|
||||
|
||||
remove_files(sd, grp);
|
||||
remove_files(sd, kobj, grp);
|
||||
if (grp->name)
|
||||
sysfs_remove_subdir(sd);
|
||||
|
||||
|
مرجع در شماره جدید
Block a user