mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	- Fix some compiler and kernel-doc warnings.
 
 - Various minor cleanups and optimizations.
 
 - Add a new sysfs gfs2 status file with some filesystem wide
   information.
 -----BEGIN PGP SIGNATURE-----
 
 iQJIBAABCAAyFiEEJZs3krPW0xkhLMTc1b+f6wMTZToFAmCKiWIUHGFncnVlbmJh
 QHJlZGhhdC5jb20ACgkQ1b+f6wMTZTqXOA//cgEMi+WZ0pQ1m4Z7Yk58ArAGXOW4
 L+efdMjk2zoqgixF502tQzaa2ctz6XpukF4oZbM+Jc+yZxrbZ5CLjUIOWc9RH+Id
 WQwj5+5GLbMAPnn5ksHUCTK9V+1oAlpgoY4fMtLdKq234Y6xqWj5qBjvtGUTLFAl
 ACvy8FUZplFOkaOSBqgh221LT4Oh0Wthe/Elq5qvqwBfdAiE/p1sHSi2FWxktIlU
 wV3PKL96rFsnWN8E6jqyJR1RNJ5d5MYA+PDkTHKcoqcXZrzw4mfu2tCh88Bh9wFb
 MEyjtLxE09G1+3Li/T/Tb7qbRKWvxEmkLZXaFAjRUp7zYPvM6twKSg8nihcBDtLi
 UgvTrc208CYvYj7QpRQ1dU9lEg47A46rB8dgLz+ymlpNNk/G0gqgvWLevMKnBfaX
 AkZviI6qm1iNCBd6wWWPUKqR0qrCWqoe9N8F7cWyZBki7dKkoj29Gt1X1SeIQMjd
 n8Mkv6Btd39kBt3DydXlCEaREMQYeDrxBJHxur234hEfFLFraFj5tYFjoeSODZdg
 Uxsn5X5dgLy/hHjps8YcuBoEgRMR/aKovK5G1FXDcQR5O6UByqtJuJTJBT8jxAld
 vLYHqO6vxdgGATaYAkuGLSLrJjwES+7tEXjtrdarswGo55dPitwtOB1NRWuOor/Z
 uTnzJbykMdIzEHs=
 =VblJ
 -----END PGP SIGNATURE-----
Merge tag 'gfs2-for-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2
Pull gfs2 updates from Andreas Gruenbacher:
 - Fix some compiler and kernel-doc warnings
 - Various minor cleanups and optimizations
 - Add a new sysfs gfs2 status file with some filesystem wide
   information
* tag 'gfs2-for-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2:
  gfs2: Fix fall-through warnings for Clang
  gfs2: Fix a number of kernel-doc warnings
  gfs2: Make gfs2_setattr_simple static
  gfs2: Add new sysfs file for gfs2 status
  gfs2: Silence possible null pointer dereference warning
  gfs2: Turn gfs2_meta_indirect_buffer into gfs2_meta_buffer
  gfs2: Replace gfs2_lblk_to_dblk with gfs2_get_extent
  gfs2: Turn gfs2_extent_map into gfs2_{get,alloc}_extent
  gfs2: Add new gfs2_iomap_get helper
  gfs2: Remove unused variable sb_format
  gfs2: Fix dir.c function parameter descriptions
  gfs2: Eliminate gh parameter from go_xmote_bh func
  gfs2: don't create empty buffers for NO_CREATE
		
	
			
		
			
				
	
	
		
			137 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
						|
/*
 | 
						|
 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
 | 
						|
 * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef __INODE_DOT_H__
 | 
						|
#define __INODE_DOT_H__
 | 
						|
 | 
						|
#include <linux/fs.h>
 | 
						|
#include <linux/buffer_head.h>
 | 
						|
#include <linux/mm.h>
 | 
						|
#include "util.h"
 | 
						|
 | 
						|
extern int gfs2_releasepage(struct page *page, gfp_t gfp_mask);
 | 
						|
extern int gfs2_internal_read(struct gfs2_inode *ip,
 | 
						|
			      char *buf, loff_t *pos, unsigned size);
 | 
						|
extern void gfs2_set_aops(struct inode *inode);
 | 
						|
 | 
						|
static inline int gfs2_is_stuffed(const struct gfs2_inode *ip)
 | 
						|
{
 | 
						|
	return !ip->i_height;
 | 
						|
}
 | 
						|
 | 
						|
static inline int gfs2_is_jdata(const struct gfs2_inode *ip)
 | 
						|
{
 | 
						|
	return ip->i_diskflags & GFS2_DIF_JDATA;
 | 
						|
}
 | 
						|
 | 
						|
static inline bool gfs2_is_ordered(const struct gfs2_sbd *sdp)
 | 
						|
{
 | 
						|
	return sdp->sd_args.ar_data == GFS2_DATA_ORDERED;
 | 
						|
}
 | 
						|
 | 
						|
static inline bool gfs2_is_writeback(const struct gfs2_sbd *sdp)
 | 
						|
{
 | 
						|
	return sdp->sd_args.ar_data == GFS2_DATA_WRITEBACK;
 | 
						|
}
 | 
						|
 | 
						|
static inline int gfs2_is_dir(const struct gfs2_inode *ip)
 | 
						|
{
 | 
						|
	return S_ISDIR(ip->i_inode.i_mode);
 | 
						|
}
 | 
						|
 | 
						|
static inline void gfs2_set_inode_blocks(struct inode *inode, u64 blocks)
 | 
						|
{
 | 
						|
	inode->i_blocks = blocks <<
 | 
						|
		(GFS2_SB(inode)->sd_sb.sb_bsize_shift - GFS2_BASIC_BLOCK_SHIFT);
 | 
						|
}
 | 
						|
 | 
						|
static inline u64 gfs2_get_inode_blocks(const struct inode *inode)
 | 
						|
{
 | 
						|
	return inode->i_blocks >>
 | 
						|
		(GFS2_SB(inode)->sd_sb.sb_bsize_shift - GFS2_BASIC_BLOCK_SHIFT);
 | 
						|
}
 | 
						|
 | 
						|
static inline void gfs2_add_inode_blocks(struct inode *inode, s64 change)
 | 
						|
{
 | 
						|
	change <<= inode->i_blkbits - GFS2_BASIC_BLOCK_SHIFT;
 | 
						|
	gfs2_assert(GFS2_SB(inode), (change >= 0 || inode->i_blocks >= -change));
 | 
						|
	inode->i_blocks += change;
 | 
						|
}
 | 
						|
 | 
						|
static inline int gfs2_check_inum(const struct gfs2_inode *ip, u64 no_addr,
 | 
						|
				  u64 no_formal_ino)
 | 
						|
{
 | 
						|
	return ip->i_no_addr == no_addr && ip->i_no_formal_ino == no_formal_ino;
 | 
						|
}
 | 
						|
 | 
						|
static inline void gfs2_inum_out(const struct gfs2_inode *ip,
 | 
						|
				 struct gfs2_dirent *dent)
 | 
						|
{
 | 
						|
	dent->de_inum.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino);
 | 
						|
	dent->de_inum.no_addr = cpu_to_be64(ip->i_no_addr);
 | 
						|
}
 | 
						|
 | 
						|
static inline int gfs2_check_internal_file_size(struct inode *inode,
 | 
						|
						u64 minsize, u64 maxsize)
 | 
						|
{
 | 
						|
	u64 size = i_size_read(inode);
 | 
						|
	if (size < minsize || size > maxsize)
 | 
						|
		goto err;
 | 
						|
	if (size & (BIT(inode->i_blkbits) - 1))
 | 
						|
		goto err;
 | 
						|
	return 0;
 | 
						|
err:
 | 
						|
	gfs2_consist_inode(GFS2_I(inode));
 | 
						|
	return -EIO;
 | 
						|
}
 | 
						|
 | 
						|
extern struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned type, 
 | 
						|
				       u64 no_addr, u64 no_formal_ino,
 | 
						|
				       unsigned int blktype);
 | 
						|
extern struct inode *gfs2_lookup_by_inum(struct gfs2_sbd *sdp, u64 no_addr,
 | 
						|
					 u64 no_formal_ino,
 | 
						|
					 unsigned int blktype);
 | 
						|
 | 
						|
extern int gfs2_inode_refresh(struct gfs2_inode *ip);
 | 
						|
 | 
						|
extern struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
 | 
						|
				  int is_root);
 | 
						|
extern int gfs2_permission(struct user_namespace *mnt_userns,
 | 
						|
			   struct inode *inode, int mask);
 | 
						|
extern struct inode *gfs2_lookup_simple(struct inode *dip, const char *name);
 | 
						|
extern void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf);
 | 
						|
extern int gfs2_open_common(struct inode *inode, struct file *file);
 | 
						|
extern loff_t gfs2_seek_data(struct file *file, loff_t offset);
 | 
						|
extern loff_t gfs2_seek_hole(struct file *file, loff_t offset);
 | 
						|
 | 
						|
extern const struct file_operations gfs2_file_fops_nolock;
 | 
						|
extern const struct file_operations gfs2_dir_fops_nolock;
 | 
						|
 | 
						|
extern int gfs2_fileattr_get(struct dentry *dentry, struct fileattr *fa);
 | 
						|
extern int gfs2_fileattr_set(struct user_namespace *mnt_userns,
 | 
						|
			     struct dentry *dentry, struct fileattr *fa);
 | 
						|
extern void gfs2_set_inode_flags(struct inode *inode);
 | 
						|
 
 | 
						|
#ifdef CONFIG_GFS2_FS_LOCKING_DLM
 | 
						|
extern const struct file_operations gfs2_file_fops;
 | 
						|
extern const struct file_operations gfs2_dir_fops;
 | 
						|
 | 
						|
static inline int gfs2_localflocks(const struct gfs2_sbd *sdp)
 | 
						|
{
 | 
						|
	return sdp->sd_args.ar_localflocks;
 | 
						|
}
 | 
						|
#else /* Single node only */
 | 
						|
#define gfs2_file_fops gfs2_file_fops_nolock
 | 
						|
#define gfs2_dir_fops gfs2_dir_fops_nolock
 | 
						|
 | 
						|
static inline int gfs2_localflocks(const struct gfs2_sbd *sdp)
 | 
						|
{
 | 
						|
	return 1;
 | 
						|
}
 | 
						|
#endif /* CONFIG_GFS2_FS_LOCKING_DLM */
 | 
						|
 | 
						|
#endif /* __INODE_DOT_H__ */
 | 
						|
 |