diff --git a/Documentation/ja_JP/HOWTO b/Documentation/ja_JP/HOWTO index 0091a8215ac150736346a669b5c822d70e5d02db..b61885c35ce11db98f6266342aec174f81dd0144 100644 --- a/Documentation/ja_JP/HOWTO +++ b/Documentation/ja_JP/HOWTO @@ -315,7 +315,7 @@ Andrew Morton 銇� Linux-kernel 銉°兗銉兂銈般儶銈广儓銇偒銉笺儘銉儶銉兗 銈傘仐銆�3.x.y 銈兗銉嶃儷銇屽瓨鍦ㄣ仐銇亜鍫村悎銇伅銆佺暘鍙枫亴涓€鐣ぇ銇嶃亜 3.x 銇� 鏈€鏂般伄瀹夊畾鐗堛偒銉笺儘銉仹銇欍€� -3.x.y 銇� "stable" 銉併兗銉� <stable@kernel.org> 銇с儭銉炽儐銇曘倢銇︺亰銈娿€佸繀 +3.x.y 銇� "stable" 銉併兗銉� <stable@vger.kernel.org> 銇с儭銉炽儐銇曘倢銇︺亰銈娿€佸繀 瑕併伀蹇溿仒銇︺儶銉兗銈广仌銈屻伨銇欍€傞€氬父銇儶銉兗銈规湡闁撱伅 2閫遍枔姣庛仹銇欍亴銆佸樊銇楄揩銇� 銇熷晱椤屻亴銇亼銈屻伆銈傘亞灏戙仐闀枫亸銇倠銇撱仺銈傘亗銈娿伨銇欍€傘偦銈儱銉儐銈i枹閫c伄鍟忛 銇牬鍚堛伅銇撱倢銇銇椼仸銇犮亜銇熴亜銇牬鍚堛€併仚銇愩伀銉儶銉笺偣銇屻仌銈屻伨銇欍€� diff --git a/Documentation/ja_JP/stable_kernel_rules.txt b/Documentation/ja_JP/stable_kernel_rules.txt index 14265837c4ce346a3424212c4ab8a3181b39b499..9dbda9b5d21ed4e5f7b68846a1fb0f33e9982dba 100644 --- a/Documentation/ja_JP/stable_kernel_rules.txt +++ b/Documentation/ja_JP/stable_kernel_rules.txt @@ -50,16 +50,16 @@ linux-2.6.29/Documentation/stable_kernel_rules.txt -stable 銉勩儶銉笺伀銉戙儍銉併倰閫佷粯銇欍倠鎵嬬稓銇�- - - 涓婅銇鍓囥伀寰撱仯銇︺亜銈嬨亱銈掔⒑瑾嶃仐銇熷緦銇€乻table@kernel.org 銇儜銉冦儊 + - 涓婅銇鍓囥伀寰撱仯銇︺亜銈嬨亱銈掔⒑瑾嶃仐銇熷緦銇€乻table@vger.kernel.org 銇儜銉冦儊 銈掗€併倠銆� - 閫佷俊鑰呫伅銉戙儍銉併亴銈儱銉笺伀鍙椼亼浠樸亼銈夈倢銇熼殯銇伅 ACK 銈掋€佸嵈涓嬨仌銈屻仧鍫村悎 銇伅 NAK 銈掑彈銇戝彇銈嬨€傘亾銇弽蹇溿伅闁嬬櫤鑰呫仧銇°伄銈广偙銈搞儱銉笺儷銇倛銇c仸銆佹暟 鏃ャ亱銇嬨倠鍫村悎銇屻亗銈嬨€� - 銈傘仐鍙椼亼鍙栥倝銈屻仧銈夈€併儜銉冦儊銇粬銇枊鐧鸿€呫仧銇°仺闁㈤€c仚銈嬨偟銉栥偡銈广儐銉犮伄 銉°兂銉嗐儕銉笺伀銈堛倠銉儞銉ャ兗銇仧銈併伀 -stable 銈儱銉笺伀杩藉姞銇曘倢銈嬨€� - - 銉戙儍銉併伀 stable@kernel.org 銇偄銉夈儸銈广亴浠樺姞銇曘倢銇︺亜銈嬨仺銇嶃伀銇€併仢銈� + - 銉戙儍銉併伀 stable@vger.kernel.org 銇偄銉夈儸銈广亴浠樺姞銇曘倢銇︺亜銈嬨仺銇嶃伀銇€併仢銈� 銇� Linus 銇儎銉兗銇叆銈嬫檪銇嚜鍕曠殑銇� stable 銉併兗銉犮伀 email 銇曘倢銈嬨€� - - 銈汇偔銉ャ儶銉嗐偅銉戙儍銉併伅銇撱伄銈ㄣ偆銉偄銈� (stable@kernel.org) 銇€併倝銈屻倠銇� + - 銈汇偔銉ャ儶銉嗐偅銉戙儍銉併伅銇撱伄銈ㄣ偆銉偄銈� (stable@vger.kernel.org) 銇€併倝銈屻倠銇� 銇嶃仹銇仾銇忋€佷唬銈忋倞銇� security@kernel.org 銇偄銉夈儸銈广伀閫併倝銈屻倠銆� 銉儞銉ャ兗銈点偆銈儷- diff --git a/Documentation/stable_kernel_rules.txt b/Documentation/stable_kernel_rules.txt index b0714d8f678ac51d0c280a4f5f2980196052421f..cbc2f03056bdef25da9dc87013680748c905e9d0 100644 --- a/Documentation/stable_kernel_rules.txt +++ b/Documentation/stable_kernel_rules.txt @@ -39,7 +39,7 @@ Procedure for submitting patches to the -stable tree: the stable tree without anything else needing to be done by the author or subsystem maintainer. - If the patch requires other patches as prerequisites which can be - cherry-picked than this can be specified in the following format in + cherry-picked, then this can be specified in the following format in the sign-off area: Cc: <stable@vger.kernel.org> # 3.3.x: a1f84a3: sched: Check for idle diff --git a/Documentation/zh_CN/HOWTO b/Documentation/zh_CN/HOWTO index 6c914aa87e7138086f7522ff4fc78acba564437c..54ea24ff63c7ceeba400d900362020c8324d1764 100644 --- a/Documentation/zh_CN/HOWTO +++ b/Documentation/zh_CN/HOWTO @@ -237,7 +237,7 @@ kernel.org缃戠珯鐨刾ub/linux/kernel/v2.6/鐩綍涓嬫壘鍒板畠銆傚畠鐨勫紑鍙戦伒寰� 濡傛灉娌℃湁2.6.x.y鐗堟湰鍐呮牳瀛樺湪锛岄偅涔堟渶鏂扮殑2.6.x鐗堟湰鍐呮牳灏辩浉褰撲簬鏄綋鍓嶇殑绋冲畾 鐗堝唴鏍搞€� -2.6.x.y鐗堟湰鐢扁€滅ǔ瀹氱増鈥濆皬缁勶紙閭欢鍦板潃<stable@kernel.org>锛夌淮鎶わ紝涓€鑸殧鍛ㄥ彂 +2.6.x.y鐗堟湰鐢扁€滅ǔ瀹氱増鈥濆皬缁勶紙閭欢鍦板潃<stable@vger.kernel.org>锛夌淮鎶わ紝涓€鑸殧鍛ㄥ彂 甯冩柊鐗堟湰銆� 鍐呮牳婧愮爜涓殑Documentation/stable_kernel_rules.txt鏂囦欢鍏蜂綋鎻忚堪浜嗗彲琚ǔ瀹� diff --git a/Documentation/zh_CN/io_ordering.txt b/Documentation/zh_CN/io_ordering.txt new file mode 100644 index 0000000000000000000000000000000000000000..e592daf4e0143b4a00ee213a2d167e53eff94ca6 --- /dev/null +++ b/Documentation/zh_CN/io_ordering.txt @@ -0,0 +1,67 @@ +Chinese translated version of Documentation/io_orderings.txt + +If you have any comment or update to the content, please contact the +original document maintainer directly. However, if you have a problem +communicating in English you can also ask the Chinese maintainer for +help. Contact the Chinese maintainer if this translation is outdated +or if there is a problem with the translation. + +Chinese maintainer: Lin Yongting <linyongting@gmail.com> +--------------------------------------------------------------------- +Documentation/io_ordering.txt 鐨勪腑鏂囩炕璇� + +濡傛灉鎯宠瘎璁烘垨鏇存柊鏈枃鐨勫唴瀹癸紝璇风洿鎺ヨ仈绯诲師鏂囨。鐨勭淮鎶よ€呫€傚鏋滀綘浣跨敤鑻辨枃 +浜ゆ祦鏈夊洶闅剧殑璇濓紝涔熷彲浠ュ悜涓枃鐗堢淮鎶よ€呮眰鍔┿€傚鏋滄湰缈昏瘧鏇存柊涓嶅強鏃舵垨鑰呯炕 +璇戝瓨鍦ㄩ棶棰橈紝璇疯仈绯讳腑鏂囩増缁存姢鑰呫€� + +涓枃鐗堢淮鎶よ€咃細 鏋楁案鍚� Lin Yongting <linyongting@gmail.com> +涓枃鐗堢炕璇戣€咃細 鏋楁案鍚� Lin Yongting <linyongting@gmail.com> +涓枃鐗堟牎璇戣€咃細 鏋楁案鍚� Lin Yongting <linyongting@gmail.com> + + +浠ヤ笅涓烘鏂� +--------------------------------------------------------------------- + +鍦ㄦ煇浜涘钩鍙颁笂锛屾墍璋撶殑鍐呭瓨鏄犲皠I/O鏄急椤哄簭銆傚湪杩欎簺骞冲彴涓婏紝椹卞姩寮€鍙戣€呮湁璐d换 +淇濊瘉I/O鍐呭瓨鏄犲皠鍦板潃鐨勫啓鎿嶄綔鎸夌▼搴忓浘鎰忕殑椤哄簭杈惧埌璁惧銆傞€氬父璇诲彇涓€涓€滃畨鍏ㄢ€� +璁惧瀵勫瓨鍣ㄦ垨妗ュ瘎瀛樺櫒锛岃Е鍙慖O鑺墖娓呭埛鏈鐞嗙殑鍐欐搷浣滃埌杈捐澶囧悗鎵嶅鐞嗚鎿嶄綔锛� +鑰岃揪鍒颁繚璇佺洰鐨勩€傞┍鍔ㄧ▼搴忛€氬父鍦╯pinlock淇濇姢鐨勪复鐣屽尯閫€鍑轰箣鍓嶄娇鐢ㄨ繖绉嶆妧鏈€� +杩欎篃鍙互淇濊瘉鍚庨潰鐨勫啓鎿嶄綔鍙湪鍓嶉潰鐨勫啓鎿嶄綔涔嬪悗鍒拌揪璁惧锛堣繖闈炲父绫讳技浜庡唴瀛� +灞忛殰鎿嶄綔锛宮b()锛屼笉杩囦粎閫傜敤浜嶪/O锛夈€� + +鍋囪涓€涓澶囬┍鍔ㄧ▼鐨勫叿浣撲緥瀛愶細 + + ... +CPU A: spin_lock_irqsave(&dev_lock, flags) +CPU A: val = readl(my_status); +CPU A: ... +CPU A: writel(newval, ring_ptr); +CPU A: spin_unlock_irqrestore(&dev_lock, flags) + ... +CPU B: spin_lock_irqsave(&dev_lock, flags) +CPU B: val = readl(my_status); +CPU B: ... +CPU B: writel(newval2, ring_ptr); +CPU B: spin_unlock_irqrestore(&dev_lock, flags) + ... + +涓婅堪渚嬪瓙涓紝璁惧鍙兘浼氬厛鎺ユ敹鍒皀ewval2鐨勫€硷紝鐒跺悗鎺ユ敹鍒皀ewval鐨勫€硷紝闂灏� +鍙戠敓浜嗐€備笉杩囧緢瀹规槗閫氳繃涓嬮潰鏂规硶鏉ヤ慨澶嶏細 + + ... +CPU A: spin_lock_irqsave(&dev_lock, flags) +CPU A: val = readl(my_status); +CPU A: ... +CPU A: writel(newval, ring_ptr); +CPU A: (void)readl(safe_register); /* 閰嶇疆瀵勫瓨鍣紵*/ +CPU A: spin_unlock_irqrestore(&dev_lock, flags) + ... +CPU B: spin_lock_irqsave(&dev_lock, flags) +CPU B: val = readl(my_status); +CPU B: ... +CPU B: writel(newval2, ring_ptr); +CPU B: (void)readl(safe_register); /* 閰嶇疆瀵勫瓨鍣紵*/ +CPU B: spin_unlock_irqrestore(&dev_lock, flags) + +鍦ㄨВ鍐虫柟妗堜腑锛岃鍙杝afe_register瀵勫瓨鍣紝瑙﹀彂IO鑺墖娓呭埛鏈鐞嗙殑鍐欐搷浣滐紝 +鍐嶅鐞嗗悗闈㈢殑璇绘搷浣滐紝闃叉寮曞彂鏁版嵁涓嶄竴鑷撮棶棰樸€� diff --git a/Documentation/zh_CN/stable_kernel_rules.txt b/Documentation/zh_CN/stable_kernel_rules.txt index b5b9b0ab02fd5a76f1a67e8eb2de736ec7812f1e..26ea5ed7cd9c4c5363ab2b8caaf3062d403ca2e1 100644 --- a/Documentation/zh_CN/stable_kernel_rules.txt +++ b/Documentation/zh_CN/stable_kernel_rules.txt @@ -42,7 +42,7 @@ Documentation/stable_kernel_rules.txt 鐨勪腑鏂囩炕璇� 鍚戠ǔ瀹氱増浠g爜鏍戞彁浜よˉ涓佺殑杩囩▼锛� - - 鍦ㄧ‘璁や簡琛ヤ竵绗﹀悎浠ヤ笂鐨勮鍒欏悗锛屽皢琛ヤ竵鍙戦€佸埌stable@kernel.org銆� + - 鍦ㄧ‘璁や簡琛ヤ竵绗﹀悎浠ヤ笂鐨勮鍒欏悗锛屽皢琛ヤ竵鍙戦€佸埌stable@vger.kernel.org銆� - 濡傛灉琛ヤ竵琚帴鍙楀埌闃熷垪閲岋紝鍙戦€佽€呬細鏀跺埌涓€涓狝CK鍥炲锛屽鏋滄病鏈夎鎺ュ彈锛屾敹 鍒扮殑鏄疦AK鍥炲銆傚洖澶嶉渶瑕佸嚑澶╃殑鏃堕棿锛岃繖鍙栧喅浜庡紑鍙戣€呯殑鏃堕棿瀹夋帓銆� - 琚帴鍙楃殑琛ヤ竵浼氳鍔犲埌绋冲畾鐗堟湰闃熷垪閲岋紝绛夊緟鍏朵粬寮€鍙戣€呯殑瀹℃煡銆� diff --git a/drivers/base/core.c b/drivers/base/core.c index 0dd65281cc65bb6a368143bea0373c2c373787dd..20da3ad1696b58ef6aa6a91830070063e1dc21d7 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -614,39 +614,6 @@ void device_remove_bin_file(struct device *dev, } EXPORT_SYMBOL_GPL(device_remove_bin_file); -/** - * device_schedule_callback_owner - helper to schedule a callback for a device - * @dev: device. - * @func: callback function to invoke later. - * @owner: module owning the callback routine - * - * Attribute methods must not unregister themselves or their parent device - * (which would amount to the same thing). Attempts to do so will deadlock, - * since unregistration is mutually exclusive with driver callbacks. - * - * Instead methods can call this routine, which will attempt to allocate - * and schedule a workqueue request to call back @func with @dev as its - * argument in the workqueue's process context. @dev will be pinned until - * @func returns. - * - * This routine is usually called via the inline device_schedule_callback(), - * which automatically sets @owner to THIS_MODULE. - * - * Returns 0 if the request was submitted, -ENOMEM if storage could not - * be allocated, -ENODEV if a reference to @owner isn't available. - * - * NOTE: This routine won't work if CONFIG_SYSFS isn't set! It uses an - * underlying sysfs routine (since it is intended for use by attribute - * methods), and if sysfs isn't available you'll get nothing but -ENOSYS. - */ -int device_schedule_callback_owner(struct device *dev, - void (*func)(struct device *), struct module *owner) -{ - return sysfs_schedule_callback(&dev->kobj, - (void (*)(void *)) func, dev, owner); -} -EXPORT_SYMBOL_GPL(device_schedule_callback_owner); - static void klist_children_get(struct klist_node *n) { struct device_private *p = to_device_private_parent(n); diff --git a/drivers/base/dd.c b/drivers/base/dd.c index 06051767393f7638d4ea02a14bfc5a8a689a0305..8986b9f22781fa667cf41a37b5889e8ac3be0a36 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c @@ -187,8 +187,8 @@ static void driver_bound(struct device *dev) return; } - pr_debug("driver: '%s': %s: bound to device '%s'\n", dev_name(dev), - __func__, dev->driver->name); + pr_debug("driver: '%s': %s: bound to device '%s'\n", dev->driver->name, + __func__, dev_name(dev)); klist_add_tail(&dev->p->knode_driver, &dev->driver->p->klist_devices); diff --git a/drivers/base/topology.c b/drivers/base/topology.c index bbcbd3c4392689ef5022af42d0a09bb504be7253..be7c1fb7c0c96fa4d19bda57bf465c836a630091 100644 --- a/drivers/base/topology.c +++ b/drivers/base/topology.c @@ -39,8 +39,7 @@ static ssize_t show_##name(struct device *dev, \ struct device_attribute *attr, char *buf) \ { \ - unsigned int cpu = dev->id; \ - return sprintf(buf, "%d\n", topology_##name(cpu)); \ + return sprintf(buf, "%d\n", topology_##name(dev->id)); \ } #if defined(topology_thread_cpumask) || defined(topology_core_cpumask) || \ diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index abb0f1f53d933c7286527719e9644c47152408b6..985217626e663f360afd6db67ae13ffdf2cad9ca 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -48,14 +48,18 @@ void __init kernfs_inode_init(void) static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn) { + static DEFINE_MUTEX(iattr_mutex); + struct kernfs_iattrs *ret; struct iattr *iattrs; + mutex_lock(&iattr_mutex); + if (kn->iattr) - return kn->iattr; + goto out_unlock; kn->iattr = kzalloc(sizeof(struct kernfs_iattrs), GFP_KERNEL); if (!kn->iattr) - return NULL; + goto out_unlock; iattrs = &kn->iattr->ia_iattr; /* assign default attributes */ @@ -65,8 +69,10 @@ static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn) iattrs->ia_atime = iattrs->ia_mtime = iattrs->ia_ctime = CURRENT_TIME; simple_xattrs_init(&kn->iattr->xattrs); - - return kn->iattr; +out_unlock: + ret = kn->iattr; + mutex_unlock(&iattr_mutex); + return ret; } static int __kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr) diff --git a/fs/super.c b/fs/super.c index e9dc3c3fe159cc2e59bfb27f0beb8bd30e92188b..48377f7463c0d3af6e9a7f521517e3d59fec7409 100644 --- a/fs/super.c +++ b/fs/super.c @@ -800,7 +800,10 @@ void emergency_remount(void) static DEFINE_IDA(unnamed_dev_ida); static DEFINE_SPINLOCK(unnamed_dev_lock);/* protects the above */ -static int unnamed_dev_start = 0; /* don't bother trying below it */ +/* Many userspace utilities consider an FSID of 0 invalid. + * Always return at least 1 from get_anon_bdev. + */ +static int unnamed_dev_start = 1; int get_anon_bdev(dev_t *p) { diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index 1b8b91b67fdb7a4b192b9568ad1d85defdcd863a..28cc1acd5439bf8caeb6d93e8bf68804ad738b1b 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c @@ -453,95 +453,3 @@ void sysfs_remove_bin_file(struct kobject *kobj, kernfs_remove_by_name(kobj->sd, attr->attr.name); } EXPORT_SYMBOL_GPL(sysfs_remove_bin_file); - -struct sysfs_schedule_callback_struct { - struct list_head workq_list; - struct kobject *kobj; - void (*func)(void *); - void *data; - struct module *owner; - struct work_struct work; -}; - -static struct workqueue_struct *sysfs_workqueue; -static DEFINE_MUTEX(sysfs_workq_mutex); -static LIST_HEAD(sysfs_workq); -static void sysfs_schedule_callback_work(struct work_struct *work) -{ - struct sysfs_schedule_callback_struct *ss = container_of(work, - struct sysfs_schedule_callback_struct, work); - - (ss->func)(ss->data); - kobject_put(ss->kobj); - module_put(ss->owner); - mutex_lock(&sysfs_workq_mutex); - list_del(&ss->workq_list); - mutex_unlock(&sysfs_workq_mutex); - kfree(ss); -} - -/** - * sysfs_schedule_callback - helper to schedule a callback for a kobject - * @kobj: object we're acting for. - * @func: callback function to invoke later. - * @data: argument to pass to @func. - * @owner: module owning the callback code - * - * sysfs attribute methods must not unregister themselves or their parent - * kobject (which would amount to the same thing). Attempts to do so will - * deadlock, since unregistration is mutually exclusive with driver - * callbacks. - * - * Instead methods can call this routine, which will attempt to allocate - * and schedule a workqueue request to call back @func with @data as its - * argument in the workqueue's process context. @kobj will be pinned - * until @func returns. - * - * Returns 0 if the request was submitted, -ENOMEM if storage could not - * be allocated, -ENODEV if a reference to @owner isn't available, - * -EAGAIN if a callback has already been scheduled for @kobj. - */ -int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *), - void *data, struct module *owner) -{ - struct sysfs_schedule_callback_struct *ss, *tmp; - - if (!try_module_get(owner)) - return -ENODEV; - - mutex_lock(&sysfs_workq_mutex); - list_for_each_entry_safe(ss, tmp, &sysfs_workq, workq_list) - if (ss->kobj == kobj) { - module_put(owner); - mutex_unlock(&sysfs_workq_mutex); - return -EAGAIN; - } - mutex_unlock(&sysfs_workq_mutex); - - if (sysfs_workqueue == NULL) { - sysfs_workqueue = create_singlethread_workqueue("sysfsd"); - if (sysfs_workqueue == NULL) { - module_put(owner); - return -ENOMEM; - } - } - - ss = kmalloc(sizeof(*ss), GFP_KERNEL); - if (!ss) { - module_put(owner); - return -ENOMEM; - } - kobject_get(kobj); - ss->kobj = kobj; - ss->func = func; - ss->data = data; - ss->owner = owner; - INIT_WORK(&ss->work, sysfs_schedule_callback_work); - INIT_LIST_HEAD(&ss->workq_list); - mutex_lock(&sysfs_workq_mutex); - list_add_tail(&ss->workq_list, &sysfs_workq); - mutex_unlock(&sysfs_workq_mutex); - queue_work(sysfs_workqueue, &ss->work); - return 0; -} -EXPORT_SYMBOL_GPL(sysfs_schedule_callback); diff --git a/include/linux/device.h b/include/linux/device.h index 233bbbeb768d6f8c5a6aa32411675a14b3401272..d1d1c055b48e2efa8bbdc692b185eaa16f9619cf 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -566,12 +566,6 @@ extern int __must_check device_create_bin_file(struct device *dev, const struct bin_attribute *attr); extern void device_remove_bin_file(struct device *dev, const struct bin_attribute *attr); -extern int device_schedule_callback_owner(struct device *dev, - void (*func)(struct device *dev), struct module *owner); - -/* This is a macro to avoid include problems with THIS_MODULE */ -#define device_schedule_callback(dev, func) \ - device_schedule_callback_owner(dev, func, THIS_MODULE) /* device resource management */ typedef void (*dr_release_t)(struct device *dev, void *res); @@ -932,10 +926,7 @@ extern int device_online(struct device *dev); extern struct device *__root_device_register(const char *name, struct module *owner); -/* - * This is a macro to avoid include problems with THIS_MODULE, - * just as per what is done for device_schedule_callback() above. - */ +/* This is a macro to avoid include problems with THIS_MODULE */ #define root_device_register(name) \ __root_device_register(name, THIS_MODULE) diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 084354b0e81451c651120afebdc75dfbaaec02f8..5ffaa3443712823a3f24acce437a328e24e86fa9 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h @@ -179,9 +179,6 @@ struct sysfs_ops { #ifdef CONFIG_SYSFS -int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *), - void *data, struct module *owner); - int __must_check sysfs_create_dir_ns(struct kobject *kobj, const void *ns); void sysfs_remove_dir(struct kobject *kobj); int __must_check sysfs_rename_dir_ns(struct kobject *kobj, const char *new_name, @@ -255,12 +252,6 @@ static inline void sysfs_enable_ns(struct kernfs_node *kn) #else /* CONFIG_SYSFS */ -static inline int sysfs_schedule_callback(struct kobject *kobj, - void (*func)(void *), void *data, struct module *owner) -{ - return -ENOSYS; -} - static inline int sysfs_create_dir_ns(struct kobject *kobj, const void *ns) { return 0;