mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-01 10:43:43 +00:00
nilfs2: add support for FS_IOC_GETFSLABEL
Implement support for FS_IOC_GETFSLABEL ioctl to read filesystem label. Link: https://lkml.kernel.org/r/20240815074408.5550-4-konishi.ryusuke@gmail.com Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
8d1dba2e7c
commit
4b901256a7
@ -17,6 +17,7 @@
|
||||
#include <linux/mount.h> /* mnt_want_write_file(), mnt_drop_write_file() */
|
||||
#include <linux/buffer_head.h>
|
||||
#include <linux/fileattr.h>
|
||||
#include <linux/string.h>
|
||||
#include "nilfs.h"
|
||||
#include "segment.h"
|
||||
#include "bmap.h"
|
||||
@ -1266,6 +1267,29 @@ static int nilfs_ioctl_set_suinfo(struct inode *inode, struct file *filp,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* nilfs_ioctl_get_fslabel - get the volume name of the file system
|
||||
* @sb: super block instance
|
||||
* @argp: pointer to userspace memory where the volume name should be stored
|
||||
*
|
||||
* Return: 0 on success, %-EFAULT if copying to userspace memory fails.
|
||||
*/
|
||||
static int nilfs_ioctl_get_fslabel(struct super_block *sb, void __user *argp)
|
||||
{
|
||||
struct the_nilfs *nilfs = sb->s_fs_info;
|
||||
char label[NILFS_MAX_VOLUME_NAME + 1];
|
||||
|
||||
BUILD_BUG_ON(NILFS_MAX_VOLUME_NAME >= FSLABEL_MAX);
|
||||
|
||||
down_read(&nilfs->ns_sem);
|
||||
memtostr_pad(label, nilfs->ns_sbp[0]->s_volume_name);
|
||||
up_read(&nilfs->ns_sem);
|
||||
|
||||
if (copy_to_user(argp, label, sizeof(label)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
long nilfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct inode *inode = file_inode(filp);
|
||||
@ -1308,6 +1332,8 @@ long nilfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||
return nilfs_ioctl_set_alloc_range(inode, argp);
|
||||
case FITRIM:
|
||||
return nilfs_ioctl_trim_fs(inode, argp);
|
||||
case FS_IOC_GETFSLABEL:
|
||||
return nilfs_ioctl_get_fslabel(inode->i_sb, argp);
|
||||
default:
|
||||
return -ENOTTY;
|
||||
}
|
||||
@ -1334,6 +1360,7 @@ long nilfs_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||
case NILFS_IOCTL_RESIZE:
|
||||
case NILFS_IOCTL_SET_ALLOC_RANGE:
|
||||
case FITRIM:
|
||||
case FS_IOC_GETFSLABEL:
|
||||
break;
|
||||
default:
|
||||
return -ENOIOCTLCMD;
|
||||
|
@ -103,6 +103,18 @@ enum {
|
||||
NILFS_SB_COMMIT_ALL /* Commit both super blocks */
|
||||
};
|
||||
|
||||
/**
|
||||
* define NILFS_MAX_VOLUME_NAME - maximum number of characters (bytes) in a
|
||||
* file system volume name
|
||||
*
|
||||
* Defined by the size of the volume name field in the on-disk superblocks.
|
||||
* This volume name does not include the terminating NULL byte if the string
|
||||
* length matches the field size, so use (NILFS_MAX_VOLUME_NAME + 1) for the
|
||||
* size of the buffer that requires a NULL byte termination.
|
||||
*/
|
||||
#define NILFS_MAX_VOLUME_NAME \
|
||||
sizeof_field(struct nilfs_super_block, s_volume_name)
|
||||
|
||||
/*
|
||||
* Macros to check inode numbers
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user