diff options
Diffstat (limited to 'fs/xfs/xfs_symlink.h')
-rw-r--r-- | fs/xfs/xfs_symlink.h | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/fs/xfs/xfs_symlink.h b/fs/xfs/xfs_symlink.h index 07bdabc..b39398d 100644 --- a/fs/xfs/xfs_symlink.h +++ b/fs/xfs/xfs_symlink.h @@ -17,16 +17,44 @@ #ifndef __XFS_SYMLINK_H #define __XFS_SYMLINK_H 1 +struct xfs_mount; +struct xfs_trans; +struct xfs_inode; +struct xfs_buf; +struct xfs_ifork; +struct xfs_name; + +#define XFS_SYMLINK_MAGIC 0x58534c4d /* XSLM */ + +struct xfs_dsymlink_hdr { + __be32 sl_magic; + __be32 sl_offset; + __be32 sl_bytes; + __be32 sl_crc; + uuid_t sl_uuid; + __be64 sl_owner; + __be64 sl_blkno; + __be64 sl_lsn; +}; + /* * The maximum pathlen is 1024 bytes. Since the minimum file system - * blocksize is 512 bytes, we can get a max of 2 extents back from - * bmapi. + * blocksize is 512 bytes, we can get a max of 3 extents back from + * bmapi when crc headers are taken into account. */ -#define XFS_SYMLINK_MAPS 2 +#define XFS_SYMLINK_MAPS 3 + +#define XFS_SYMLINK_BUF_SPACE(mp, bufsize) \ + ((bufsize) - (xfs_sb_version_hascrc(&(mp)->m_sb) ? \ + sizeof(struct xfs_dsymlink_hdr) : 0)) + +int xfs_symlink_blocks(struct xfs_mount *mp, int pathlen); void xfs_symlink_local_to_remote(struct xfs_trans *tp, struct xfs_buf *bp, struct xfs_inode *ip, struct xfs_ifork *ifp); +extern const struct xfs_buf_ops xfs_symlink_buf_ops; + #ifdef __KERNEL__ int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, |