mirror of
https://github.com/versity/scoutfs.git
synced 2026-04-30 09:56:55 +00:00
Today an inode's items are deleted once its nlink reaches zero and the final iput is called in a local mount. This can delete inodes from under other mounts which have opened the inode before it was unlinked on another mount. We fix this by adding cached inode tracking. Each mount maintains groups of cached inode bitmaps at the same granularity as inode locking. As a mount performs its final iput it gets a bitmap from the server which indicates if any other mount has inodes in the group open. This makes the two fast paths of opening and closing linked files and of deleting a file that was unlinked locally only pay a moderate cost of either maintaining the bitmap locally and only getting the open map once per lock group. Removing many files in a group will only lock and get the open map once per group. Signed-off-by: Zach Brown <zab@versity.com>
65 lines
1.3 KiB
Makefile
65 lines
1.3 KiB
Makefile
obj-$(CONFIG_SCOUTFS_FS) := scoutfs.o
|
|
|
|
CFLAGS_super.o = -DSCOUTFS_GIT_DESCRIBE=\"$(SCOUTFS_GIT_DESCRIBE)\"
|
|
|
|
CFLAGS_scoutfs_trace.o = -I$(src) # define_trace.h double include
|
|
|
|
# add EXTRA_CFLAGS defines for kernel compat
|
|
-include $(src)/Makefile.kernelcompat
|
|
|
|
scoutfs-y += \
|
|
avl.o \
|
|
alloc.o \
|
|
block.o \
|
|
btree.o \
|
|
client.o \
|
|
counters.o \
|
|
data.o \
|
|
dir.o \
|
|
export.o \
|
|
ext.o \
|
|
file.o \
|
|
forest.o \
|
|
inode.o \
|
|
ioctl.o \
|
|
item.o \
|
|
lock.o \
|
|
lock_server.o \
|
|
msg.o \
|
|
net.o \
|
|
omap.o \
|
|
options.o \
|
|
per_task.o \
|
|
quorum.o \
|
|
recov.o \
|
|
scoutfs_trace.o \
|
|
server.o \
|
|
sort_priv.o \
|
|
spbm.o \
|
|
srch.o \
|
|
super.o \
|
|
sysfs.o \
|
|
trans.o \
|
|
triggers.o \
|
|
tseq.o \
|
|
xattr.o
|
|
|
|
#
|
|
# The raw types aren't available in userspace headers. Make sure all
|
|
# the types we use in the headers are the exported __ versions.
|
|
#
|
|
# XXX dunno how we're really supposed to do this in kbuild
|
|
#
|
|
.PHONY: $(src)/check_exported_types
|
|
$(src)/check_exported_types:
|
|
@if egrep '\<[us](8|16|32|64\>)' $(src)/format.h $(src)/ioctl.h; then \
|
|
echo "no raw types in exported headers, preface with __"; \
|
|
exit 1; \
|
|
fi
|
|
@if egrep '\<__packed\>' $(src)/format.h $(src)/ioctl.h; then \
|
|
echo "no __packed allowed in exported headers"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
extra-y += check_exported_types
|