- 15 9月, 2017 1 次提交
-
-
由 Markus Elfring 提交于
Omit an extra message for a memory allocation failure in these functions. This issue was detected by using the Coccinelle software. Signed-off-by: NMarkus Elfring <elfring@users.sourceforge.net> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 27 4月, 2017 1 次提交
-
-
由 Martin Brandenburg 提交于
It is not necessary to take the lock and search through the request list if the list is empty. Signed-off-by: NMartin Brandenburg <martin@omnibond.com> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 16 4月, 2017 1 次提交
-
-
由 Martin Brandenburg 提交于
Otherwise lockdep says: [ 1337.483798] ================================================ [ 1337.483999] [ BUG: lock held when returning to user space! ] [ 1337.484252] 4.11.0-rc6 #19 Not tainted [ 1337.484423] ------------------------------------------------ [ 1337.484626] mount/14766 is leaving the kernel with locks still held! [ 1337.484841] 1 lock held by mount/14766: [ 1337.485017] #0: (&type->s_umount_key#33/1){+.+.+.}, at: [<ffffffff8124171f>] sget_userns+0x2af/0x520 Caught by xfstests generic/413 which tried to mount with the unsupported mount option dax. Then xfstests generic/422 ran sync which deadlocks. Signed-off-by: NMartin Brandenburg <martin@omnibond.com> Acked-by: NMike Marshall <hubcap@omnibond.com> Cc: stable@vger.kernel.org Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
-
- 10 2月, 2017 1 次提交
-
-
由 Mike Marshall 提交于
This patch is simlar to one Dan Carpenter sent me, cleans up some return codes and whitespace errors. There was one place where he thought inserting an error message into the ring buffer might be too chatty, I hope I convinced him othewise. As a consolation <g> I changed a truly chatty error message in another location into a debug message, system-admins had already yelled at me about that one... Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 06 12月, 2016 1 次提交
-
-
由 Al Viro 提交于
copy_from_iter_full(), copy_from_iter_full_nocache() and csum_and_copy_from_iter_full() - counterparts of copy_from_iter() et.al., advancing iterator only in case of successful full copy and returning whether it had been successful or not. Convert some obvious users. *NOTE* - do not blindly assume that something is a good candidate for those unless you are sure that not advancing iov_iter in failure case is the right thing in this case. Anything that does short read/short write kind of stuff (or is in a loop, etc.) is unlikely to be a good one. Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
-
- 16 8月, 2016 2 次提交
-
-
由 Martin Brandenburg 提交于
Only op_timeout_secs, slot_timeout_secs, and hash_table_size are left because they are exposed as module parameters. All other global variables have the orangefs_ prefix. Signed-off-by: NMartin Brandenburg <martin@omnibond.com>
-
由 Martin Brandenburg 提交于
Signed-off-by: NMartin Brandenburg <martin@omnibond.com>
-
- 15 8月, 2016 1 次提交
-
-
由 Martin Brandenburg 提交于
Mostly this is moving code into orangefs-debugfs.c so that globals turn into static globals. Then gossip_debug_mask is renamed orangefs_gossip_debug_mask but keeps global visibility, so it can be used from a macro. Signed-off-by: NMartin Brandenburg <martin@omnibond.com>
-
- 13 8月, 2016 1 次提交
-
-
由 Martin Brandenburg 提交于
This is a new userspace operation, which will be done if the client-core version is greater than or equal to 2.9.6. This will provide a way to implement optional features and to determine which features are supported by the client-core. If the client-core version is older than 2.9.6, no optional features are supported and the op will not be done. The intent is to allow protocol extensions without relying on the client-core's current behavior of ignoring what it doesn't understand. Signed-off-by: NMartin Brandenburg <martin@omnibond.com>
-
- 10 8月, 2016 1 次提交
-
-
由 Martin Brandenburg 提交于
The client reports its version to the kernel on startup. We already test that it is above the minimum version. Now we record it in a global variable so code elsewhere can consult it before making a request the client may not understand. Signed-off-by: NMartin Brandenburg <martin@omnibond.com>
-
- 06 7月, 2016 1 次提交
-
-
由 Jann Horn 提交于
In orangefs_inode_getxattr(), an fsuid is written to dmesg. The kuid is converted to a userspace uid via from_kuid(current_user_ns(), [...]), but since dmesg is global, init_user_ns should be used here instead. In copy_attributes_from_inode(), op_alloc() and fill_default_sys_attrs(), upcall structures are populated with uids/gids that have been mapped into the caller's namespace. However, those upcall structures are read by another process (the userspace filesystem driver), and that process might be running in another namespace. This effectively lets any user spoof its uid and gid as seen by the userspace filesystem driver. To fix the second issue, I just construct the opcall structures with init_user_ns uids/gids and require the filesystem server to run in the init namespace. Since orangefs is full of global state anyway (as the error message in DUMP_DEVICE_ERROR explains, there can only be one userspace orangefs filesystem driver at once), that shouldn't be a problem. [ Why does orangefs even exist in the kernel if everything does upcalls into userspace? What does orangefs do that couldn't be done with the FUSE interface? If there is no good answer to those questions, I'd prefer to see orangefs kicked out of the kernel. Can that be done for something that shipped in a release? According to commit f7ab093f ("Orangefs: kernel client part 1"), they even already have a FUSE daemon, and the only rational reason (apart from "but most of our users report preferring to use our kernel module instead") given for not wanting to use FUSE is one "in-the-works" feature that could probably be integated into FUSE instead. ] This patch has been compile-tested. Signed-off-by: NJann Horn <jannh@google.com> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 26 3月, 2016 1 次提交
-
-
由 Al Viro 提交于
* switch orangefs_remount() to taking ORANGEFS_SB(sb) instead of sb * remove from the list _before_ orangefs_unmount() - request_mutex in the latter will make sure that nothing observed in the loop in ORANGEFS_DEV_REMOUNT_ALL handling will get freed until the end of loop * on removal, keep the forward pointer and zero the back one. That way we can drop and regain the spinlock in the loop body (again, ORANGEFS_DEV_REMOUNT_ALL one) and still be able to get to the rest of the list. Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 15 3月, 2016 1 次提交
-
-
由 Mike Marshall 提交于
Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 10 3月, 2016 1 次提交
-
-
由 Martin Brandenburg 提交于
Signed-off-by: NMartin Brandenburg <martin@omnibond.com> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 04 3月, 2016 1 次提交
-
-
由 Mike Marshall 提交于
Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 27 2月, 2016 1 次提交
-
-
由 Mike Marshall 提交于
Al Viro has cleaned up the way ops are processed and waited for, now orangefs.txt has an overview of how it works. Several recent related commits have added to the comments in the code as well. Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 26 2月, 2016 1 次提交
-
-
由 Mike Marshall 提交于
Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 25 2月, 2016 1 次提交
-
-
由 Mike Marshall 提交于
Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 20 2月, 2016 5 次提交
-
-
由 Al Viro 提交于
* turn all those list_del(&op->list) into list_del_init() * don't pick ops that are already given up in control device ->read()/->write_iter(). * have orangefs_clean_interrupted_operation() notice if op is currently being copied to/from daemon (by said ->read()/->write_iter()) and wait for that to finish. * when we are done copying to/from daemon and find that it had been given up while we were doing that, wake the waiting ..._clean_interrupted_... As the result, we are guaranteed that orangefs_clean_interrupted_operation(op) doesn't return until nobody else can see op. Moreover, we don't need to play with op refcounts anymore. Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
... and clean the end of control device ->write_iter() while we are at it Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
shouldn't be needed now Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
new waiting-for-slot logics: * make request for slot wait for bufmap to be set up if it comes before it's installed *OR* while it's running down * make closing control device wait for all slots to be freed * waiting itself rewritten to (open-coded) analogues of wait_event_... primitives - we would need wait_event_locked() and, pardon an obscenely long name, wait_event_interruptible_exclusive_timeout_locked(). * we never wait for more than slot_timeout_secs in total and, if during the wait the daemon goes away, we only allow ORANGEFS_BUFMAP_WAIT_TIMEOUT_SECS for it to come back. * (cosmetical) bitmap is used instead of an array of zeroes and ones * old (and only reached if we are about to corrupt memory) waiting for daemon restart in service_operation() removed. [Martin's fixes folded] Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
Make cancels reuse the aborted read/write op, to make sure they do not fail on lack of memory. Don't issue a cancel unless the daemon has seen our read/write, has not replied and isn't being shut down. If cancel *is* issued, don't wait for it to complete; stash the slot in there and just have it freed when cancel is finally replied to or purged (and delay dropping the reference until then, obviously). Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 05 2月, 2016 1 次提交
-
-
由 Mike Marshall 提交于
There were two just alike, making it hard maybe to tell which one you were looking at in syslog... so I changed it a little by adding some extra interesting tidbits to it... Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 24 1月, 2016 10 次提交
-
-
由 Al Viro 提交于
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
... we are not going to get woken up anyway, so it's just going to time out and whine. Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
All timeouts are in _seconds_, so all calls are of form MSECS_TO_JIFFIES(n * 1000), which is a convoluted way to spell n * HZ. Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
* create with refcount 1 * make op_release() decrement and free if zero (i.e. old put_op() has become that). * mark when submitter has given up waiting; from that point nobody else can move between the lists, change state, etc. * have daemon read/write_iter grab a reference when picking op and *always* give it up in the end * don't put into hash until we know it's been successfully passed to daemon * move op->lock _lower_ than htab_in_progress_lock (and make sure to take it in purge_inprogress_ops()) Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
not just for list_empty()... Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
由 Al Viro 提交于
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 20 1月, 2016 1 次提交
-
-
由 Mike Marshall 提交于
Thanks to Intel's kbuild test robot Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 14 1月, 2016 1 次提交
-
-
由 Mike Marshall 提交于
Until now, orangefs_devreq_write_iter has just been a wrapper for the old-fashioned orangefs_devreq_writev... linux would call .write_iter with "struct kiocb *iocb" and "struct iov_iter *iter" and .write_iter would just: return pvfs2_devreq_writev(iocb->ki_filp, iter->iov, iter->nr_segs, &iocb->ki_pos); Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 05 1月, 2016 1 次提交
-
-
由 Martin Brandenburg 提交于
This only changes the names of things, so there is no functional change. Signed-off-by: NMartin Brandenburg <martin@omnibond.com> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 18 12月, 2015 1 次提交
-
-
由 Martin Brandenburg 提交于
There was previously MAX_ALIGNED_DEV_REQ_(UP|DOWN)SIZE macros which evaluated to MAX_DEV_REQ_(UP|DOWN)SIZE+8. As it is unclear what this is for, other than creating a situation where we accept more data than we can parse, it is removed. Signed-off-by: NMike Marshall <hubcap@omnibond.com> Signed-off-by: NMartin Brandenburg <martin@omnibond.com>
-
- 16 12月, 2015 1 次提交
-
-
由 Martin Brandenburg 提交于
Found by the infant Orangefs fuzzer... Signed-off-by: NMartin Brandenburg <martin@omnibond.com> Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-
- 15 12月, 2015 1 次提交
-
-
由 Mike Marshall 提交于
Get rid of add_wait_queue, set_current_state, etc, and use the wait_event() model. Signed-off-by: NMike Marshall <hubcap@omnibond.com>
-