Merge tag 'kbuild-fixes-v6.7' of git://git.kernel.org/pub/scm/linux/kernel/git/masahi...
[linux-block.git] / fs / libfs.c
index abe2b5a40ba1b69ab4a8ad65b76c907a28fdb693..e9440d55073c50962486f3f4f047a7872544fcff 100644 (file)
@@ -41,6 +41,9 @@ EXPORT_SYMBOL(simple_getattr);
 
 int simple_statfs(struct dentry *dentry, struct kstatfs *buf)
 {
+       u64 id = huge_encode_dev(dentry->d_sb->s_dev);
+
+       buf->f_fsid = u64_to_fsid(id);
        buf->f_type = dentry->d_sb->s_magic;
        buf->f_bsize = PAGE_SIZE;
        buf->f_namelen = NAME_MAX;
@@ -1309,6 +1312,47 @@ ssize_t simple_attr_write_signed(struct file *file, const char __user *buf,
 }
 EXPORT_SYMBOL_GPL(simple_attr_write_signed);
 
+/**
+ * generic_encode_ino32_fh - generic export_operations->encode_fh function
+ * @inode:   the object to encode
+ * @fh:      where to store the file handle fragment
+ * @max_len: maximum length to store there (in 4 byte units)
+ * @parent:  parent directory inode, if wanted
+ *
+ * This generic encode_fh function assumes that the 32 inode number
+ * is suitable for locating an inode, and that the generation number
+ * can be used to check that it is still valid.  It places them in the
+ * filehandle fragment where export_decode_fh expects to find them.
+ */
+int generic_encode_ino32_fh(struct inode *inode, __u32 *fh, int *max_len,
+                           struct inode *parent)
+{
+       struct fid *fid = (void *)fh;
+       int len = *max_len;
+       int type = FILEID_INO32_GEN;
+
+       if (parent && (len < 4)) {
+               *max_len = 4;
+               return FILEID_INVALID;
+       } else if (len < 2) {
+               *max_len = 2;
+               return FILEID_INVALID;
+       }
+
+       len = 2;
+       fid->i32.ino = inode->i_ino;
+       fid->i32.gen = inode->i_generation;
+       if (parent) {
+               fid->i32.parent_ino = parent->i_ino;
+               fid->i32.parent_gen = parent->i_generation;
+               len = 4;
+               type = FILEID_INO32_GEN_PARENT;
+       }
+       *max_len = len;
+       return type;
+}
+EXPORT_SYMBOL_GPL(generic_encode_ino32_fh);
+
 /**
  * generic_fh_to_dentry - generic helper for the fh_to_dentry export operation
  * @sb:                filesystem to do the file handle conversion on