Skip to content

Commit

Permalink
Merge tag 'for-linus-4.17-ofs' of git://git.kernel.org/pub/scm/linux/…
Browse files Browse the repository at this point in the history
…kernel/git/hubcap/linux

Pull orangefs updates from Mike Marshall:
 "Fixes and cleanups:

   - Documentation cleanups

   - removal of unused code

   - make some structs static

   - implement Orangefs vm_operations fault callout

   - eliminate two single-use functions and put their cleaned up code in
     line.

   - replace a vmalloc/memset instance with vzalloc

   - fix a race condition bug in wait code"

* tag 'for-linus-4.17-ofs' of git://git.kernel.org/pub/scm/linux/kernel/git/hubcap/linux:
  Orangefs: documentation updates
  orangefs: document package install and xfstests procedure
  orangefs: remove unused code
  orangefs: make several *_operations structs static
  orangefs: implement vm_ops->fault
  orangefs: open code short single-use functions
  orangefs: replace vmalloc and memset with vzalloc
  orangefs: bug fix for a race condition when getting a slot
  • Loading branch information
Linus Torvalds committed Apr 9, 2018
2 parents 190f2ac + 8e9ba5c commit 8ea4a5d
Show file tree
Hide file tree
Showing 8 changed files with 190 additions and 266 deletions.
137 changes: 112 additions & 25 deletions Documentation/filesystems/orangefs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,16 @@ Orangefs features include:
* Stateless


MAILING LIST
============
MAILING LIST ARCHIVES
=====================

http://beowulf-underground.org/mailman/listinfo/pvfs2-users
http://lists.orangefs.org/pipermail/devel_lists.orangefs.org/


MAILING LIST SUBMISSIONS
========================

devel@lists.orangefs.org


DOCUMENTATION
Expand All @@ -42,48 +48,129 @@ Orangefs versions prior to 2.9.3 would not be compatible with the
upstream version of the kernel client.


BUILDING THE USERSPACE FILESYSTEM ON A SINGLE SERVER
====================================================
RUNNING ORANGEFS ON A SINGLE SERVER
===================================

OrangeFS is usually run in large installations with multiple servers and
clients, but a complete filesystem can be run on a single machine for
development and testing.

On Fedora, install orangefs and orangefs-server.

dnf -y install orangefs orangefs-server

There is an example server configuration file in
/etc/orangefs/orangefs.conf. Change localhost to your hostname if
necessary.

To generate a filesystem to run xfstests against, see below.

There is an example client configuration file in /etc/pvfs2tab. It is a
single line. Uncomment it and change the hostname if necessary. This
controls clients which use libpvfs2. This does not control the
pvfs2-client-core.

Create the filesystem.

pvfs2-server -f /etc/orangefs/orangefs.conf

Start the server.

systemctl start orangefs-server

Test the server.

pvfs2-ping -m /pvfsmnt

Start the client. The module must be compiled in or loaded before this
point.

systemctl start orangefs-client

Mount the filesystem.

mount -t pvfs2 tcp://localhost:3334/orangefs /pvfsmnt


You can omit --prefix if you don't care that things are sprinkled around in
/usr/local. As of version 2.9.6, Orangefs uses Berkeley DB by default, we
will probably be changing the default to lmdb soon.
BUILDING ORANGEFS ON A SINGLE SERVER
====================================

Where OrangeFS cannot be installed from distribution packages, it may be
built from source.

You can omit --prefix if you don't care that things are sprinkled around
in /usr/local. As of version 2.9.6, OrangeFS uses Berkeley DB by
default, we will probably be changing the default to LMDB soon.

./configure --prefix=/opt/ofs --with-db-backend=lmdb

make

make install

Create an orangefs config file:
Create an orangefs config file.

/opt/ofs/bin/pvfs2-genconfig /etc/pvfs2.conf

for "Enter hostnames", use the hostname, don't let it default to
localhost.
Create an /etc/pvfs2tab file.

echo tcp://localhost:3334/orangefs /pvfsmnt pvfs2 defaults,noauto 0 0 > \
/etc/pvfs2tab

Create the mount point you specified in the tab file if needed.

create a pvfs2tab file in /etc:
cat /etc/pvfs2tab
tcp://myhostname:3334/orangefs /mymountpoint pvfs2 defaults,noauto 0 0
mkdir /pvfsmnt

create the mount point you specified in the tab file if needed:
mkdir /mymountpoint
Bootstrap the server.

bootstrap the server:
/opt/ofs/sbin/pvfs2-server /etc/pvfs2.conf -f
/opt/ofs/sbin/pvfs2-server -f /etc/pvfs2.conf

Start the server.

start the server:
/opt/osf/sbin/pvfs2-server /etc/pvfs2.conf

Now the server is running. At this point you might like to
prove things are working with:
Now the server should be running. Pvfs2-ls is a simple
test to verify that the server is running.

/opt/ofs/bin/pvfs2-ls /pvfsmnt

/opt/osf/bin/pvfs2-ls /mymountpoint
If stuff seems to be working, load the kernel module and
turn on the client core.

If stuff seems to be working, turn on the client core:
/opt/osf/sbin/pvfs2-client -p /opt/osf/sbin/pvfs2-client-core
/opt/ofs/sbin/pvfs2-client -p /opt/osf/sbin/pvfs2-client-core

Mount your filesystem.
mount -t pvfs2 tcp://myhostname:3334/orangefs /mymountpoint

mount -t pvfs2 tcp://localhost:3334/orangefs /pvfsmnt


RUNNING XFSTESTS
================

It is useful to use a scratch filesystem with xfstests. This can be
done with only one server.

Make a second copy of the FileSystem section in the server configuration
file, which is /etc/orangefs/orangefs.conf. Change the Name to scratch.
Change the ID to something other than the ID of the first FileSystem
section (2 is usually a good choice).

Then there are two FileSystem sections: orangefs and scratch.

This change should be made before creating the filesystem.

pvfs2-server -f /etc/orangefs/orangefs.conf

To run xfstests, create /etc/xfsqa.config.

TEST_DIR=/orangefs
TEST_DEV=tcp://localhost:3334/orangefs
SCRATCH_MNT=/scratch
SCRATCH_DEV=tcp://localhost:3334/scratch

Then xfstests can be run

./check -pvfs2


OPTIONS
Expand Down
55 changes: 27 additions & 28 deletions fs/orangefs/devorangefs-req.c
Original file line number Diff line number Diff line change
Expand Up @@ -463,11 +463,10 @@ static ssize_t orangefs_devreq_write_iter(struct kiocb *iocb,
if (op->downcall.type != ORANGEFS_VFS_OP_READDIR)
goto wakeup;

op->downcall.trailer_buf = vmalloc(op->downcall.trailer_size);
op->downcall.trailer_buf = vzalloc(op->downcall.trailer_size);
if (!op->downcall.trailer_buf)
goto Enomem;

memset(op->downcall.trailer_buf, 0, op->downcall.trailer_size);
if (!copy_from_iter_full(op->downcall.trailer_buf,
op->downcall.trailer_size, iter)) {
gossip_err("%s: failed to copy trailer.\n", __func__);
Expand Down Expand Up @@ -779,9 +778,35 @@ static long orangefs_devreq_compat_ioctl(struct file *filp, unsigned int cmd,

#endif /* CONFIG_COMPAT is in .config */

static __poll_t orangefs_devreq_poll(struct file *file,
struct poll_table_struct *poll_table)
{
__poll_t poll_revent_mask = 0;

poll_wait(file, &orangefs_request_list_waitq, poll_table);

if (!list_empty(&orangefs_request_list))
poll_revent_mask |= EPOLLIN;
return poll_revent_mask;
}

/* the assigned character device major number */
static int orangefs_dev_major;

static const struct file_operations orangefs_devreq_file_operations = {
.owner = THIS_MODULE,
.read = orangefs_devreq_read,
.write_iter = orangefs_devreq_write_iter,
.open = orangefs_devreq_open,
.release = orangefs_devreq_release,
.unlocked_ioctl = orangefs_devreq_ioctl,

#ifdef CONFIG_COMPAT /* CONFIG_COMPAT is in .config */
.compat_ioctl = orangefs_devreq_compat_ioctl,
#endif
.poll = orangefs_devreq_poll
};

/*
* Initialize orangefs device specific state:
* Must be called at module load time only
Expand Down Expand Up @@ -814,29 +839,3 @@ void orangefs_dev_cleanup(void)
"*** /dev/%s character device unregistered ***\n",
ORANGEFS_REQDEVICE_NAME);
}

static __poll_t orangefs_devreq_poll(struct file *file,
struct poll_table_struct *poll_table)
{
__poll_t poll_revent_mask = 0;

poll_wait(file, &orangefs_request_list_waitq, poll_table);

if (!list_empty(&orangefs_request_list))
poll_revent_mask |= EPOLLIN;
return poll_revent_mask;
}

const struct file_operations orangefs_devreq_file_operations = {
.owner = THIS_MODULE,
.read = orangefs_devreq_read,
.write_iter = orangefs_devreq_write_iter,
.open = orangefs_devreq_open,
.release = orangefs_devreq_release,
.unlocked_ioctl = orangefs_devreq_ioctl,

#ifdef CONFIG_COMPAT /* CONFIG_COMPAT is in .config */
.compat_ioctl = orangefs_devreq_compat_ioctl,
#endif
.poll = orangefs_devreq_poll
};
Loading

0 comments on commit 8ea4a5d

Please sign in to comment.