diff options
Diffstat (limited to 'fs/xfs/xfs_mount.h')
-rw-r--r-- | fs/xfs/xfs_mount.h | 186 |
1 files changed, 93 insertions, 93 deletions
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 5affba38a577..08b2e0a5d807 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h | |||
@@ -1,38 +1,23 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. | 2 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. |
3 | * All Rights Reserved. | ||
3 | * | 4 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or |
5 | * under the terms of version 2 of the GNU General Public License as | 6 | * modify it under the terms of the GNU General Public License as |
6 | * published by the Free Software Foundation. | 7 | * published by the Free Software Foundation. |
7 | * | 8 | * |
8 | * This program is distributed in the hope that it would be useful, but | 9 | * This program is distributed in the hope that it would be useful, |
9 | * WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | * GNU General Public License for more details. | ||
11 | * | 13 | * |
12 | * Further, this software is distributed without any warranty that it is | 14 | * You should have received a copy of the GNU General Public License |
13 | * free of the rightful claim of any third person regarding infringement | 15 | * along with this program; if not, write the Free Software Foundation, |
14 | * or the like. Any license provided herein, whether implied or | 16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
15 | * otherwise, applies only to this software file. Patent licenses, if | ||
16 | * any, provided herein do not apply to combinations of this program with | ||
17 | * other software, or any other product whatsoever. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License along | ||
20 | * with this program; if not, write the Free Software Foundation, Inc., 59 | ||
21 | * Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
22 | * | ||
23 | * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, | ||
24 | * Mountain View, CA 94043, or: | ||
25 | * | ||
26 | * http://www.sgi.com | ||
27 | * | ||
28 | * For further information regarding this notice, see: | ||
29 | * | ||
30 | * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ | ||
31 | */ | 17 | */ |
32 | #ifndef __XFS_MOUNT_H__ | 18 | #ifndef __XFS_MOUNT_H__ |
33 | #define __XFS_MOUNT_H__ | 19 | #define __XFS_MOUNT_H__ |
34 | 20 | ||
35 | |||
36 | typedef struct xfs_trans_reservations { | 21 | typedef struct xfs_trans_reservations { |
37 | uint tr_write; /* extent alloc trans */ | 22 | uint tr_write; /* extent alloc trans */ |
38 | uint tr_itruncate; /* truncate trans */ | 23 | uint tr_itruncate; /* truncate trans */ |
@@ -57,7 +42,6 @@ typedef struct xfs_trans_reservations { | |||
57 | uint tr_growrtfree; /* grow realtime freeing */ | 42 | uint tr_growrtfree; /* grow realtime freeing */ |
58 | } xfs_trans_reservations_t; | 43 | } xfs_trans_reservations_t; |
59 | 44 | ||
60 | |||
61 | #ifndef __KERNEL__ | 45 | #ifndef __KERNEL__ |
62 | /* | 46 | /* |
63 | * Moved here from xfs_ag.h to avoid reordering header files | 47 | * Moved here from xfs_ag.h to avoid reordering header files |
@@ -80,6 +64,9 @@ struct xfs_iocore; | |||
80 | struct xfs_bmbt_irec; | 64 | struct xfs_bmbt_irec; |
81 | struct xfs_bmap_free; | 65 | struct xfs_bmap_free; |
82 | 66 | ||
67 | extern struct vfsops xfs_vfsops; | ||
68 | extern struct vnodeops xfs_vnodeops; | ||
69 | |||
83 | #define AIL_LOCK_T lock_t | 70 | #define AIL_LOCK_T lock_t |
84 | #define AIL_LOCKINIT(x,y) spinlock_init(x,y) | 71 | #define AIL_LOCKINIT(x,y) spinlock_init(x,y) |
85 | #define AIL_LOCK_DESTROY(x) spinlock_destroy(x) | 72 | #define AIL_LOCK_DESTROY(x) spinlock_destroy(x) |
@@ -292,6 +279,8 @@ typedef struct xfs_mount { | |||
292 | struct xfs_buf *m_sb_bp; /* buffer for superblock */ | 279 | struct xfs_buf *m_sb_bp; /* buffer for superblock */ |
293 | char *m_fsname; /* filesystem name */ | 280 | char *m_fsname; /* filesystem name */ |
294 | int m_fsname_len; /* strlen of fs name */ | 281 | int m_fsname_len; /* strlen of fs name */ |
282 | char *m_rtname; /* realtime device name */ | ||
283 | char *m_logname; /* external log device name */ | ||
295 | int m_bsize; /* fs logical block size */ | 284 | int m_bsize; /* fs logical block size */ |
296 | xfs_agnumber_t m_agfrotor; /* last ag where space found */ | 285 | xfs_agnumber_t m_agfrotor; /* last ag where space found */ |
297 | xfs_agnumber_t m_agirotor; /* last ag dir inode alloced */ | 286 | xfs_agnumber_t m_agirotor; /* last ag dir inode alloced */ |
@@ -344,7 +333,7 @@ typedef struct xfs_mount { | |||
344 | sema_t m_growlock; /* growfs mutex */ | 333 | sema_t m_growlock; /* growfs mutex */ |
345 | int m_fixedfsid[2]; /* unchanged for life of FS */ | 334 | int m_fixedfsid[2]; /* unchanged for life of FS */ |
346 | uint m_dmevmask; /* DMI events for this FS */ | 335 | uint m_dmevmask; /* DMI events for this FS */ |
347 | uint m_flags; /* global mount flags */ | 336 | __uint64_t m_flags; /* global mount flags */ |
348 | uint m_attroffset; /* inode attribute offset */ | 337 | uint m_attroffset; /* inode attribute offset */ |
349 | uint m_dir_node_ents; /* #entries in a dir danode */ | 338 | uint m_dir_node_ents; /* #entries in a dir danode */ |
350 | uint m_attr_node_ents; /* #entries in attr danode */ | 339 | uint m_attr_node_ents; /* #entries in attr danode */ |
@@ -389,38 +378,41 @@ typedef struct xfs_mount { | |||
389 | /* | 378 | /* |
390 | * Flags for m_flags. | 379 | * Flags for m_flags. |
391 | */ | 380 | */ |
392 | #define XFS_MOUNT_WSYNC 0x00000001 /* for nfs - all metadata ops | 381 | #define XFS_MOUNT_WSYNC (1ULL << 0) /* for nfs - all metadata ops |
393 | must be synchronous except | 382 | must be synchronous except |
394 | for space allocations */ | 383 | for space allocations */ |
395 | #define XFS_MOUNT_INO64 0x00000002 | 384 | #define XFS_MOUNT_INO64 (1ULL << 1) |
396 | /* 0x00000004 -- currently unused */ | 385 | /* (1ULL << 2) -- currently unused */ |
397 | /* 0x00000008 -- currently unused */ | 386 | /* (1ULL << 3) -- currently unused */ |
398 | #define XFS_MOUNT_FS_SHUTDOWN 0x00000010 /* atomic stop of all filesystem | 387 | #define XFS_MOUNT_FS_SHUTDOWN (1ULL << 4) /* atomic stop of all filesystem |
399 | operations, typically for | 388 | operations, typically for |
400 | disk errors in metadata */ | 389 | disk errors in metadata */ |
401 | #define XFS_MOUNT_NOATIME 0x00000020 /* don't modify inode access | 390 | #define XFS_MOUNT_NOATIME (1ULL << 5) /* don't modify inode access |
402 | times on reads */ | 391 | times on reads */ |
403 | #define XFS_MOUNT_RETERR 0x00000040 /* return alignment errors to | 392 | #define XFS_MOUNT_RETERR (1ULL << 6) /* return alignment errors to |
404 | user */ | 393 | user */ |
405 | #define XFS_MOUNT_NOALIGN 0x00000080 /* turn off stripe alignment | 394 | #define XFS_MOUNT_NOALIGN (1ULL << 7) /* turn off stripe alignment |
406 | allocations */ | 395 | allocations */ |
407 | /* 0x00000100 -- currently unused */ | 396 | #define XFS_MOUNT_COMPAT_ATTR (1ULL << 8) /* do not use attr2 format */ |
408 | /* 0x00000200 -- currently unused */ | 397 | /* (1ULL << 9) -- currently unused */ |
409 | #define XFS_MOUNT_NORECOVERY 0x00000400 /* no recovery - dirty fs */ | 398 | #define XFS_MOUNT_NORECOVERY (1ULL << 10) /* no recovery - dirty fs */ |
410 | #define XFS_MOUNT_SHARED 0x00000800 /* shared mount */ | 399 | #define XFS_MOUNT_SHARED (1ULL << 11) /* shared mount */ |
411 | #define XFS_MOUNT_DFLT_IOSIZE 0x00001000 /* set default i/o size */ | 400 | #define XFS_MOUNT_DFLT_IOSIZE (1ULL << 12) /* set default i/o size */ |
412 | #define XFS_MOUNT_OSYNCISOSYNC 0x00002000 /* o_sync is REALLY o_sync */ | 401 | #define XFS_MOUNT_OSYNCISOSYNC (1ULL << 13) /* o_sync is REALLY o_sync */ |
413 | /* osyncisdsync is now default*/ | 402 | /* osyncisdsync is now default*/ |
414 | #define XFS_MOUNT_32BITINODES 0x00004000 /* do not create inodes above | 403 | #define XFS_MOUNT_32BITINODES (1ULL << 14) /* do not create inodes above |
415 | * 32 bits in size */ | 404 | * 32 bits in size */ |
416 | #define XFS_MOUNT_32BITINOOPT 0x00008000 /* saved mount option state */ | 405 | /* (1ULL << 15) -- currently unused */ |
417 | #define XFS_MOUNT_NOUUID 0x00010000 /* ignore uuid during mount */ | 406 | #define XFS_MOUNT_NOUUID (1ULL << 16) /* ignore uuid during mount */ |
418 | #define XFS_MOUNT_NOLOGFLUSH 0x00020000 | 407 | #define XFS_MOUNT_BARRIER (1ULL << 17) |
419 | #define XFS_MOUNT_IDELETE 0x00040000 /* delete empty inode clusters*/ | 408 | #define XFS_MOUNT_IDELETE (1ULL << 18) /* delete empty inode clusters*/ |
420 | #define XFS_MOUNT_SWALLOC 0x00080000 /* turn on stripe width | 409 | #define XFS_MOUNT_SWALLOC (1ULL << 19) /* turn on stripe width |
421 | * allocation */ | 410 | * allocation */ |
422 | #define XFS_MOUNT_IHASHSIZE 0x00100000 /* inode hash table size */ | 411 | #define XFS_MOUNT_IHASHSIZE (1ULL << 20) /* inode hash table size */ |
423 | #define XFS_MOUNT_DIRSYNC 0x00200000 /* synchronous directory ops */ | 412 | #define XFS_MOUNT_DIRSYNC (1ULL << 21) /* synchronous directory ops */ |
413 | #define XFS_MOUNT_COMPAT_IOSIZE (1ULL << 22) /* don't report large preferred | ||
414 | * I/O size in stat() */ | ||
415 | |||
424 | 416 | ||
425 | /* | 417 | /* |
426 | * Default minimum read and write sizes. | 418 | * Default minimum read and write sizes. |
@@ -442,6 +434,30 @@ typedef struct xfs_mount { | |||
442 | #define XFS_WSYNC_READIO_LOG 15 /* 32K */ | 434 | #define XFS_WSYNC_READIO_LOG 15 /* 32K */ |
443 | #define XFS_WSYNC_WRITEIO_LOG 14 /* 16K */ | 435 | #define XFS_WSYNC_WRITEIO_LOG 14 /* 16K */ |
444 | 436 | ||
437 | /* | ||
438 | * Allow large block sizes to be reported to userspace programs if the | ||
439 | * "largeio" mount option is used. | ||
440 | * | ||
441 | * If compatibility mode is specified, simply return the basic unit of caching | ||
442 | * so that we don't get inefficient read/modify/write I/O from user apps. | ||
443 | * Otherwise.... | ||
444 | * | ||
445 | * If the underlying volume is a stripe, then return the stripe width in bytes | ||
446 | * as the recommended I/O size. It is not a stripe and we've set a default | ||
447 | * buffered I/O size, return that, otherwise return the compat default. | ||
448 | */ | ||
449 | static inline unsigned long | ||
450 | xfs_preferred_iosize(xfs_mount_t *mp) | ||
451 | { | ||
452 | if (mp->m_flags & XFS_MOUNT_COMPAT_IOSIZE) | ||
453 | return PAGE_CACHE_SIZE; | ||
454 | return (mp->m_swidth ? | ||
455 | (mp->m_swidth << mp->m_sb.sb_blocklog) : | ||
456 | ((mp->m_flags & XFS_MOUNT_DFLT_IOSIZE) ? | ||
457 | (1 << (int)MAX(mp->m_readio_log, mp->m_writeio_log)) : | ||
458 | PAGE_CACHE_SIZE)); | ||
459 | } | ||
460 | |||
445 | #define XFS_MAXIOFFSET(mp) ((mp)->m_maxioffset) | 461 | #define XFS_MAXIOFFSET(mp) ((mp)->m_maxioffset) |
446 | 462 | ||
447 | #define XFS_FORCED_SHUTDOWN(mp) ((mp)->m_flags & XFS_MOUNT_FS_SHUTDOWN) | 463 | #define XFS_FORCED_SHUTDOWN(mp) ((mp)->m_flags & XFS_MOUNT_FS_SHUTDOWN) |
@@ -474,57 +490,41 @@ typedef struct xfs_mount { | |||
474 | /* | 490 | /* |
475 | * Macros for getting from mount to vfs and back. | 491 | * Macros for getting from mount to vfs and back. |
476 | */ | 492 | */ |
477 | #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_MTOVFS) | ||
478 | struct vfs *xfs_mtovfs(xfs_mount_t *mp); | ||
479 | #define XFS_MTOVFS(mp) xfs_mtovfs(mp) | 493 | #define XFS_MTOVFS(mp) xfs_mtovfs(mp) |
480 | #else | 494 | static inline struct vfs *xfs_mtovfs(xfs_mount_t *mp) |
481 | #define XFS_MTOVFS(mp) (bhvtovfs(&(mp)->m_bhv)) | 495 | { |
482 | #endif | 496 | return bhvtovfs(&mp->m_bhv); |
483 | #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_BHVTOM) | 497 | } |
484 | xfs_mount_t *xfs_bhvtom(bhv_desc_t *bdp); | ||
485 | #define XFS_BHVTOM(bdp) xfs_bhvtom(bdp) | ||
486 | #else | ||
487 | #define XFS_BHVTOM(bdp) ((xfs_mount_t *)BHV_PDATA(bdp)) | ||
488 | #endif | ||
489 | #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_VFSTOM) | ||
490 | xfs_mount_t *xfs_vfstom(vfs_t *vfs); | ||
491 | #define XFS_VFSTOM(vfs) xfs_vfstom(vfs) | ||
492 | #else | ||
493 | #define XFS_VFSTOM(vfs) \ | ||
494 | (XFS_BHVTOM(bhv_lookup(VFS_BHVHEAD(vfs), &xfs_vfsops))) | ||
495 | #endif | ||
496 | 498 | ||
499 | #define XFS_BHVTOM(bdp) xfs_bhvtom(bdp) | ||
500 | static inline xfs_mount_t *xfs_bhvtom(bhv_desc_t *bdp) | ||
501 | { | ||
502 | return (xfs_mount_t *)BHV_PDATA(bdp); | ||
503 | } | ||
497 | 504 | ||
498 | /* | 505 | #define XFS_VFSTOM(vfs) xfs_vfstom(vfs) |
499 | * Moved here from xfs_ag.h to avoid reordering header files | 506 | static inline xfs_mount_t *xfs_vfstom(vfs_t *vfs) |
500 | */ | 507 | { |
508 | return XFS_BHVTOM(bhv_lookup(VFS_BHVHEAD(vfs), &xfs_vfsops)); | ||
509 | } | ||
501 | 510 | ||
502 | #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DADDR_TO_AGNO) | ||
503 | xfs_agnumber_t xfs_daddr_to_agno(struct xfs_mount *mp, xfs_daddr_t d); | ||
504 | #define XFS_DADDR_TO_AGNO(mp,d) xfs_daddr_to_agno(mp,d) | 511 | #define XFS_DADDR_TO_AGNO(mp,d) xfs_daddr_to_agno(mp,d) |
505 | #else | 512 | static inline xfs_agnumber_t |
506 | 513 | xfs_daddr_to_agno(struct xfs_mount *mp, xfs_daddr_t d) | |
507 | static inline xfs_agnumber_t XFS_DADDR_TO_AGNO(xfs_mount_t *mp, xfs_daddr_t d) | ||
508 | { | 514 | { |
509 | d = XFS_BB_TO_FSBT(mp, d); | 515 | xfs_daddr_t ld = XFS_BB_TO_FSBT(mp, d); |
510 | do_div(d, mp->m_sb.sb_agblocks); | 516 | do_div(ld, mp->m_sb.sb_agblocks); |
511 | return (xfs_agnumber_t) d; | 517 | return (xfs_agnumber_t) ld; |
512 | } | 518 | } |
513 | 519 | ||
514 | #endif | ||
515 | #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DADDR_TO_AGBNO) | ||
516 | xfs_agblock_t xfs_daddr_to_agbno(struct xfs_mount *mp, xfs_daddr_t d); | ||
517 | #define XFS_DADDR_TO_AGBNO(mp,d) xfs_daddr_to_agbno(mp,d) | 520 | #define XFS_DADDR_TO_AGBNO(mp,d) xfs_daddr_to_agbno(mp,d) |
518 | #else | 521 | static inline xfs_agblock_t |
519 | 522 | xfs_daddr_to_agbno(struct xfs_mount *mp, xfs_daddr_t d) | |
520 | static inline xfs_agblock_t XFS_DADDR_TO_AGBNO(xfs_mount_t *mp, xfs_daddr_t d) | ||
521 | { | 523 | { |
522 | d = XFS_BB_TO_FSBT(mp, d); | 524 | xfs_daddr_t ld = XFS_BB_TO_FSBT(mp, d); |
523 | return (xfs_agblock_t) do_div(d, mp->m_sb.sb_agblocks); | 525 | return (xfs_agblock_t) do_div(ld, mp->m_sb.sb_agblocks); |
524 | } | 526 | } |
525 | 527 | ||
526 | #endif | ||
527 | |||
528 | /* | 528 | /* |
529 | * This structure is for use by the xfs_mod_incore_sb_batch() routine. | 529 | * This structure is for use by the xfs_mod_incore_sb_batch() routine. |
530 | */ | 530 | */ |
@@ -542,6 +542,7 @@ extern xfs_mount_t *xfs_mount_init(void); | |||
542 | extern void xfs_mod_sb(xfs_trans_t *, __int64_t); | 542 | extern void xfs_mod_sb(xfs_trans_t *, __int64_t); |
543 | extern void xfs_mount_free(xfs_mount_t *mp, int remove_bhv); | 543 | extern void xfs_mount_free(xfs_mount_t *mp, int remove_bhv); |
544 | extern int xfs_mountfs(struct vfs *, xfs_mount_t *mp, int); | 544 | extern int xfs_mountfs(struct vfs *, xfs_mount_t *mp, int); |
545 | extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); | ||
545 | 546 | ||
546 | extern int xfs_unmountfs(xfs_mount_t *, struct cred *); | 547 | extern int xfs_unmountfs(xfs_mount_t *, struct cred *); |
547 | extern void xfs_unmountfs_close(xfs_mount_t *, struct cred *); | 548 | extern void xfs_unmountfs_close(xfs_mount_t *, struct cred *); |
@@ -555,12 +556,11 @@ extern int xfs_readsb(xfs_mount_t *mp); | |||
555 | extern void xfs_freesb(xfs_mount_t *); | 556 | extern void xfs_freesb(xfs_mount_t *); |
556 | extern void xfs_do_force_shutdown(bhv_desc_t *, int, char *, int); | 557 | extern void xfs_do_force_shutdown(bhv_desc_t *, int, char *, int); |
557 | extern int xfs_syncsub(xfs_mount_t *, int, int, int *); | 558 | extern int xfs_syncsub(xfs_mount_t *, int, int, int *); |
558 | extern xfs_agnumber_t xfs_initialize_perag(xfs_mount_t *, xfs_agnumber_t); | 559 | extern int xfs_sync_inodes(xfs_mount_t *, int, int, int *); |
560 | extern xfs_agnumber_t xfs_initialize_perag(struct vfs *, xfs_mount_t *, | ||
561 | xfs_agnumber_t); | ||
559 | extern void xfs_xlatesb(void *, struct xfs_sb *, int, __int64_t); | 562 | extern void xfs_xlatesb(void *, struct xfs_sb *, int, __int64_t); |
560 | 563 | ||
561 | extern struct vfsops xfs_vfsops; | ||
562 | extern struct vnodeops xfs_vnodeops; | ||
563 | |||
564 | extern struct xfs_dmops xfs_dmcore_stub; | 564 | extern struct xfs_dmops xfs_dmcore_stub; |
565 | extern struct xfs_qmops xfs_qmcore_stub; | 565 | extern struct xfs_qmops xfs_qmcore_stub; |
566 | extern struct xfs_ioops xfs_iocore_xfs; | 566 | extern struct xfs_ioops xfs_iocore_xfs; |