1 The text below describes the locking rules for VFS-related methods. 2It is (believed to be) up-to-date. *Please*, if you change anything in 3prototypes or locking protocols - update this file. And update the relevant 4instances in the tree, don't leave that to maintainers of filesystems/devices/ 5etc. At the very least, put the list of dubious cases in the end of this file. 6Don't turn it into log - maintainers of out-of-the-tree code are supposed to 7be able to use diff(1). 8 Thing currently missing here: socket operations. Alexey? 9 10--------------------------- dentry_operations -------------------------- 11prototypes: 12 int (*d_revalidate)(struct dentry *, unsigned int); 13 int (*d_weak_revalidate)(struct dentry *, unsigned int); 14 int (*d_hash)(const struct dentry *, struct qstr *); 15 int (*d_compare)(const struct dentry *, 16 unsigned int, const char *, const struct qstr *); 17 int (*d_delete)(struct dentry *); 18 int (*d_init)(struct dentry *); 19 void (*d_release)(struct dentry *); 20 void (*d_iput)(struct dentry *, struct inode *); 21 char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen); 22 struct vfsmount *(*d_automount)(struct path *path); 23 int (*d_manage)(const struct path *, bool); 24 struct dentry *(*d_real)(struct dentry *, const struct inode *); 25 26locking rules: 27 rename_lock ->d_lock may block rcu-walk 28d_revalidate: no no yes (ref-walk) maybe 29d_weak_revalidate:no no yes no 30d_hash no no no maybe 31d_compare: yes no no maybe 32d_delete: no yes no no 33d_init: no no yes no 34d_release: no no yes no 35d_prune: no yes no no 36d_iput: no no yes no 37d_dname: no no no no 38d_automount: no no yes no 39d_manage: no no yes (ref-walk) maybe 40d_real no no yes no 41 42--------------------------- inode_operations --------------------------- 43prototypes: 44 int (*create) (struct inode *,struct dentry *,umode_t, bool); 45 struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int); 46 int (*link) (struct dentry *,struct inode *,struct dentry *); 47 int (*unlink) (struct inode *,struct dentry *); 48 int (*symlink) (struct inode *,struct dentry *,const char *); 49 int (*mkdir) (struct inode *,struct dentry *,umode_t); 50 int (*rmdir) (struct inode *,struct dentry *); 51 int (*mknod) (struct inode *,struct dentry *,umode_t,dev_t); 52 int (*rename) (struct inode *, struct dentry *, 53 struct inode *, struct dentry *, unsigned int); 54 int (*readlink) (struct dentry *, char __user *,int); 55 const char *(*get_link) (struct dentry *, struct inode *, void **); 56 void (*truncate) (struct inode *); 57 int (*permission) (struct inode *, int, unsigned int); 58 int (*get_acl)(struct inode *, int); 59 int (*setattr) (struct dentry *, struct iattr *); 60 int (*getattr) (const struct path *, struct kstat *, u32, unsigned int); 61 ssize_t (*listxattr) (struct dentry *, char *, size_t); 62 int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len); 63 void (*update_time)(struct inode *, struct timespec *, int); 64 int (*atomic_open)(struct inode *, struct dentry *, 65 struct file *, unsigned open_flag, 66 umode_t create_mode); 67 int (*tmpfile) (struct inode *, struct dentry *, umode_t); 68 69locking rules: 70 all may block 71 i_rwsem(inode) 72lookup: shared 73create: exclusive 74link: exclusive (both) 75mknod: exclusive 76symlink: exclusive 77mkdir: exclusive 78unlink: exclusive (both) 79rmdir: exclusive (both)(see below) 80rename: exclusive (all) (see below) 81readlink: no 82get_link: no 83setattr: exclusive 84permission: no (may not block if called in rcu-walk mode) 85get_acl: no 86getattr: no 87listxattr: no 88fiemap: no 89update_time: no 90atomic_open: exclusive 91tmpfile: no 92 93 94 Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_rwsem 95 exclusive on victim. 96 cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem. 97 98See Documentation/filesystems/directory-locking for more detailed discussion 99of the locking scheme for directory operations. 100 101----------------------- xattr_handler operations ----------------------- 102prototypes: 103 bool (*list)(struct dentry *dentry); 104 int (*get)(const struct xattr_handler *handler, struct dentry *dentry, 105 struct inode *inode, const char *name, void *buffer, 106 size_t size); 107 int (*set)(const struct xattr_handler *handler, struct dentry *dentry, 108 struct inode *inode, const char *name, const void *buffer, 109 size_t size, int flags); 110 111locking rules: 112 all may block 113 i_rwsem(inode) 114list: no 115get: no 116set: exclusive 117 118--------------------------- super_operations --------------------------- 119prototypes: 120 struct inode *(*alloc_inode)(struct super_block *sb); 121 void (*destroy_inode)(struct inode *); 122 void (*dirty_inode) (struct inode *, int flags); 123 int (*write_inode) (struct inode *, struct writeback_control *wbc); 124 int (*drop_inode) (struct inode *); 125 void (*evict_inode) (struct inode *); 126 void (*put_super) (struct super_block *); 127 int (*sync_fs)(struct super_block *sb, int wait); 128 int (*freeze_fs) (struct super_block *); 129 int (*unfreeze_fs) (struct super_block *); 130 int (*statfs) (struct dentry *, struct kstatfs *); 131 int (*remount_fs) (struct super_block *, int *, char *); 132 void (*umount_begin) (struct super_block *); 133 int (*show_options)(struct seq_file *, struct dentry *); 134 ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); 135 ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); 136 int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t); 137 138locking rules: 139 All may block [not true, see below] 140 s_umount 141alloc_inode: 142destroy_inode: 143dirty_inode: 144write_inode: 145drop_inode: !!!inode->i_lock!!! 146evict_inode: 147put_super: write 148sync_fs: read 149freeze_fs: write 150unfreeze_fs: write 151statfs: maybe(read) (see below) 152remount_fs: write 153umount_begin: no 154show_options: no (namespace_sem) 155quota_read: no (see below) 156quota_write: no (see below) 157bdev_try_to_free_page: no (see below) 158 159->statfs() has s_umount (shared) when called by ustat(2) (native or 160compat), but that's an accident of bad API; s_umount is used to pin 161the superblock down when we only have dev_t given us by userland to 162identify the superblock. Everything else (statfs(), fstatfs(), etc.) 163doesn't hold it when calling ->statfs() - superblock is pinned down 164by resolving the pathname passed to syscall. 165->quota_read() and ->quota_write() functions are both guaranteed to 166be the only ones operating on the quota file by the quota code (via 167dqio_sem) (unless an admin really wants to screw up something and 168writes to quota files with quotas on). For other details about locking 169see also dquot_operations section. 170->bdev_try_to_free_page is called from the ->releasepage handler of 171the block device inode. See there for more details. 172 173--------------------------- file_system_type --------------------------- 174prototypes: 175 struct dentry *(*mount) (struct file_system_type *, int, 176 const char *, void *); 177 void (*kill_sb) (struct super_block *); 178locking rules: 179 may block 180mount yes 181kill_sb yes 182 183->mount() returns ERR_PTR or the root dentry; its superblock should be locked 184on return. 185->kill_sb() takes a write-locked superblock, does all shutdown work on it, 186unlocks and drops the reference. 187 188--------------------------- address_space_operations -------------------------- 189prototypes: 190 int (*writepage)(struct page *page, struct writeback_control *wbc); 191 int (*readpage)(struct file *, struct page *); 192 int (*writepages)(struct address_space *, struct writeback_control *); 193 int (*set_page_dirty)(struct page *page); 194 int (*readpages)(struct file *filp, struct address_space *mapping, 195 struct list_head *pages, unsigned nr_pages); 196 int (*write_begin)(struct file *, struct address_space *mapping, 197 loff_t pos, unsigned len, unsigned flags, 198 struct page **pagep, void **fsdata); 199 int (*write_end)(struct file *, struct address_space *mapping, 200 loff_t pos, unsigned len, unsigned copied, 201 struct page *page, void *fsdata); 202 sector_t (*bmap)(struct address_space *, sector_t); 203 void (*invalidatepage) (struct page *, unsigned int, unsigned int); 204 int (*releasepage) (struct page *, int); 205 void (*freepage)(struct page *); 206 int (*direct_IO)(struct kiocb *, struct iov_iter *iter); 207 bool (*isolate_page) (struct page *, isolate_mode_t); 208 int (*migratepage)(struct address_space *, struct page *, struct page *); 209 void (*putback_page) (struct page *); 210 int (*launder_page)(struct page *); 211 int (*is_partially_uptodate)(struct page *, unsigned long, unsigned long); 212 int (*error_remove_page)(struct address_space *, struct page *); 213 int (*swap_activate)(struct file *); 214 int (*swap_deactivate)(struct file *); 215 216locking rules: 217 All except set_page_dirty and freepage may block 218 219 PageLocked(page) i_rwsem 220writepage: yes, unlocks (see below) 221readpage: yes, unlocks 222writepages: 223set_page_dirty no 224readpages: 225write_begin: locks the page exclusive 226write_end: yes, unlocks exclusive 227bmap: 228invalidatepage: yes 229releasepage: yes 230freepage: yes 231direct_IO: 232isolate_page: yes 233migratepage: yes (both) 234putback_page: yes 235launder_page: yes 236is_partially_uptodate: yes 237error_remove_page: yes 238swap_activate: no 239swap_deactivate: no 240 241 ->write_begin(), ->write_end() and ->readpage() may be called from 242the request handler (/dev/loop). 243 244 ->readpage() unlocks the page, either synchronously or via I/O 245completion. 246 247 ->readpages() populates the pagecache with the passed pages and starts 248I/O against them. They come unlocked upon I/O completion. 249 250 ->writepage() is used for two purposes: for "memory cleansing" and for 251"sync". These are quite different operations and the behaviour may differ 252depending upon the mode. 253 254If writepage is called for sync (wbc->sync_mode != WBC_SYNC_NONE) then 255it *must* start I/O against the page, even if that would involve 256blocking on in-progress I/O. 257 258If writepage is called for memory cleansing (sync_mode == 259WBC_SYNC_NONE) then its role is to get as much writeout underway as 260possible. So writepage should try to avoid blocking against 261currently-in-progress I/O. 262 263If the filesystem is not called for "sync" and it determines that it 264would need to block against in-progress I/O to be able to start new I/O 265against the page the filesystem should redirty the page with 266redirty_page_for_writepage(), then unlock the page and return zero. 267This may also be done to avoid internal deadlocks, but rarely. 268 269If the filesystem is called for sync then it must wait on any 270in-progress I/O and then start new I/O. 271 272The filesystem should unlock the page synchronously, before returning to the 273caller, unless ->writepage() returns special WRITEPAGE_ACTIVATE 274value. WRITEPAGE_ACTIVATE means that page cannot really be written out 275currently, and VM should stop calling ->writepage() on this page for some 276time. VM does this by moving page to the head of the active list, hence the 277name. 278 279Unless the filesystem is going to redirty_page_for_writepage(), unlock the page 280and return zero, writepage *must* run set_page_writeback() against the page, 281followed by unlocking it. Once set_page_writeback() has been run against the 282page, write I/O can be submitted and the write I/O completion handler must run 283end_page_writeback() once the I/O is complete. If no I/O is submitted, the 284filesystem must run end_page_writeback() against the page before returning from 285writepage. 286 287That is: after 2.5.12, pages which are under writeout are *not* locked. Note, 288if the filesystem needs the page to be locked during writeout, that is ok, too, 289the page is allowed to be unlocked at any point in time between the calls to 290set_page_writeback() and end_page_writeback(). 291 292Note, failure to run either redirty_page_for_writepage() or the combination of 293set_page_writeback()/end_page_writeback() on a page submitted to writepage 294will leave the page itself marked clean but it will be tagged as dirty in the 295radix tree. This incoherency can lead to all sorts of hard-to-debug problems 296in the filesystem like having dirty inodes at umount and losing written data. 297 298 ->writepages() is used for periodic writeback and for syscall-initiated 299sync operations. The address_space should start I/O against at least 300*nr_to_write pages. *nr_to_write must be decremented for each page which is 301written. The address_space implementation may write more (or less) pages 302than *nr_to_write asks for, but it should try to be reasonably close. If 303nr_to_write is NULL, all dirty pages must be written. 304 305writepages should _only_ write pages which are present on 306mapping->io_pages. 307 308 ->set_page_dirty() is called from various places in the kernel 309when the target page is marked as needing writeback. It may be called 310under spinlock (it cannot block) and is sometimes called with the page 311not locked. 312 313 ->bmap() is currently used by legacy ioctl() (FIBMAP) provided by some 314filesystems and by the swapper. The latter will eventually go away. Please, 315keep it that way and don't breed new callers. 316 317 ->invalidatepage() is called when the filesystem must attempt to drop 318some or all of the buffers from the page when it is being truncated. It 319returns zero on success. If ->invalidatepage is zero, the kernel uses 320block_invalidatepage() instead. 321 322 ->releasepage() is called when the kernel is about to try to drop the 323buffers from the page in preparation for freeing it. It returns zero to 324indicate that the buffers are (or may be) freeable. If ->releasepage is zero, 325the kernel assumes that the fs has no private interest in the buffers. 326 327 ->freepage() is called when the kernel is done dropping the page 328from the page cache. 329 330 ->launder_page() may be called prior to releasing a page if 331it is still found to be dirty. It returns zero if the page was successfully 332cleaned, or an error value if not. Note that in order to prevent the page 333getting mapped back in and redirtied, it needs to be kept locked 334across the entire operation. 335 336 ->swap_activate will be called with a non-zero argument on 337files backing (non block device backed) swapfiles. A return value 338of zero indicates success, in which case this file can be used for 339backing swapspace. The swapspace operations will be proxied to the 340address space operations. 341 342 ->swap_deactivate() will be called in the sys_swapoff() 343path after ->swap_activate() returned success. 344 345----------------------- file_lock_operations ------------------------------ 346prototypes: 347 void (*fl_copy_lock)(struct file_lock *, struct file_lock *); 348 void (*fl_release_private)(struct file_lock *); 349 350 351locking rules: 352 inode->i_lock may block 353fl_copy_lock: yes no 354fl_release_private: maybe maybe[1] 355 356[1]: ->fl_release_private for flock or POSIX locks is currently allowed 357to block. Leases however can still be freed while the i_lock is held and 358so fl_release_private called on a lease should not block. 359 360----------------------- lock_manager_operations --------------------------- 361prototypes: 362 int (*lm_compare_owner)(struct file_lock *, struct file_lock *); 363 unsigned long (*lm_owner_key)(struct file_lock *); 364 void (*lm_notify)(struct file_lock *); /* unblock callback */ 365 int (*lm_grant)(struct file_lock *, struct file_lock *, int); 366 void (*lm_break)(struct file_lock *); /* break_lease callback */ 367 int (*lm_change)(struct file_lock **, int); 368 369locking rules: 370 371 inode->i_lock blocked_lock_lock may block 372lm_compare_owner: yes[1] maybe no 373lm_owner_key yes[1] yes no 374lm_notify: yes yes no 375lm_grant: no no no 376lm_break: yes no no 377lm_change yes no no 378 379[1]: ->lm_compare_owner and ->lm_owner_key are generally called with 380*an* inode->i_lock held. It may not be the i_lock of the inode 381associated with either file_lock argument! This is the case with deadlock 382detection, since the code has to chase down the owners of locks that may 383be entirely unrelated to the one on which the lock is being acquired. 384For deadlock detection however, the blocked_lock_lock is also held. The 385fact that these locks are held ensures that the file_locks do not 386disappear out from under you while doing the comparison or generating an 387owner key. 388 389--------------------------- buffer_head ----------------------------------- 390prototypes: 391 void (*b_end_io)(struct buffer_head *bh, int uptodate); 392 393locking rules: 394 called from interrupts. In other words, extreme care is needed here. 395bh is locked, but that's all warranties we have here. Currently only RAID1, 396highmem, fs/buffer.c, and fs/ntfs/aops.c are providing these. Block devices 397call this method upon the IO completion. 398 399--------------------------- block_device_operations ----------------------- 400prototypes: 401 int (*open) (struct block_device *, fmode_t); 402 int (*release) (struct gendisk *, fmode_t); 403 int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); 404 int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); 405 int (*direct_access) (struct block_device *, sector_t, void **, 406 unsigned long *); 407 int (*media_changed) (struct gendisk *); 408 void (*unlock_native_capacity) (struct gendisk *); 409 int (*revalidate_disk) (struct gendisk *); 410 int (*getgeo)(struct block_device *, struct hd_geometry *); 411 void (*swap_slot_free_notify) (struct block_device *, unsigned long); 412 413locking rules: 414 bd_mutex 415open: yes 416release: yes 417ioctl: no 418compat_ioctl: no 419direct_access: no 420media_changed: no 421unlock_native_capacity: no 422revalidate_disk: no 423getgeo: no 424swap_slot_free_notify: no (see below) 425 426media_changed, unlock_native_capacity and revalidate_disk are called only from 427check_disk_change(). 428 429swap_slot_free_notify is called with swap_lock and sometimes the page lock 430held. 431 432 433--------------------------- file_operations ------------------------------- 434prototypes: 435 loff_t (*llseek) (struct file *, loff_t, int); 436 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); 437 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 438 ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); 439 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); 440 int (*iterate) (struct file *, struct dir_context *); 441 int (*iterate_shared) (struct file *, struct dir_context *); 442 __poll_t (*poll) (struct file *, struct poll_table_struct *); 443 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); 444 long (*compat_ioctl) (struct file *, unsigned int, unsigned long); 445 int (*mmap) (struct file *, struct vm_area_struct *); 446 int (*open) (struct inode *, struct file *); 447 int (*flush) (struct file *); 448 int (*release) (struct inode *, struct file *); 449 int (*fsync) (struct file *, loff_t start, loff_t end, int datasync); 450 int (*fasync) (int, struct file *, int); 451 int (*lock) (struct file *, int, struct file_lock *); 452 ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, 453 loff_t *); 454 ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, 455 loff_t *); 456 ssize_t (*sendfile) (struct file *, loff_t *, size_t, read_actor_t, 457 void __user *); 458 ssize_t (*sendpage) (struct file *, struct page *, int, size_t, 459 loff_t *, int); 460 unsigned long (*get_unmapped_area)(struct file *, unsigned long, 461 unsigned long, unsigned long, unsigned long); 462 int (*check_flags)(int); 463 int (*flock) (struct file *, int, struct file_lock *); 464 ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, 465 size_t, unsigned int); 466 ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, 467 size_t, unsigned int); 468 int (*setlease)(struct file *, long, struct file_lock **, void **); 469 long (*fallocate)(struct file *, int, loff_t, loff_t); 470}; 471 472locking rules: 473 All may block. 474 475->llseek() locking has moved from llseek to the individual llseek 476implementations. If your fs is not using generic_file_llseek, you 477need to acquire and release the appropriate locks in your ->llseek(). 478For many filesystems, it is probably safe to acquire the inode 479mutex or just to use i_size_read() instead. 480Note: this does not protect the file->f_pos against concurrent modifications 481since this is something the userspace has to take care about. 482 483->iterate() is called with i_rwsem exclusive. 484 485->iterate_shared() is called with i_rwsem at least shared. 486 487->fasync() is responsible for maintaining the FASYNC bit in filp->f_flags. 488Most instances call fasync_helper(), which does that maintenance, so it's 489not normally something one needs to worry about. Return values > 0 will be 490mapped to zero in the VFS layer. 491 492->readdir() and ->ioctl() on directories must be changed. Ideally we would 493move ->readdir() to inode_operations and use a separate method for directory 494->ioctl() or kill the latter completely. One of the problems is that for 495anything that resembles union-mount we won't have a struct file for all 496components. And there are other reasons why the current interface is a mess... 497 498->read on directories probably must go away - we should just enforce -EISDIR 499in sys_read() and friends. 500 501->setlease operations should call generic_setlease() before or after setting 502the lease within the individual filesystem to record the result of the 503operation 504 505--------------------------- dquot_operations ------------------------------- 506prototypes: 507 int (*write_dquot) (struct dquot *); 508 int (*acquire_dquot) (struct dquot *); 509 int (*release_dquot) (struct dquot *); 510 int (*mark_dirty) (struct dquot *); 511 int (*write_info) (struct super_block *, int); 512 513These operations are intended to be more or less wrapping functions that ensure 514a proper locking wrt the filesystem and call the generic quota operations. 515 516What filesystem should expect from the generic quota functions: 517 518 FS recursion Held locks when called 519write_dquot: yes dqonoff_sem or dqptr_sem 520acquire_dquot: yes dqonoff_sem or dqptr_sem 521release_dquot: yes dqonoff_sem or dqptr_sem 522mark_dirty: no - 523write_info: yes dqonoff_sem 524 525FS recursion means calling ->quota_read() and ->quota_write() from superblock 526operations. 527 528More details about quota locking can be found in fs/dquot.c. 529 530--------------------------- vm_operations_struct ----------------------------- 531prototypes: 532 void (*open)(struct vm_area_struct*); 533 void (*close)(struct vm_area_struct*); 534 vm_fault_t (*fault)(struct vm_area_struct*, struct vm_fault *); 535 vm_fault_t (*page_mkwrite)(struct vm_area_struct *, struct vm_fault *); 536 vm_fault_t (*pfn_mkwrite)(struct vm_area_struct *, struct vm_fault *); 537 int (*access)(struct vm_area_struct *, unsigned long, void*, int, int); 538 539locking rules: 540 mmap_sem PageLocked(page) 541open: yes 542close: yes 543fault: yes can return with page locked 544map_pages: yes 545page_mkwrite: yes can return with page locked 546pfn_mkwrite: yes 547access: yes 548 549 ->fault() is called when a previously not present pte is about 550to be faulted in. The filesystem must find and return the page associated 551with the passed in "pgoff" in the vm_fault structure. If it is possible that 552the page may be truncated and/or invalidated, then the filesystem must lock 553the page, then ensure it is not already truncated (the page lock will block 554subsequent truncate), and then return with VM_FAULT_LOCKED, and the page 555locked. The VM will unlock the page. 556 557 ->map_pages() is called when VM asks to map easy accessible pages. 558Filesystem should find and map pages associated with offsets from "start_pgoff" 559till "end_pgoff". ->map_pages() is called with page table locked and must 560not block. If it's not possible to reach a page without blocking, 561filesystem should skip it. Filesystem should use do_set_pte() to setup 562page table entry. Pointer to entry associated with the page is passed in 563"pte" field in vm_fault structure. Pointers to entries for other offsets 564should be calculated relative to "pte". 565 566 ->page_mkwrite() is called when a previously read-only pte is 567about to become writeable. The filesystem again must ensure that there are 568no truncate/invalidate races, and then return with the page locked. If 569the page has been truncated, the filesystem should not look up a new page 570like the ->fault() handler, but simply return with VM_FAULT_NOPAGE, which 571will cause the VM to retry the fault. 572 573 ->pfn_mkwrite() is the same as page_mkwrite but when the pte is 574VM_PFNMAP or VM_MIXEDMAP with a page-less entry. Expected return is 575VM_FAULT_NOPAGE. Or one of the VM_FAULT_ERROR types. The default behavior 576after this call is to make the pte read-write, unless pfn_mkwrite returns 577an error. 578 579 ->access() is called when get_user_pages() fails in 580access_process_vm(), typically used to debug a process through 581/proc/pid/mem or ptrace. This function is needed only for 582VM_IO | VM_PFNMAP VMAs. 583 584================================================================================ 585 Dubious stuff 586 587(if you break something or notice that it is broken and do not fix it yourself 588- at least put it here) 589