diff options
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/ABI/testing/sysfs-platform-asus-laptop | 16 | ||||
-rw-r--r-- | Documentation/ABI/testing/sysfs-platform-eeepc-wmi | 10 | ||||
-rw-r--r-- | Documentation/accounting/getdelays.c | 1 | ||||
-rw-r--r-- | Documentation/filesystems/Locking | 219 | ||||
-rw-r--r-- | Documentation/filesystems/vfs.txt | 7 | ||||
-rw-r--r-- | Documentation/kernel-parameters.txt | 7 | ||||
-rw-r--r-- | Documentation/power/runtime_pm.txt | 4 | ||||
-rw-r--r-- | Documentation/scsi/scsi_mid_low_api.txt | 59 | ||||
-rw-r--r-- | Documentation/trace/postprocess/trace-vmscan-postprocess.pl | 11 |
9 files changed, 183 insertions, 151 deletions
diff --git a/Documentation/ABI/testing/sysfs-platform-asus-laptop b/Documentation/ABI/testing/sysfs-platform-asus-laptop index 1d775390e856..41ff8ae4dee0 100644 --- a/Documentation/ABI/testing/sysfs-platform-asus-laptop +++ b/Documentation/ABI/testing/sysfs-platform-asus-laptop | |||
@@ -47,6 +47,20 @@ Date: January 2007 | |||
47 | KernelVersion: 2.6.20 | 47 | KernelVersion: 2.6.20 |
48 | Contact: "Corentin Chary" <corentincj@iksaif.net> | 48 | Contact: "Corentin Chary" <corentincj@iksaif.net> |
49 | Description: | 49 | Description: |
50 | Control the bluetooth device. 1 means on, 0 means off. | 50 | Control the wlan device. 1 means on, 0 means off. |
51 | This may control the led, the device or both. | 51 | This may control the led, the device or both. |
52 | Users: Lapsus | 52 | Users: Lapsus |
53 | |||
54 | What: /sys/devices/platform/asus_laptop/wimax | ||
55 | Date: October 2010 | ||
56 | KernelVersion: 2.6.37 | ||
57 | Contact: "Corentin Chary" <corentincj@iksaif.net> | ||
58 | Description: | ||
59 | Control the wimax device. 1 means on, 0 means off. | ||
60 | |||
61 | What: /sys/devices/platform/asus_laptop/wwan | ||
62 | Date: October 2010 | ||
63 | KernelVersion: 2.6.37 | ||
64 | Contact: "Corentin Chary" <corentincj@iksaif.net> | ||
65 | Description: | ||
66 | Control the wwan (3G) device. 1 means on, 0 means off. | ||
diff --git a/Documentation/ABI/testing/sysfs-platform-eeepc-wmi b/Documentation/ABI/testing/sysfs-platform-eeepc-wmi new file mode 100644 index 000000000000..e4b5fef5fadd --- /dev/null +++ b/Documentation/ABI/testing/sysfs-platform-eeepc-wmi | |||
@@ -0,0 +1,10 @@ | |||
1 | What: /sys/devices/platform/eeepc-wmi/cpufv | ||
2 | Date: Oct 2010 | ||
3 | KernelVersion: 2.6.37 | ||
4 | Contact: "Corentin Chary" <corentincj@iksaif.net> | ||
5 | Description: | ||
6 | Change CPU clock configuration (write-only). | ||
7 | There are three available clock configuration: | ||
8 | * 0 -> Super Performance Mode | ||
9 | * 1 -> High Performance Mode | ||
10 | * 2 -> Power Saving Mode | ||
diff --git a/Documentation/accounting/getdelays.c b/Documentation/accounting/getdelays.c index a2976a6de033..e9c77788a39d 100644 --- a/Documentation/accounting/getdelays.c +++ b/Documentation/accounting/getdelays.c | |||
@@ -516,6 +516,7 @@ int main(int argc, char *argv[]) | |||
516 | default: | 516 | default: |
517 | fprintf(stderr, "Unknown nla_type %d\n", | 517 | fprintf(stderr, "Unknown nla_type %d\n", |
518 | na->nla_type); | 518 | na->nla_type); |
519 | case TASKSTATS_TYPE_NULL: | ||
519 | break; | 520 | break; |
520 | } | 521 | } |
521 | na = (struct nlattr *) (GENLMSG_DATA(&msg) + len); | 522 | na = (struct nlattr *) (GENLMSG_DATA(&msg) + len); |
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index a91f30890011..33fa3e5d38fd 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
@@ -18,7 +18,6 @@ prototypes: | |||
18 | char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen); | 18 | char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen); |
19 | 19 | ||
20 | locking rules: | 20 | locking rules: |
21 | none have BKL | ||
22 | dcache_lock rename_lock ->d_lock may block | 21 | dcache_lock rename_lock ->d_lock may block |
23 | d_revalidate: no no no yes | 22 | d_revalidate: no no no yes |
24 | d_hash no no no yes | 23 | d_hash no no no yes |
@@ -42,18 +41,23 @@ ata *); | |||
42 | int (*rename) (struct inode *, struct dentry *, | 41 | int (*rename) (struct inode *, struct dentry *, |
43 | struct inode *, struct dentry *); | 42 | struct inode *, struct dentry *); |
44 | int (*readlink) (struct dentry *, char __user *,int); | 43 | int (*readlink) (struct dentry *, char __user *,int); |
45 | int (*follow_link) (struct dentry *, struct nameidata *); | 44 | void * (*follow_link) (struct dentry *, struct nameidata *); |
45 | void (*put_link) (struct dentry *, struct nameidata *, void *); | ||
46 | void (*truncate) (struct inode *); | 46 | void (*truncate) (struct inode *); |
47 | int (*permission) (struct inode *, int, struct nameidata *); | 47 | int (*permission) (struct inode *, int, struct nameidata *); |
48 | int (*check_acl)(struct inode *, int); | ||
48 | int (*setattr) (struct dentry *, struct iattr *); | 49 | int (*setattr) (struct dentry *, struct iattr *); |
49 | int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *); | 50 | int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *); |
50 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); | 51 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); |
51 | ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); | 52 | ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); |
52 | ssize_t (*listxattr) (struct dentry *, char *, size_t); | 53 | ssize_t (*listxattr) (struct dentry *, char *, size_t); |
53 | int (*removexattr) (struct dentry *, const char *); | 54 | int (*removexattr) (struct dentry *, const char *); |
55 | void (*truncate_range)(struct inode *, loff_t, loff_t); | ||
56 | long (*fallocate)(struct inode *inode, int mode, loff_t offset, loff_t len); | ||
57 | int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len); | ||
54 | 58 | ||
55 | locking rules: | 59 | locking rules: |
56 | all may block, none have BKL | 60 | all may block |
57 | i_mutex(inode) | 61 | i_mutex(inode) |
58 | lookup: yes | 62 | lookup: yes |
59 | create: yes | 63 | create: yes |
@@ -66,19 +70,24 @@ rmdir: yes (both) (see below) | |||
66 | rename: yes (all) (see below) | 70 | rename: yes (all) (see below) |
67 | readlink: no | 71 | readlink: no |
68 | follow_link: no | 72 | follow_link: no |
73 | put_link: no | ||
69 | truncate: yes (see below) | 74 | truncate: yes (see below) |
70 | setattr: yes | 75 | setattr: yes |
71 | permission: no | 76 | permission: no |
77 | check_acl: no | ||
72 | getattr: no | 78 | getattr: no |
73 | setxattr: yes | 79 | setxattr: yes |
74 | getxattr: no | 80 | getxattr: no |
75 | listxattr: no | 81 | listxattr: no |
76 | removexattr: yes | 82 | removexattr: yes |
83 | truncate_range: yes | ||
84 | fallocate: no | ||
85 | fiemap: no | ||
77 | Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on | 86 | Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on |
78 | victim. | 87 | victim. |
79 | cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem. | 88 | cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem. |
80 | ->truncate() is never called directly - it's a callback, not a | 89 | ->truncate() is never called directly - it's a callback, not a |
81 | method. It's called by vmtruncate() - library function normally used by | 90 | method. It's called by vmtruncate() - deprecated library function used by |
82 | ->setattr(). Locking information above applies to that call (i.e. is | 91 | ->setattr(). Locking information above applies to that call (i.e. is |
83 | inherited from ->setattr() - vmtruncate() is used when ATTR_SIZE had been | 92 | inherited from ->setattr() - vmtruncate() is used when ATTR_SIZE had been |
84 | passed). | 93 | passed). |
@@ -91,7 +100,7 @@ prototypes: | |||
91 | struct inode *(*alloc_inode)(struct super_block *sb); | 100 | struct inode *(*alloc_inode)(struct super_block *sb); |
92 | void (*destroy_inode)(struct inode *); | 101 | void (*destroy_inode)(struct inode *); |
93 | void (*dirty_inode) (struct inode *); | 102 | void (*dirty_inode) (struct inode *); |
94 | int (*write_inode) (struct inode *, int); | 103 | int (*write_inode) (struct inode *, struct writeback_control *wbc); |
95 | int (*drop_inode) (struct inode *); | 104 | int (*drop_inode) (struct inode *); |
96 | void (*evict_inode) (struct inode *); | 105 | void (*evict_inode) (struct inode *); |
97 | void (*put_super) (struct super_block *); | 106 | void (*put_super) (struct super_block *); |
@@ -105,10 +114,10 @@ prototypes: | |||
105 | int (*show_options)(struct seq_file *, struct vfsmount *); | 114 | int (*show_options)(struct seq_file *, struct vfsmount *); |
106 | ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); | 115 | ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); |
107 | ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); | 116 | ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); |
117 | int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t); | ||
108 | 118 | ||
109 | locking rules: | 119 | locking rules: |
110 | All may block [not true, see below] | 120 | All may block [not true, see below] |
111 | None have BKL | ||
112 | s_umount | 121 | s_umount |
113 | alloc_inode: | 122 | alloc_inode: |
114 | destroy_inode: | 123 | destroy_inode: |
@@ -127,6 +136,7 @@ umount_begin: no | |||
127 | show_options: no (namespace_sem) | 136 | show_options: no (namespace_sem) |
128 | quota_read: no (see below) | 137 | quota_read: no (see below) |
129 | quota_write: no (see below) | 138 | quota_write: no (see below) |
139 | bdev_try_to_free_page: no (see below) | ||
130 | 140 | ||
131 | ->statfs() has s_umount (shared) when called by ustat(2) (native or | 141 | ->statfs() has s_umount (shared) when called by ustat(2) (native or |
132 | compat), but that's an accident of bad API; s_umount is used to pin | 142 | compat), but that's an accident of bad API; s_umount is used to pin |
@@ -139,19 +149,25 @@ be the only ones operating on the quota file by the quota code (via | |||
139 | dqio_sem) (unless an admin really wants to screw up something and | 149 | dqio_sem) (unless an admin really wants to screw up something and |
140 | writes to quota files with quotas on). For other details about locking | 150 | writes to quota files with quotas on). For other details about locking |
141 | see also dquot_operations section. | 151 | see also dquot_operations section. |
152 | ->bdev_try_to_free_page is called from the ->releasepage handler of | ||
153 | the block device inode. See there for more details. | ||
142 | 154 | ||
143 | --------------------------- file_system_type --------------------------- | 155 | --------------------------- file_system_type --------------------------- |
144 | prototypes: | 156 | prototypes: |
145 | int (*get_sb) (struct file_system_type *, int, | 157 | int (*get_sb) (struct file_system_type *, int, |
146 | const char *, void *, struct vfsmount *); | 158 | const char *, void *, struct vfsmount *); |
159 | struct dentry *(*mount) (struct file_system_type *, int, | ||
160 | const char *, void *); | ||
147 | void (*kill_sb) (struct super_block *); | 161 | void (*kill_sb) (struct super_block *); |
148 | locking rules: | 162 | locking rules: |
149 | may block BKL | 163 | may block |
150 | get_sb yes no | 164 | get_sb yes |
151 | kill_sb yes no | 165 | mount yes |
166 | kill_sb yes | ||
152 | 167 | ||
153 | ->get_sb() returns error or 0 with locked superblock attached to the vfsmount | 168 | ->get_sb() returns error or 0 with locked superblock attached to the vfsmount |
154 | (exclusive on ->s_umount). | 169 | (exclusive on ->s_umount). |
170 | ->mount() returns ERR_PTR or the root dentry. | ||
155 | ->kill_sb() takes a write-locked superblock, does all shutdown work on it, | 171 | ->kill_sb() takes a write-locked superblock, does all shutdown work on it, |
156 | unlocks and drops the reference. | 172 | unlocks and drops the reference. |
157 | 173 | ||
@@ -173,28 +189,38 @@ prototypes: | |||
173 | sector_t (*bmap)(struct address_space *, sector_t); | 189 | sector_t (*bmap)(struct address_space *, sector_t); |
174 | int (*invalidatepage) (struct page *, unsigned long); | 190 | int (*invalidatepage) (struct page *, unsigned long); |
175 | int (*releasepage) (struct page *, int); | 191 | int (*releasepage) (struct page *, int); |
192 | void (*freepage)(struct page *); | ||
176 | int (*direct_IO)(int, struct kiocb *, const struct iovec *iov, | 193 | int (*direct_IO)(int, struct kiocb *, const struct iovec *iov, |
177 | loff_t offset, unsigned long nr_segs); | 194 | loff_t offset, unsigned long nr_segs); |
178 | int (*launder_page) (struct page *); | 195 | int (*get_xip_mem)(struct address_space *, pgoff_t, int, void **, |
196 | unsigned long *); | ||
197 | int (*migratepage)(struct address_space *, struct page *, struct page *); | ||
198 | int (*launder_page)(struct page *); | ||
199 | int (*is_partially_uptodate)(struct page *, read_descriptor_t *, unsigned long); | ||
200 | int (*error_remove_page)(struct address_space *, struct page *); | ||
179 | 201 | ||
180 | locking rules: | 202 | locking rules: |
181 | All except set_page_dirty may block | 203 | All except set_page_dirty and freepage may block |
182 | 204 | ||
183 | BKL PageLocked(page) i_mutex | 205 | PageLocked(page) i_mutex |
184 | writepage: no yes, unlocks (see below) | 206 | writepage: yes, unlocks (see below) |
185 | readpage: no yes, unlocks | 207 | readpage: yes, unlocks |
186 | sync_page: no maybe | 208 | sync_page: maybe |
187 | writepages: no | 209 | writepages: |
188 | set_page_dirty no no | 210 | set_page_dirty no |
189 | readpages: no | 211 | readpages: |
190 | write_begin: no locks the page yes | 212 | write_begin: locks the page yes |
191 | write_end: no yes, unlocks yes | 213 | write_end: yes, unlocks yes |
192 | perform_write: no n/a yes | 214 | bmap: |
193 | bmap: no | 215 | invalidatepage: yes |
194 | invalidatepage: no yes | 216 | releasepage: yes |
195 | releasepage: no yes | 217 | freepage: yes |
196 | direct_IO: no | 218 | direct_IO: |
197 | launder_page: no yes | 219 | get_xip_mem: maybe |
220 | migratepage: yes (both) | ||
221 | launder_page: yes | ||
222 | is_partially_uptodate: yes | ||
223 | error_remove_page: yes | ||
198 | 224 | ||
199 | ->write_begin(), ->write_end(), ->sync_page() and ->readpage() | 225 | ->write_begin(), ->write_end(), ->sync_page() and ->readpage() |
200 | may be called from the request handler (/dev/loop). | 226 | may be called from the request handler (/dev/loop). |
@@ -274,9 +300,8 @@ under spinlock (it cannot block) and is sometimes called with the page | |||
274 | not locked. | 300 | not locked. |
275 | 301 | ||
276 | ->bmap() is currently used by legacy ioctl() (FIBMAP) provided by some | 302 | ->bmap() is currently used by legacy ioctl() (FIBMAP) provided by some |
277 | filesystems and by the swapper. The latter will eventually go away. All | 303 | filesystems and by the swapper. The latter will eventually go away. Please, |
278 | instances do not actually need the BKL. Please, keep it that way and don't | 304 | keep it that way and don't breed new callers. |
279 | breed new callers. | ||
280 | 305 | ||
281 | ->invalidatepage() is called when the filesystem must attempt to drop | 306 | ->invalidatepage() is called when the filesystem must attempt to drop |
282 | some or all of the buffers from the page when it is being truncated. It | 307 | some or all of the buffers from the page when it is being truncated. It |
@@ -288,53 +313,46 @@ buffers from the page in preparation for freeing it. It returns zero to | |||
288 | indicate that the buffers are (or may be) freeable. If ->releasepage is zero, | 313 | indicate that the buffers are (or may be) freeable. If ->releasepage is zero, |
289 | the kernel assumes that the fs has no private interest in the buffers. | 314 | the kernel assumes that the fs has no private interest in the buffers. |
290 | 315 | ||
316 | ->freepage() is called when the kernel is done dropping the page | ||
317 | from the page cache. | ||
318 | |||
291 | ->launder_page() may be called prior to releasing a page if | 319 | ->launder_page() may be called prior to releasing a page if |
292 | it is still found to be dirty. It returns zero if the page was successfully | 320 | it is still found to be dirty. It returns zero if the page was successfully |
293 | cleaned, or an error value if not. Note that in order to prevent the page | 321 | cleaned, or an error value if not. Note that in order to prevent the page |
294 | getting mapped back in and redirtied, it needs to be kept locked | 322 | getting mapped back in and redirtied, it needs to be kept locked |
295 | across the entire operation. | 323 | across the entire operation. |
296 | 324 | ||
297 | Note: currently almost all instances of address_space methods are | ||
298 | using BKL for internal serialization and that's one of the worst sources | ||
299 | of contention. Normally they are calling library functions (in fs/buffer.c) | ||
300 | and pass foo_get_block() as a callback (on local block-based filesystems, | ||
301 | indeed). BKL is not needed for library stuff and is usually taken by | ||
302 | foo_get_block(). It's an overkill, since block bitmaps can be protected by | ||
303 | internal fs locking and real critical areas are much smaller than the areas | ||
304 | filesystems protect now. | ||
305 | |||
306 | ----------------------- file_lock_operations ------------------------------ | 325 | ----------------------- file_lock_operations ------------------------------ |
307 | prototypes: | 326 | prototypes: |
308 | void (*fl_insert)(struct file_lock *); /* lock insertion callback */ | ||
309 | void (*fl_remove)(struct file_lock *); /* lock removal callback */ | ||
310 | void (*fl_copy_lock)(struct file_lock *, struct file_lock *); | 327 | void (*fl_copy_lock)(struct file_lock *, struct file_lock *); |
311 | void (*fl_release_private)(struct file_lock *); | 328 | void (*fl_release_private)(struct file_lock *); |
312 | 329 | ||
313 | 330 | ||
314 | locking rules: | 331 | locking rules: |
315 | BKL may block | 332 | file_lock_lock may block |
316 | fl_insert: yes no | 333 | fl_copy_lock: yes no |
317 | fl_remove: yes no | 334 | fl_release_private: maybe no |
318 | fl_copy_lock: yes no | ||
319 | fl_release_private: yes yes | ||
320 | 335 | ||
321 | ----------------------- lock_manager_operations --------------------------- | 336 | ----------------------- lock_manager_operations --------------------------- |
322 | prototypes: | 337 | prototypes: |
323 | int (*fl_compare_owner)(struct file_lock *, struct file_lock *); | 338 | int (*fl_compare_owner)(struct file_lock *, struct file_lock *); |
324 | void (*fl_notify)(struct file_lock *); /* unblock callback */ | 339 | void (*fl_notify)(struct file_lock *); /* unblock callback */ |
340 | int (*fl_grant)(struct file_lock *, struct file_lock *, int); | ||
325 | void (*fl_release_private)(struct file_lock *); | 341 | void (*fl_release_private)(struct file_lock *); |
326 | void (*fl_break)(struct file_lock *); /* break_lease callback */ | 342 | void (*fl_break)(struct file_lock *); /* break_lease callback */ |
343 | int (*fl_mylease)(struct file_lock *, struct file_lock *); | ||
344 | int (*fl_change)(struct file_lock **, int); | ||
327 | 345 | ||
328 | locking rules: | 346 | locking rules: |
329 | BKL may block | 347 | file_lock_lock may block |
330 | fl_compare_owner: yes no | 348 | fl_compare_owner: yes no |
331 | fl_notify: yes no | 349 | fl_notify: yes no |
332 | fl_release_private: yes yes | 350 | fl_grant: no no |
333 | fl_break: yes no | 351 | fl_release_private: maybe no |
334 | 352 | fl_break: yes no | |
335 | Currently only NFSD and NLM provide instances of this class. None of the | 353 | fl_mylease: yes no |
336 | them block. If you have out-of-tree instances - please, show up. Locking | 354 | fl_change yes no |
337 | in that area will change. | 355 | |
338 | --------------------------- buffer_head ----------------------------------- | 356 | --------------------------- buffer_head ----------------------------------- |
339 | prototypes: | 357 | prototypes: |
340 | void (*b_end_io)(struct buffer_head *bh, int uptodate); | 358 | void (*b_end_io)(struct buffer_head *bh, int uptodate); |
@@ -359,17 +377,17 @@ prototypes: | |||
359 | void (*swap_slot_free_notify) (struct block_device *, unsigned long); | 377 | void (*swap_slot_free_notify) (struct block_device *, unsigned long); |
360 | 378 | ||
361 | locking rules: | 379 | locking rules: |
362 | BKL bd_mutex | 380 | bd_mutex |
363 | open: no yes | 381 | open: yes |
364 | release: no yes | 382 | release: yes |
365 | ioctl: no no | 383 | ioctl: no |
366 | compat_ioctl: no no | 384 | compat_ioctl: no |
367 | direct_access: no no | 385 | direct_access: no |
368 | media_changed: no no | 386 | media_changed: no |
369 | unlock_native_capacity: no no | 387 | unlock_native_capacity: no |
370 | revalidate_disk: no no | 388 | revalidate_disk: no |
371 | getgeo: no no | 389 | getgeo: no |
372 | swap_slot_free_notify: no no (see below) | 390 | swap_slot_free_notify: no (see below) |
373 | 391 | ||
374 | media_changed, unlock_native_capacity and revalidate_disk are called only from | 392 | media_changed, unlock_native_capacity and revalidate_disk are called only from |
375 | check_disk_change(). | 393 | check_disk_change(). |
@@ -408,34 +426,21 @@ prototypes: | |||
408 | unsigned long (*get_unmapped_area)(struct file *, unsigned long, | 426 | unsigned long (*get_unmapped_area)(struct file *, unsigned long, |
409 | unsigned long, unsigned long, unsigned long); | 427 | unsigned long, unsigned long, unsigned long); |
410 | int (*check_flags)(int); | 428 | int (*check_flags)(int); |
429 | int (*flock) (struct file *, int, struct file_lock *); | ||
430 | ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, | ||
431 | size_t, unsigned int); | ||
432 | ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, | ||
433 | size_t, unsigned int); | ||
434 | int (*setlease)(struct file *, long, struct file_lock **); | ||
411 | }; | 435 | }; |
412 | 436 | ||
413 | locking rules: | 437 | locking rules: |
414 | All may block. | 438 | All may block except for ->setlease. |
415 | BKL | 439 | No VFS locks held on entry except for ->fsync and ->setlease. |
416 | llseek: no (see below) | 440 | |
417 | read: no | 441 | ->fsync() has i_mutex on inode. |
418 | aio_read: no | 442 | |
419 | write: no | 443 | ->setlease has the file_list_lock held and must not sleep. |
420 | aio_write: no | ||
421 | readdir: no | ||
422 | poll: no | ||
423 | unlocked_ioctl: no | ||
424 | compat_ioctl: no | ||
425 | mmap: no | ||
426 | open: no | ||
427 | flush: no | ||
428 | release: no | ||
429 | fsync: no (see below) | ||
430 | aio_fsync: no | ||
431 | fasync: no | ||
432 | lock: yes | ||
433 | readv: no | ||
434 | writev: no | ||
435 | sendfile: no | ||
436 | sendpage: no | ||
437 | get_unmapped_area: no | ||
438 | check_flags: no | ||
439 | 444 | ||
440 | ->llseek() locking has moved from llseek to the individual llseek | 445 | ->llseek() locking has moved from llseek to the individual llseek |
441 | implementations. If your fs is not using generic_file_llseek, you | 446 | implementations. If your fs is not using generic_file_llseek, you |
@@ -445,17 +450,10 @@ mutex or just to use i_size_read() instead. | |||
445 | Note: this does not protect the file->f_pos against concurrent modifications | 450 | Note: this does not protect the file->f_pos against concurrent modifications |
446 | since this is something the userspace has to take care about. | 451 | since this is something the userspace has to take care about. |
447 | 452 | ||
448 | Note: ext2_release() was *the* source of contention on fs-intensive | 453 | ->fasync() is responsible for maintaining the FASYNC bit in filp->f_flags. |
449 | loads and dropping BKL on ->release() helps to get rid of that (we still | 454 | Most instances call fasync_helper(), which does that maintenance, so it's |
450 | grab BKL for cases when we close a file that had been opened r/w, but that | 455 | not normally something one needs to worry about. Return values > 0 will be |
451 | can and should be done using the internal locking with smaller critical areas). | 456 | mapped to zero in the VFS layer. |
452 | Current worst offender is ext2_get_block()... | ||
453 | |||
454 | ->fasync() is called without BKL protection, and is responsible for | ||
455 | maintaining the FASYNC bit in filp->f_flags. Most instances call | ||
456 | fasync_helper(), which does that maintenance, so it's not normally | ||
457 | something one needs to worry about. Return values > 0 will be mapped to | ||
458 | zero in the VFS layer. | ||
459 | 457 | ||
460 | ->readdir() and ->ioctl() on directories must be changed. Ideally we would | 458 | ->readdir() and ->ioctl() on directories must be changed. Ideally we would |
461 | move ->readdir() to inode_operations and use a separate method for directory | 459 | move ->readdir() to inode_operations and use a separate method for directory |
@@ -466,8 +464,6 @@ components. And there are other reasons why the current interface is a mess... | |||
466 | ->read on directories probably must go away - we should just enforce -EISDIR | 464 | ->read on directories probably must go away - we should just enforce -EISDIR |
467 | in sys_read() and friends. | 465 | in sys_read() and friends. |
468 | 466 | ||
469 | ->fsync() has i_mutex on inode. | ||
470 | |||
471 | --------------------------- dquot_operations ------------------------------- | 467 | --------------------------- dquot_operations ------------------------------- |
472 | prototypes: | 468 | prototypes: |
473 | int (*write_dquot) (struct dquot *); | 469 | int (*write_dquot) (struct dquot *); |
@@ -502,12 +498,12 @@ prototypes: | |||
502 | int (*access)(struct vm_area_struct *, unsigned long, void*, int, int); | 498 | int (*access)(struct vm_area_struct *, unsigned long, void*, int, int); |
503 | 499 | ||
504 | locking rules: | 500 | locking rules: |
505 | BKL mmap_sem PageLocked(page) | 501 | mmap_sem PageLocked(page) |
506 | open: no yes | 502 | open: yes |
507 | close: no yes | 503 | close: yes |
508 | fault: no yes can return with page locked | 504 | fault: yes can return with page locked |
509 | page_mkwrite: no yes can return with page locked | 505 | page_mkwrite: yes can return with page locked |
510 | access: no yes | 506 | access: yes |
511 | 507 | ||
512 | ->fault() is called when a previously not present pte is about | 508 | ->fault() is called when a previously not present pte is about |
513 | to be faulted in. The filesystem must find and return the page associated | 509 | to be faulted in. The filesystem must find and return the page associated |
@@ -534,6 +530,3 @@ VM_IO | VM_PFNMAP VMAs. | |||
534 | 530 | ||
535 | (if you break something or notice that it is broken and do not fix it yourself | 531 | (if you break something or notice that it is broken and do not fix it yourself |
536 | - at least put it here) | 532 | - at least put it here) |
537 | |||
538 | ipc/shm.c::shm_delete() - may need BKL. | ||
539 | ->read() and ->write() in many drivers are (probably) missing BKL. | ||
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index 55c28b79d8dc..20899e095e7e 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -534,6 +534,7 @@ struct address_space_operations { | |||
534 | sector_t (*bmap)(struct address_space *, sector_t); | 534 | sector_t (*bmap)(struct address_space *, sector_t); |
535 | int (*invalidatepage) (struct page *, unsigned long); | 535 | int (*invalidatepage) (struct page *, unsigned long); |
536 | int (*releasepage) (struct page *, int); | 536 | int (*releasepage) (struct page *, int); |
537 | void (*freepage)(struct page *); | ||
537 | ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, | 538 | ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, |
538 | loff_t offset, unsigned long nr_segs); | 539 | loff_t offset, unsigned long nr_segs); |
539 | struct page* (*get_xip_page)(struct address_space *, sector_t, | 540 | struct page* (*get_xip_page)(struct address_space *, sector_t, |
@@ -678,6 +679,12 @@ struct address_space_operations { | |||
678 | need to ensure this. Possibly it can clear the PageUptodate | 679 | need to ensure this. Possibly it can clear the PageUptodate |
679 | bit if it cannot free private data yet. | 680 | bit if it cannot free private data yet. |
680 | 681 | ||
682 | freepage: freepage is called once the page is no longer visible in | ||
683 | the page cache in order to allow the cleanup of any private | ||
684 | data. Since it may be called by the memory reclaimer, it | ||
685 | should not assume that the original address_space mapping still | ||
686 | exists, and it should not block. | ||
687 | |||
681 | direct_IO: called by the generic read/write routines to perform | 688 | direct_IO: called by the generic read/write routines to perform |
682 | direct_IO - that is IO requests which bypass the page cache | 689 | direct_IO - that is IO requests which bypass the page cache |
683 | and transfer data directly between the storage and the | 690 | and transfer data directly between the storage and the |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index cdd2a6e8a3b7..01ece1b9213e 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -1759,7 +1759,7 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1759 | 1759 | ||
1760 | nousb [USB] Disable the USB subsystem | 1760 | nousb [USB] Disable the USB subsystem |
1761 | 1761 | ||
1762 | nowatchdog [KNL] Disable the lockup detector. | 1762 | nowatchdog [KNL] Disable the lockup detector (NMI watchdog). |
1763 | 1763 | ||
1764 | nowb [ARM] | 1764 | nowb [ARM] |
1765 | 1765 | ||
@@ -2175,11 +2175,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2175 | reset_devices [KNL] Force drivers to reset the underlying device | 2175 | reset_devices [KNL] Force drivers to reset the underlying device |
2176 | during initialization. | 2176 | during initialization. |
2177 | 2177 | ||
2178 | resource_alloc_from_bottom | ||
2179 | Allocate new resources from the beginning of available | ||
2180 | space, not the end. If you need to use this, please | ||
2181 | report a bug. | ||
2182 | |||
2183 | resume= [SWSUSP] | 2178 | resume= [SWSUSP] |
2184 | Specify the partition device for software suspend | 2179 | Specify the partition device for software suspend |
2185 | 2180 | ||
diff --git a/Documentation/power/runtime_pm.txt b/Documentation/power/runtime_pm.txt index 489e9bacd165..41cc7b30d7dd 100644 --- a/Documentation/power/runtime_pm.txt +++ b/Documentation/power/runtime_pm.txt | |||
@@ -379,8 +379,8 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h: | |||
379 | zero) | 379 | zero) |
380 | 380 | ||
381 | bool pm_runtime_suspended(struct device *dev); | 381 | bool pm_runtime_suspended(struct device *dev); |
382 | - return true if the device's runtime PM status is 'suspended', or false | 382 | - return true if the device's runtime PM status is 'suspended' and its |
383 | otherwise | 383 | 'power.disable_depth' field is equal to zero, or false otherwise |
384 | 384 | ||
385 | void pm_runtime_allow(struct device *dev); | 385 | void pm_runtime_allow(struct device *dev); |
386 | - set the power.runtime_auto flag for the device and decrease its usage | 386 | - set the power.runtime_auto flag for the device and decrease its usage |
diff --git a/Documentation/scsi/scsi_mid_low_api.txt b/Documentation/scsi/scsi_mid_low_api.txt index 570ef2b3d79b..df322c103466 100644 --- a/Documentation/scsi/scsi_mid_low_api.txt +++ b/Documentation/scsi/scsi_mid_low_api.txt | |||
@@ -1044,9 +1044,9 @@ Details: | |||
1044 | 1044 | ||
1045 | 1045 | ||
1046 | /** | 1046 | /** |
1047 | * queuecommand - queue scsi command, invoke 'done' on completion | 1047 | * queuecommand - queue scsi command, invoke scp->scsi_done on completion |
1048 | * @shost: pointer to the scsi host object | ||
1048 | * @scp: pointer to scsi command object | 1049 | * @scp: pointer to scsi command object |
1049 | * @done: function pointer to be invoked on completion | ||
1050 | * | 1050 | * |
1051 | * Returns 0 on success. | 1051 | * Returns 0 on success. |
1052 | * | 1052 | * |
@@ -1074,42 +1074,45 @@ Details: | |||
1074 | * | 1074 | * |
1075 | * Other types of errors that are detected immediately may be | 1075 | * Other types of errors that are detected immediately may be |
1076 | * flagged by setting scp->result to an appropriate value, | 1076 | * flagged by setting scp->result to an appropriate value, |
1077 | * invoking the 'done' callback, and then returning 0 from this | 1077 | * invoking the scp->scsi_done callback, and then returning 0 |
1078 | * function. If the command is not performed immediately (and the | 1078 | * from this function. If the command is not performed |
1079 | * LLD is starting (or will start) the given command) then this | 1079 | * immediately (and the LLD is starting (or will start) the given |
1080 | * function should place 0 in scp->result and return 0. | 1080 | * command) then this function should place 0 in scp->result and |
1081 | * return 0. | ||
1081 | * | 1082 | * |
1082 | * Command ownership. If the driver returns zero, it owns the | 1083 | * Command ownership. If the driver returns zero, it owns the |
1083 | * command and must take responsibility for ensuring the 'done' | 1084 | * command and must take responsibility for ensuring the |
1084 | * callback is executed. Note: the driver may call done before | 1085 | * scp->scsi_done callback is executed. Note: the driver may |
1085 | * returning zero, but after it has called done, it may not | 1086 | * call scp->scsi_done before returning zero, but after it has |
1086 | * return any value other than zero. If the driver makes a | 1087 | * called scp->scsi_done, it may not return any value other than |
1087 | * non-zero return, it must not execute the command's done | 1088 | * zero. If the driver makes a non-zero return, it must not |
1088 | * callback at any time. | 1089 | * execute the command's scsi_done callback at any time. |
1089 | * | 1090 | * |
1090 | * Locks: struct Scsi_Host::host_lock held on entry (with "irqsave") | 1091 | * Locks: up to and including 2.6.36, struct Scsi_Host::host_lock |
1091 | * and is expected to be held on return. | 1092 | * held on entry (with "irqsave") and is expected to be |
1093 | * held on return. From 2.6.37 onwards, queuecommand is | ||
1094 | * called without any locks held. | ||
1092 | * | 1095 | * |
1093 | * Calling context: in interrupt (soft irq) or process context | 1096 | * Calling context: in interrupt (soft irq) or process context |
1094 | * | 1097 | * |
1095 | * Notes: This function should be relatively fast. Normally it will | 1098 | * Notes: This function should be relatively fast. Normally it |
1096 | * not wait for IO to complete. Hence the 'done' callback is invoked | 1099 | * will not wait for IO to complete. Hence the scp->scsi_done |
1097 | * (often directly from an interrupt service routine) some time after | 1100 | * callback is invoked (often directly from an interrupt service |
1098 | * this function has returned. In some cases (e.g. pseudo adapter | 1101 | * routine) some time after this function has returned. In some |
1099 | * drivers that manufacture the response to a SCSI INQUIRY) | 1102 | * cases (e.g. pseudo adapter drivers that manufacture the |
1100 | * the 'done' callback may be invoked before this function returns. | 1103 | * response to a SCSI INQUIRY) the scp->scsi_done callback may be |
1101 | * If the 'done' callback is not invoked within a certain period | 1104 | * invoked before this function returns. If the scp->scsi_done |
1102 | * the SCSI mid level will commence error processing. | 1105 | * callback is not invoked within a certain period the SCSI mid |
1103 | * If a status of CHECK CONDITION is placed in "result" when the | 1106 | * level will commence error processing. If a status of CHECK |
1104 | * 'done' callback is invoked, then the LLD driver should | 1107 | * CONDITION is placed in "result" when the scp->scsi_done |
1105 | * perform autosense and fill in the struct scsi_cmnd::sense_buffer | 1108 | * callback is invoked, then the LLD driver should perform |
1109 | * autosense and fill in the struct scsi_cmnd::sense_buffer | ||
1106 | * array. The scsi_cmnd::sense_buffer array is zeroed prior to | 1110 | * array. The scsi_cmnd::sense_buffer array is zeroed prior to |
1107 | * the mid level queuing a command to an LLD. | 1111 | * the mid level queuing a command to an LLD. |
1108 | * | 1112 | * |
1109 | * Defined in: LLD | 1113 | * Defined in: LLD |
1110 | **/ | 1114 | **/ |
1111 | int queuecommand(struct scsi_cmnd * scp, | 1115 | int queuecommand(struct Scsi_Host *shost, struct scsi_cmnd * scp) |
1112 | void (*done)(struct scsi_cmnd *)) | ||
1113 | 1116 | ||
1114 | 1117 | ||
1115 | /** | 1118 | /** |
diff --git a/Documentation/trace/postprocess/trace-vmscan-postprocess.pl b/Documentation/trace/postprocess/trace-vmscan-postprocess.pl index b3e73ddb1567..12cecc83cd91 100644 --- a/Documentation/trace/postprocess/trace-vmscan-postprocess.pl +++ b/Documentation/trace/postprocess/trace-vmscan-postprocess.pl | |||
@@ -373,9 +373,18 @@ EVENT_PROCESS: | |||
373 | print " $regex_lru_isolate/o\n"; | 373 | print " $regex_lru_isolate/o\n"; |
374 | next; | 374 | next; |
375 | } | 375 | } |
376 | my $isolate_mode = $1; | ||
376 | my $nr_scanned = $4; | 377 | my $nr_scanned = $4; |
377 | my $nr_contig_dirty = $7; | 378 | my $nr_contig_dirty = $7; |
378 | $perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned; | 379 | |
380 | # To closer match vmstat scanning statistics, only count isolate_both | ||
381 | # and isolate_inactive as scanning. isolate_active is rotation | ||
382 | # isolate_inactive == 0 | ||
383 | # isolate_active == 1 | ||
384 | # isolate_both == 2 | ||
385 | if ($isolate_mode != 1) { | ||
386 | $perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned; | ||
387 | } | ||
379 | $perprocesspid{$process_pid}->{HIGH_NR_CONTIG_DIRTY} += $nr_contig_dirty; | 388 | $perprocesspid{$process_pid}->{HIGH_NR_CONTIG_DIRTY} += $nr_contig_dirty; |
380 | } elsif ($tracepoint eq "mm_vmscan_lru_shrink_inactive") { | 389 | } elsif ($tracepoint eq "mm_vmscan_lru_shrink_inactive") { |
381 | $details = $5; | 390 | $details = $5; |