root/fs/ext4/symlink.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ext4_encrypted_get_link

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  *  linux/fs/ext4/symlink.c
   4  *
   5  * Only fast symlinks left here - the rest is done by generic code. AV, 1999
   6  *
   7  * Copyright (C) 1992, 1993, 1994, 1995
   8  * Remy Card (card@masi.ibp.fr)
   9  * Laboratoire MASI - Institut Blaise Pascal
  10  * Universite Pierre et Marie Curie (Paris VI)
  11  *
  12  *  from
  13  *
  14  *  linux/fs/minix/symlink.c
  15  *
  16  *  Copyright (C) 1991, 1992  Linus Torvalds
  17  *
  18  *  ext4 symlink handling code
  19  */
  20 
  21 #include <linux/fs.h>
  22 #include <linux/namei.h>
  23 #include "ext4.h"
  24 #include "xattr.h"
  25 
  26 static const char *ext4_encrypted_get_link(struct dentry *dentry,
  27                                            struct inode *inode,
  28                                            struct delayed_call *done)
  29 {
  30         struct page *cpage = NULL;
  31         const void *caddr;
  32         unsigned int max_size;
  33         const char *paddr;
  34 
  35         if (!dentry)
  36                 return ERR_PTR(-ECHILD);
  37 
  38         if (ext4_inode_is_fast_symlink(inode)) {
  39                 caddr = EXT4_I(inode)->i_data;
  40                 max_size = sizeof(EXT4_I(inode)->i_data);
  41         } else {
  42                 cpage = read_mapping_page(inode->i_mapping, 0, NULL);
  43                 if (IS_ERR(cpage))
  44                         return ERR_CAST(cpage);
  45                 caddr = page_address(cpage);
  46                 max_size = inode->i_sb->s_blocksize;
  47         }
  48 
  49         paddr = fscrypt_get_symlink(inode, caddr, max_size, done);
  50         if (cpage)
  51                 put_page(cpage);
  52         return paddr;
  53 }
  54 
  55 const struct inode_operations ext4_encrypted_symlink_inode_operations = {
  56         .get_link       = ext4_encrypted_get_link,
  57         .setattr        = ext4_setattr,
  58         .getattr        = ext4_getattr,
  59         .listxattr      = ext4_listxattr,
  60 };
  61 
  62 const struct inode_operations ext4_symlink_inode_operations = {
  63         .get_link       = page_get_link,
  64         .setattr        = ext4_setattr,
  65         .getattr        = ext4_getattr,
  66         .listxattr      = ext4_listxattr,
  67 };
  68 
  69 const struct inode_operations ext4_fast_symlink_inode_operations = {
  70         .get_link       = simple_get_link,
  71         .setattr        = ext4_setattr,
  72         .getattr        = ext4_getattr,
  73         .listxattr      = ext4_listxattr,
  74 };

/* [<][>][^][v][top][bottom][index][help] */